Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch improve-svc-httpd Excluding Merge-Ins
This is equivalent to a diff from 0e49690ac0 to 492780058c
2022-12-17
| ||
05:37 | MERGED_WITH 492780058ce6a534e108460826e0766719aaf175779ce1edd7c7a976b0d6210f check-in: 3499624307 user: r14c tags: master, trunk | |
05:25 | fix interest-cohort header, add curl to build env, use realpath in upload util Leaf check-in: 492780058c user: r14c tags: improve-svc-httpd | |
02:47 | add mk mkdirs command to build script check-in: 96891254e0 user: r14c tags: improve-svc-httpd | |
02:46 | declare extern variables - fixes "multiple definition" errors check-in: 343ac4d637 user: r14c tags: master, trunk | |
2022-11-29
| ||
15:54 | various improvements to svc/httpd * expand content type list * fix code format * fix "no query strings allowed" behavior (ignore them) check-in: aa3f94ea73 user: r14c tags: improve-svc-httpd | |
2022-11-28
| ||
02:20 | update documentation, reorganize some host integration commands * clean up README.txt * update INSTALL to reflect changes to mkconfig * dis/tomo-init → dis/tomo-desktop * /tmp is required for acme to function (touch tmp/.keep) * mv tomo-dev utils/tomo-dev * add utils/start-tomo script with automatic screen resolution detection check-in: 0e49690ac0 user: r14c tags: master, trunk | |
2022-11-21
| ||
03:49 | fix menu command for hub/9p.zone check-in: 59b5855800 user: r14c tags: master, trunk | |
Changes to .fossil-settings/ignore-glob.
︙ | ︙ | |||
90 91 92 93 94 95 96 | libinterp/keyring.h libinterp/loadermod.h libinterp/mathmod.h libinterp/runt.h libinterp/sysmod.h libinterp/tkmod.h limbo/runt.h | > > > > | 90 91 92 93 94 95 96 97 98 99 100 | libinterp/keyring.h libinterp/loadermod.h libinterp/mathmod.h libinterp/runt.h libinterp/sysmod.h libinterp/tkmod.h limbo/runt.h services/httpd/httpd.debug services/httpd/httpd.log tomo-*-*-*-*.zip |
Changes to .woodpecker.yml.
1 2 3 4 5 6 7 | pipeline: Linux-386--debian: image: debian:stable-slim group: build commands: - dpkg --add-architecture i386 - apt update >/dev/null | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | pipeline: Linux-386--debian: image: debian:stable-slim group: build commands: - dpkg --add-architecture i386 - apt update >/dev/null - apt install -yy curl:i386 binutils:i386 gcc:i386 libc6-dev-i386 libx11-dev:i386 libxext-dev:i386 zip:i386 >/dev/null - ./utils/tomo-dev.sh build-Linux `pwd` - rm -rf .git .hg - zip -r "tomo-Linux-386--debian-$CI_COMMIT_SHA-$CI_BUILD_STARTED.zip" * - ./utils/tomo-dev.sh upload-ci "tomo-Linux-386--debian-$CI_COMMIT_SHA-$CI_BUILD_STARTED.zip" # Linux-386--ubuntu: # image: ubuntu:bionic # group: build |
︙ | ︙ |
Changes to FreeBSD/386/include/fpuctl.h.
|
| | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 | /* vi: ts=8 * FreeBSD 386 fpu support * Mimic Plan9 floating point support */ /* FCR */ #define FPINEX (1<<5) #define FPUNFL ((1<<4)|(1<<1)) #define FPOVFL (1<<3) #define FPZDIV (1<<2) #define FPINVAL (1<<0) #define FPRNR (0<<10) |
︙ | ︙ |
Deleted acme/mail/guide.
|
| < < < < < |
Deleted acme/mail/readme.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to appl/acme/acme.b.
︙ | ︙ | |||
173 174 175 176 177 178 179 | waitpid0, waitpid1 : int; mainpid : int; fontcache : array of ref Reffont; nfontcache : int; reffonts : array of ref Reffont; | | | | | 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | waitpid0, waitpid1 : int; mainpid : int; fontcache : array of ref Reffont; nfontcache : int; reffonts : array of ref Reffont; deffontnames := array[2] of { # TODO theme support "/fonts/hermit/regular/16/font", "/fonts/BQN386/16/font", }; command : ref Command; WPERCOL : con 8; NSnarf : con 32; |
︙ | ︙ |
Changes to appl/charon/mkfile.
︙ | ︙ | |||
81 82 83 84 85 86 87 | install:V: $ROOT/dis/charon.dis $ROOT/dis/charon.dis: charon.dis rm -f $target && cp charon.dis $target charon.dis: $MODULES $SYS_MODULES | > | | | 81 82 83 84 85 86 87 88 89 90 91 92 93 | install:V: $ROOT/dis/charon.dis $ROOT/dis/charon.dis: charon.dis rm -f $target && cp charon.dis $target charon.dis: $MODULES $SYS_MODULES # see </tktview/c235634a814ed923f35e6aae88f18b36e35716b3> #img.dis: img.b $MODULE $SYS_MODULE # limbo $LIMBOFLAGS -c -gw img.b nuke:V: rm -f $ROOT/dis/charon.dis |
Changes to appl/cmd/ip/mkfile.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <../../../mkconfig DIRS=\ ppp\ # nppp\ TARG=\ bootpd.dis\ dhcp.dis\ ping.dis\ rip.dis\ tftpd.dis\ virgild.dis\ sntp.dis\ SYSMODULES=\ attrdb.m\ bufio.m\ dhcp.m\ draw.m\ ether.m\ ip.m\ ipattr.m\ sys.m\ DISBIN=$ROOT/dis/ip <$ROOT/mkfiles/mkdis <$ROOT/mkfiles/mksubdirs | > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <../../../mkconfig DIRS=\ ppp\ # nppp\ TARG=\ bootpd.dis\ dhcp.dis\ ping.dis\ rip.dis\ shttpd.dis\ tftpd.dis\ virgild.dis\ sntp.dis\ SYSMODULES=\ arg.m\ attrdb.m\ bufio.m\ daytime.m\ dhcp.m\ draw.m\ encoding.m\ env.m\ ether.m\ ip.m\ ipattr.m\ keyring.m\ regex.m\ mhttp.m\ security.m\ sh.m\ string.m\ sys.m\ DISBIN=$ROOT/dis/ip <$ROOT/mkfiles/mkdis <$ROOT/mkfiles/mksubdirs |
Added appl/cmd/ip/shttpd.b.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 | # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # # <6972b3440c27a83c1a56c5ecc781148514fb1f11> # <https://github.com/mjl-/httpd/> # <https://git.heropunch.io/ar/inferno-httpd/> implement Shttpd; # features: # # - http/1.0, http/1.1 (keep-alive, chunked responses). no "http/0.9". # - cgi and scgi support # - virtual hosts # - determining content-type based on file extension # - error/access logging # - index file serving, html directory listings # - http basic authentication # - "range" requests, for random access to files # - redirections with regular expressions # - configuration in attrdb format # - as compliant as possible, where reasonable # - mindful of security # # see the manual page for full documentation # # non-features: # # - connection rate limiting. should be done at a higher level, e.g. firewall. # - silly "correct" behavior per RFC # # testing/todo: # # - doc/shttpd-testing.txt can be used for testing. it has to be done manually, # enough corner cases have not been tested, but quite a few have. # - when responding with chunked data, can we embed an error message in a chunks # comment-part when an error with reading the data occurs? # - support transfer-encoding chunked and compressed content-encodings from client? # - check for security issues with http # - think of ssl? # - try to fix dir listings for paths with multiple slashes in them. firefox breaks # on them, is firefox right? # - test with other browsers include "sys.m"; sys: Sys; print, sprint, fprint, fildes: import sys; include "draw.m"; include "arg.m"; include "bufio.m"; bufio: Bufio; Iobuf: import bufio; include "daytime.m"; daytime: Daytime; include "env.m"; env: Env; include "string.m"; str: String; include "keyring.m"; keyring: Keyring; include "security.m"; random: Random; include "encoding.m"; base64: Encoding; include "sh.m"; sh: Sh; include "ip.m"; ipm: IP; IPaddr: import ipm; include "attrdb.m"; attrdb: Attrdb; Db, Dbentry, Tuples: import attrdb; include "regex.m"; regex: Regex; include "mhttp.m"; http: Http; Url, Req, Resp, Hdrs, HTTP_10, HTTP_11, encodepath: import http; UNKNOWN, OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT: import http; Version: con "~tomo/shttpd/0"; Repl: adt { re: regex->Re; rule: list of ref (string, int); # literal string, replacement group for regex maxrepl: int; # highest replacement group parse: fn(restr, rulestr: string): (ref Repl, string); apply: fn(r: self ref Repl, s: string): (int, string, string); }; # config for a single host,port Cfg: adt { host, port: string; listings: array of ref (string, int); # path prefix, list (true/false) cachesecs: int; listens: list of ref (string, string); # ip, port cgipaths: list of ref (string, string, list of string, int); # path, cmd|addr, methods, Cgi|Scgi indexfiles: list of string; redirs: list of ref Repl; auths: list of ref (string, string, string); # path, realm, base64 user:pass gzpaths: list of string; new: fn(): ref Cfg; read: fn(e: ref Dbentry, defaultport: string): (ref Cfg, string); rev: fn(cfg: self ref Cfg); }; # config file, holds one Cfg per host,port Cfgs: adt { file: string; db: ref Db; default: ref Cfg; cfgs: list of (string, string, ref Cfg); # host, port (for lookup) => config accessfd: ref Sys->FD; debugflag, vhostflag: int; addrs: list of string; usertypes: list of ref (string, string); init: fn(file: string): (ref Cfgs, string); read: fn(file: string, db: ref Db): (ref Cfgs, string); find: fn(c: self ref Cfgs, host, port: string): ref Cfg; }; # represents a connection and a request on it Op: adt { id: int; # connection id, for logging now: int; # time of start keepalive: int; chunked: int; length: big; fd: ref Sys->FD; inb: ref Bufio->Iobuf; rhost, rport, lhost, lport: string; req: ref Req; resp: ref Resp; cfgs: ref Cfgs; cfg: ref Cfg; }; Cgitimeoutsecs: con 3*60; Keepalivesecs: con 3*60; defaddr: con "net!*!http"; debugflag: int; webroot: string; credempty: string; ctlchan := ""; environment: list of (string, string); Shttpd: module { init: fn(nil: ref Draw->Context, args: list of string); }; mimetypes := array[] of { (".avi", "video/x-msvideo"), (".b", "text/plain; charset=utf-8"), (".bmp", "image/bmp"), (".bz2", "application/x-bzip"), (".c", "text/plain; charset=utf-8"), (".conf", "text/plain; charset=utf-8"), (".css", "text/css"), (".diff", "text/plain; charset=utf-8"), (".doc", "application/msword"), (".dvi", "application/x-dvi"), (".eps", "application/postscript"), (".gif", "image/gif"), (".gz", "application/x-gzip"), (".h", "text/plain; charset=utf-8"), (".htm", "text/html; charset=utf-8"), (".html", "text/html; charset=utf-8"), (".ico", "image/x-icon"), (".jpeg", "image/jpeg"), (".jpg", "image/jpeg"), (".js", "text/javascript; charset=utf-8"), (".man", "text/plain; charset=utf-8"), (".me", "text/plain; charset=utf-8"), (".mp3", "audio/mpeg"), (".mp4", "video/mp4"), (".mpeg", "video/mpeg"), (".mpg", "video/mpeg"), (".ms", "text/plain; charset=utf-8"), (".ogg", "application/ogg"), (".orig", "text/plain; charset=utf-8"), (".patch", "text/plain; charset=utf-8"), (".pdf", "application/pdf"), (".png", "image/png"), (".ppt", "application/vnd.ms-powerpoint"), (".ps", "application/postscript"), (".py", "text/plain; charset=utf-8"), (".roff", "text/plain; charset=utf-8"), (".sh", "text/plain; charset=utf-8"), (".svg", "image/svg+xml"), (".t", "text/plain; charset=utf-8"), (".tar", "application/x-tar"), (".tar.bz2", "application/x-bzip-compressed-tar"), (".tar.gz", "application/x-tgz"), (".tbz", "application/x-bzip-compressed-tar"), (".tex", "text/plain; charset=utf-8"), (".tgz", "application/x-tgz"), (".tif", "image/tiff"), (".tiff", "image/tiff"), (".torrent", "application/x-bittorrent"), (".txt", "text/plain; charset=utf-8"), (".wav", "audio/x-wav"), (".woff", "application/font-woff"), (".woff2", "font/woff2"), (".xls", "application/vnd.ms-excel"), (".y", "text/plain; charset=utf-8"), (".zip", "application/zip"), }; Eok: con 200; Epartialcontent: con 206; Emovedpermanently: con 301; Enotmodified: con 304; Ebadrequest: con 400; Eunauthorized: con 401; Eforbidden: con 403; Enotfound: con 404; Emethodnotallowed: con 405; Elengthrequired: con 411; Epreconditionfailed: con 412; Ebadmediatype: con 415; Enotsatisfiable: con 416; Eexpectationfailed: con 417; Eservererror: con 500; Enotimplemented: con 501; Ebadversion: con 505; statusmsgs := array[] of { (100, "Continue"), (200, "OK"), (206, "Partial Content"), (301, "Moved Permanently"), (304, "Not Modified"), (400, "Bad Request"), (401, "Unauthorized"), (403, "Forbidden"), (404, "Object Not Found"), (405, "Method Not Allowed"), (411, "Length Required"), (412, "Precondition Failed"), (415, "Unsupported Media Type"), (416, "Requested Range Not Satisfiable"), (417, "Expectation Failed"), (500, "Internal Server Error"), (501, "Not Implemented"), (505, "HTTP Version Not Supported"), }; # relevant known request headers whose values are not allowed to be concatenated (not a bnf #-rule, see rfc2616#2.1) nomergeheaders := array[] of { # these two would be useful to merge. alas, it is not allowed by rfc2616, section 4.2, last paragraph "if-match", "if-none-match", "authorization", "content-length", "content-type", "host", "if-modified-since", "if-range", "if-unmodified-since", "range", }; idch: chan of int; randch: chan of int; killch: chan of int; killschedch: chan of (int, int, chan of int); excch: chan of (int, chan of string); warnch: chan of (int, string); cfgsgetch: chan of chan of ref Cfgs; newcfgsch: chan of ref Cfgs; logch: chan of (string, string); logfdch: chan of ref Sys->FD; timefd: ref Sys->FD; errorfd: ref Sys->FD; Cgi, Scgi: con iota; cgitypes := array[] of {"cgi", "scgi"}; cgispawnch: chan of (string, string, string, ref Op, big, chan of (ref Sys->FD, ref Sys->FD, string)); scgidialch: chan of (string, chan of (ref Sys->FD, string)); init(nil: ref Draw->Context, args: list of string) { sys = load Sys Sys->PATH; bufio = load Bufio Bufio->PATH; env = load Env Env->PATH; daytime = load Daytime Daytime->PATH; keyring = load Keyring Keyring->PATH; random = load Random Random->PATH; str = load String String->PATH; base64 = load Encoding Encoding->BASE64PATH; sh = load Sh Sh->PATH; ipm = load IP IP->PATH; ipm->init(); attrdb = load Attrdb Attrdb->PATH; err := attrdb->init(); if(err != nil) fail("loading attrdb: "+err); regex = load Regex Regex->PATH; http = load Http Http->PATH; http->init(bufio); cfgs: ref Cfgs; (cfgs, err) = Cfgs.init("/dev/null"); if(err != nil) fail("making empty config: "+err); defcfg := cfgs.default; arg := load Arg Arg->PATH; arg->init(args); arg->setusage(arg->progname()+" [-dh] [-A path realm user:pass] [-C cachesecs] [-L listpath 0|1] [-a addr] [-c path command methods] [-f ctlchan] [-i indexfile] [-l logfile] [-n config] [-r pathre dest] [-s path addr methods] [-t extension mimetype] [-z gzippath] webroot"); while((c := arg->opt()) != 0) case c { 'A' => defcfg.auths = ref (arg->earg(), arg->earg(), base64->enc(array of byte arg->earg()))::defcfg.auths; if(haschar((hd defcfg.auths).t1, '"')) { fprint(fildes(2), "realm must not have double quote, not supported by http/1.0"); raise "fail:usage"; } 'C' => defcfg.cachesecs = int arg->earg(); 'L' => path := arg->earg(); what := int arg->earg(); nl := array[len defcfg.listings+1] of ref (string, int); nl[:] = defcfg.listings; nl[len defcfg.listings] = ref (path, what); defcfg.listings = nl; 'a' => cfgs.addrs = arg->earg()::cfgs.addrs; 'c' => defcfg.cgipaths = ref (arg->earg(), arg->earg(), sys->tokenize(arg->earg(), " ,").t1, Cgi)::defcfg.cgipaths; 'd' => cfgs.debugflag++; 'f' => ctlchan = arg->earg(); 'h' => cfgs.vhostflag++; 'i' => defcfg.indexfiles = arg->earg()::defcfg.indexfiles; 'l' => logfile := arg->earg(); cfgs.accessfd = sys->open(logfile, Sys->OWRITE); if(cfgs.accessfd == nil) fail(sprint("open logfile %q: %r", logfile)); sys->seek(cfgs.accessfd, big 0, Sys->SEEKEND); 'n' => file := arg->earg(); (cfgs, err) = Cfgs.init(file); if(err != nil) { fprint(fildes(2), "reading %q: %s\n", file, err); raise "fail:usage"; } defcfg = cfgs.default; defcfg.rev(); cfgs.usertypes = rev(cfgs.usertypes); cfgs.addrs = rev(cfgs.addrs); 'r' => (restr, rulestr) := (arg->earg(), arg->earg()); (repl, rerr) := Repl.parse(restr, rulestr); if(err != nil) { fprint(fildes(2), "parsing redir %q %q: %s\n", restr, rulestr, rerr); raise "fail:usage"; } defcfg.redirs = repl::defcfg.redirs; 's' => defcfg.cgipaths = ref (arg->earg(), arg->earg(), sys->tokenize(arg->earg(), " ,").t1, Scgi)::defcfg.cgipaths; 't' => cfgs.usertypes = ref (arg->earg(), arg->earg())::cfgs.usertypes; 'z' => defcfg.gzpaths = arg->earg()::defcfg.gzpaths; * => arg->usage(); } args = arg->argv(); if(len args != 1) arg->usage(); webroot = hd args; defcfg.rev(); cfgs.usertypes = rev(cfgs.usertypes); cfgs.addrs = rev(cfgs.addrs); credempty = base64->enc(array of byte ":"); # empty-user:empty-pass environment = env->getall(); pid := sys->pctl(Sys->NEWPGRP|Sys->FORKNS|Sys->FORKENV|Sys->FORKFD, nil); if(pid < 0) fail(sprint("pctl: %r")); if(sys->chdir(webroot) != 0) fail(sprint("chdir webroot %q: %r", webroot)); if(ctlchan != nil) { fio := sys->file2chan("/chan", ctlchan); if(fio == nil) fail(sprint("file2chan in /chan: %q: %r", ctlchan)); spawn ctlhandler(fio); } timefd = sys->open("/dev/time", Sys->OREAD); if(timefd == nil) fail(sprint("open /dev/time: %r")); errorfd = sys->open("/services/logs/shttpderror", Sys->OWRITE); if(errorfd != nil) sys->seek(errorfd, big 0, Sys->SEEKEND); idch = chan[8] of int; spawn idgen(); randch = chan of int; spawn randgen(); killch = chan of int; killschedch = chan of (int, int, chan of int); spawn killer(); excch = chan of (int, chan of string); spawn exceptsetter(); warnch = chan of (int, string); spawn warner(); cfgsgetch = chan of chan of ref Cfgs; newcfgsch = chan of ref Cfgs; spawn cfgsserver(); logch = chan of (string, string); logfdch = chan of ref Sys->FD; spawn logger(); newcfgsch <-= cfgs; cgispawnch = chan of (string, string, string, ref Op, big, chan of (ref Sys->FD, ref Sys->FD, string)); spawn cgispawner(); scgidialch = chan of (string, chan of (ref Sys->FD, string)); spawn scgidialer(); if(cfgs.addrs == nil) cfgs.addrs = defaddr::nil; for(addrs := rev(cfgs.addrs); addrs != nil; addrs = tl addrs) { addr := hd addrs; (aok, aconn) := sys->announce(addr); if(aok != 0) fail(sprint("announce %q: %r", addr)); spawn listen(hd addrs, aconn, sync := chan of int); <-sync; } warn(0, sprint("shttpd started at %s", daytime->time())); } listen(addr: string, aconn: Sys->Connection, sync: chan of int) { sync <-= 0; for(;;) { (lok, lconn) := sys->listen(aconn); if(lok != 0) fail(sprint("listen %q: %r", addr)); dfd := sys->open(lconn.dir+"/data", Sys->ORDWR); if(dfd != nil) spawn httpserve(dfd, lconn.dir); else warn(0, sprint("open connection file: %r")); lconn.dfd = nil; } } idgen() { id := 1; for(;;) idch <-= id++; } randgen() { for(;;) randch <-= random->randomint(Random->NotQuiteRandom); } killer() { for(;;) alt { pid := <-killch => kill(pid); (pid, timeout, respch) := <-killschedch => spawn timeoutkill(pid, timeout, respch); } } cfgsserver() { cfgs: ref Cfgs; for(;;) alt { respch := <-cfgsgetch => respch <-= cfgs; cfgs = <-newcfgsch => # non-atomic wrt other threads... not much to do about it debugflag = cfgs.debugflag; logfdch <-= cfgs.accessfd; } } timeoutkill(pid, timeout: int, respch: chan of int) { respch <-= sys->pctl(0, nil); sys->sleep(timeout); kill(pid); } exceptsetter() { for(;;) { (pid, respch) := <-excch; err: string; fd := sys->open(sprint("/prog/%d/ctl", pid), Sys->OWRITE); if(fd == nil || fprint(fd, "exceptions notifyleader") == -1) err = sprint("setting exception handling for pid %d: %r", pid); if(respch == nil && err != nil) { warn(0, sprint("setting exceptions notifyleader for pid %d: %s", pid, err)); kill(pid); } if(respch != nil) respch <-= err; } } warner() { for(;;) { (id, s) := <-warnch; if(s != nil && s[len s-1] == '\n') s = s[:len s-1]; warn(id, s); } } cgispawner() { for(;;) { (cmd, path, cgipath, op, length, replych) := <-cgispawnch; spawn cgispawn(cmd, path, cgipath, op, length, replych); } } cgispawn(cmd, path, cgipath: string, op: ref Op, length: big, replych: chan of (ref Sys->FD, ref Sys->FD, string)) { p0 := array[2] of ref Sys->FD; p1 := array[2] of ref Sys->FD; p2 := array[2] of ref Sys->FD; if(sys->pipe(p0) != 0 || sys->pipe(p1) != 0 || sys->pipe(p2) != 0) { replych <-= (nil, nil, sprint("pipe: %r")); return; } spawn errlogger(op, p2[0]); if(sys->pctl(Sys->NEWPGRP|Sys->NEWFD|Sys->FORKNS|Sys->FORKENV, p0[0].fd::p1[0].fd::p0[1].fd::p1[1].fd::p2[1].fd::nil) < 0) { replych <-= (nil, nil, sprint("pctl newpgrp,newfd,forkns,forkenv: %r")); return; } for(l := cgivars(path, cgipath, op, length, nil); l != nil; l = tl l) { epath := "/env/"+(hd l).t0; efd := sys->create(epath, Sys->OWRITE, 8r666); if(efd == nil) { replych <-= (nil, nil, sprint("open %q: %r", epath)); return; } d := array of byte (hd l).t1; if(sys->write(efd, d, len d) != len d) { replych <-= (nil, nil, sprint("write %q: %r", epath)); return; } } if(sys->dup(p0[1].fd, 0) == -1 || sys->dup(p1[1].fd, 1) == -1 || sys->dup(p2[1].fd, 2) == -1) { replych <-= (nil, nil, sprint("dup: %r")); return; } replych <-= (p0[0], p1[0], nil); p0[1] = fildes(p0[1].fd); p1[1] = fildes(p1[1].fd); p2[1] = fildes(p2[1].fd); p0[0] = p1[0] = p2[0] = nil; err := sh->system(nil, cmd); if(err != nil) warnch <-= (op.id, sprint("cgispawn, command %q: %s", cmd, err)); } errlogger(op: ref Op, fd: ref Sys->FD) { for(;;) { n := sys->read(fd, d := array[Sys->ATOMICIO] of byte, len d); if(n < 0) warnch <-= (op.id, sprint("reading stderr: %r")); if(n <= 0) break; warnch <-= (op.id, string d[:n]); } } scgidialer() { for(;;) { (scgiaddr, replychan) := <-scgidialch; spawn scgidial(scgiaddr, replychan); } } scgidial(scgiaddr: string, replychan: chan of (ref Sys->FD, string)) { (ok, conn) := sys->dial(scgiaddr, nil); if(ok < 0) replychan <-= (nil, sprint("dialing scgid %q: %r", scgiaddr)); else replychan <-= (conn.dfd, nil); } ctlhandler(fio: ref Sys->FileIO) { for(;;) alt { (nil, nil, nil, rc) := <- fio.read => if(rc == nil) continue; rc <-= (nil, "permission denied"); (nil, data, nil, wc) := <- fio.write => if(wc == nil) continue; s := string data; if(s != nil && s[len s-1] == '\n') s = s[:len s-1]; case s { "reload" => cfgsgetch <-= respch := chan of ref Cfgs; cfgs := <-respch; if(cfgs.db.reopen() != 0) { msg := sprint("reopening config file: %r"); warn(0, msg); wc <-= (0, msg); continue; } (ncfgs, err) := Cfgs.read(cfgs.file, cfgs.db); if(err != nil) { msg := "error reloading config, keeping current: "+err; warn(0, msg); wc <-= (0, msg); continue; } newcfgsch <-= ncfgs; warn(0, "config file reloaded"); wc <-= (len data, nil); * => wc <-= (0, sprint("bad command: %q", s)); } } } httpserve(fd: ref Sys->FD, conndir: string) { id := <-idch; if(debugflag) say(id, "httpserve"); (lhost, lport) := readaddr(id, conndir+"/local"); (rhost, rport) := readaddr(id, conndir+"/remote"); lhost = IPaddr.parse(lhost).t1.text(); rhost = IPaddr.parse(rhost).t1.text(); if(debugflag) say(id, sprint("connect from %s:%s to %s:%s", rhost, rport, lhost, lport)); pid := sys->pctl(Sys->NEWPGRP|Sys->FORKNS|Sys->NODEVS, nil); if(pid < 0) die(id, sprint("pctl: %r")); excch <-= (pid, nil); if(sys->bind(webroot, "/", Sys->MREPL) < 0) die(id, sprint("bind %q /: %r", webroot)); b := bufio->fopen(fd, Bufio->OREAD); if(b == nil) die(id, sprint("bufio open: %r")); op := ref Op(id, 0, 0, 0, big 0, fd, b, rhost, rport, lhost, lport, nil, nil, nil, nil); for(nsrvs := 0; ; nsrvs++) { if(nsrvs > 0 && !op.keepalive) break; if(sys->chdir("/") != 0) break; op.chunked = op.keepalive = 0; op.length = big -1; op.req = nil; op.resp = nil; op.cfgs = nil; op.cfg = nil; httptransact(pid, b, op); } } httptransact(pid: int, b: ref Iobuf, op: ref Op) { id := op.id; op.now = readtime(); hdrs := Hdrs.new(("server", Version)::nil); # "You know they'll never really die while the Trunk is alive[...] # It lives while the code is shifted, and they live with it, always Going Home." # - Moist von Lipwig, Going Postal, Chapter 13 # "A man is not dead while his name is still spoken." # - Going Postal, Chapter 4 prologue # <http://www.gnuterrypratchett.com/> hdrs.add("X-Clacks-Overhead", "GNU Geo Rivera"); hdrs.add("X-Clacks-Overhead", "GNU Alejandra Agredo"); # we love and miss you dear friends # disable FLoC hdrs.add("Permissions-Policy", "interest-cohort=()"); # kill ourself when no request comes in killschedch <-= (pid, Keepalivesecs*1000, respch := chan of int); killpid := <-respch; (req, rerr) := Req.read(b); cfgsgetch <-= cfgsrespch := chan of ref Cfgs; op.cfgs = <-cfgsrespch; hdrs.add("date", httpdate(op.now)); if(rerr != nil || req.major != 1 || req.method == UNKNOWN) { st := Ebadrequest; if(rerr == nil && req.major != 1) { st = Ebadversion; rerr = sprint("Version requested is HTTP/%d.%d", req.major, req.minor); } else if(rerr == nil && req.method == UNKNOWN) { st = Enotimplemented; rerr = sprint("Method %q not supported", req.methodstr); } stmsg := statusmsg(st); op.resp = Resp.mk(HTTP_10, string st, stmsg, hdrs); html := array of byte mkhtml(sprint("%d - %s: %s", st, stmsg, rerr)); op.resp.h.add("content-type", "text/html; charset=utf-8"); op.resp.h.add("content-length", string len html); err := hresp(op.resp, op.fd, 0, 0); if(err == nil) sys->write(op.fd, html, len html); killch <-= killpid; die(id, "reading request: "+rerr); } killch <-= killpid; if(debugflag) say(id, sprint("request: method %q url %q version %q", req.methodstr, req.url.pack(), sprint("HTTP/%d.%d", req.major, req.minor))); op.req = req; # all values besides "close" are supposedly header names, not important (contoks, conerr) := tokenize(req.h.getlist("connection")); if(conerr != nil || len contoks == 0 && req.h.has("connection", nil)) return responderrmsg(op, Ebadrequest, sprint("Bad Request: Bad value for header \"Connection\"")); op.keepalive = req.version() >= HTTP_11 && conerr == nil && !listhas(contoks, "close"); op.resp = resp := Resp.mk(req.version(), "200", "OK", hdrs); # tell client if it is sending ambiguous requests: duplicate headers of the important kind for(i := 0; i < len nomergeheaders; i++) if(len req.h.findall(nomergeheaders[i]) > 1) return responderrmsg(op, Ebadrequest, sprint("Bad Request: Duplicate headers: \"%s\"", nomergeheaders[i])); if(req.h.has("proxy-authorization", nil)) return responderrmsg(op, Ebadrequest, "Bad Request: Proxy-Authorization credentials sent, unacceptable"); if(req.version() >= HTTP_11 && !req.h.has("host", nil)) return responderrmsg(op, Ebadrequest, "Bad Request: Missing header \"Host\""); # when host-header is absent, we'll request the empty host name, the default host := splithost(req.h.get("host")).t0; if(str->drop(host, "0-9a-zA-Z.:-") != nil || str->splitstrl(host, "..").t1 != nil) return responderrmsg(op, Ebadrequest, nil); cfg := op.cfg = op.cfgs.find(host, op.lport); if(cfg == nil) return responderrmsg(op, Enotfound, nil); # do not accept request when doing vhost and request is from ip that we shouldn't serve host:port on if(op.cfgs.vhostflag && cfg.listens != nil) { addrokay := 0; for(ls := cfg.listens; !addrokay && ls != nil; ls = tl ls) { (chost, cport) := *(hd ls); addrokay = chost == op.lhost && cport == op.lport; } if(!addrokay) { say(id, "request on ip:port, not allowed"); return responderrmsg(op, Enotfound, nil); } } if(req.version() == HTTP_10 && req.method != GET && req.method != HEAD && req.method != POST) return responderrmsg(op, Enotimplemented, sprint("Unknown Method: \"%s\"", req.methodstr)); if(hasbody(op.req) && (req.method == GET || req.method == HEAD || req.method == TRACE || req.method == DELETE)) { op.keepalive = 0; return responderrmsg(op, Ebadrequest, "Bad Request: Entity not allowed in request"); } # for other methods, we ignore bodies by closing the connection. saner than reading and discarding... case req.method { GET or HEAD => ; POST => if(hasbody(op.req)) op.keepalive = 0; TRACE => # bug: the response does not have * as path, but / return respond(op, Eok, req.pack(), "message/http"); OPTIONS => # only (s)cgi paths allow POST, but we won't say, the path may require auth as well. what to do then? hdrs.add("allow", "OPTIONS, GET, HEAD, POST, TRACE"); hdrs.add("accept-ranges", "bytes"); if(hasbody(op.req)) op.keepalive = 0; return responderrmsg(op, Eok, nil); PUT or DELETE => # note: when implementing these, complete support for if-match and if-none-match, and much more probably if(hasbody(op.req)) op.keepalive = 0; return responderrmsg(op, Enotimplemented, "Not Implemented: PUT and DELETE are not supported"); * => if(hasbody(op.req)) op.keepalive = 0; return responderrmsg(op, Enotimplemented, sprint("Unknown Method: \"%s\"", req.methodstr)); } # remove occurrences of "/elem/../" from path, returned path always starts with "/" path := pathsanitize(req.url.path); # we ignore the port in the host-header. this is illegal according to rfc2616, but using it is just silly. # also, we violate rfc2616 by sending 404 "not found" when the host doesn't exist. # we should send 400 "bad request" then, but that is just silly too. if(op.cfgs.vhostflag) { hostdir: string; if(cfg.host != "") { hostdir = cfg.host+"!"+cfg.port; if(sys->chdir(hostdir) != 0) { if(debugflag) say(id, sprint("using hostdir %q from config failed, trying default", hostdir)); hostdir = nil; } } if(hostdir == nil) { hostdir = "_default!"+cfg.port; if(sys->chdir(hostdir) != 0) return responderrmsg(op, Enotfound, nil); } if(debugflag) say(id, sprint("using hostdir %q, path %q", hostdir, path)); } validauth := needauth := 0; realm: string; authtype, cred: string; (authtype, cred) = str->splitstrr(req.h.get("authorization"), " "); if(str->tolower(authtype) != "basic ") cred = nil; else cred = stripws(cred); for(a := cfg.auths; !validauth && a != nil; a = tl a) { (apath, arealm, acred) := *hd a; if(str->prefix(apath, path)) { needauth = 1; realm = arealm; validauth = cred == acred; } } if(needauth && !validauth) { resp.h.add("www-authenticate", sprint("Basic realm=\"%s\"", realm)); return responderrmsg(op, Eunauthorized, nil); } if(req.h.has("authorization", nil) && !needauth && cred != credempty) { resp.h.add("www-authenticate", sprint("Basic realm=\"authentication not allowed, use empty username/password\"")); return responderrmsg(op, Eunauthorized, "Not Authorized: Sending authorization credentials is not allowed for "+ "this resource. Please use an empty username and password or do not send authorization credentials altogether."); } if(debugflag && validauth) say(id, "have valid auth credentials"); for(r := cfg.redirs; r != nil; r = tl r) { repl := hd r; (match, dest, replerr) := repl.apply(path); if(replerr != nil) { warn(id, "redirections misconfiguration: "+replerr); return responderrmsg(op, Eservererror, "Internal Server Error: An error occurred while handling a redirection"); } if(!match) continue; if(!str->prefix("http://", dest) && !str->prefix("https://", dest)) { (havehost, hosthdr) := req.h.find("host"); if(havehost) { dest = "http://"+hosthdr+dest; } else { lport := ""; if(op.lport != "80") lport = ":"+op.lport; httphost := op.lhost; (ok, ip) := IPaddr.parse(httphost); if(ok == 0 && !ip.isv4()) httphost = "["+httphost+"]"; dest = "http://"+httphost+lport+dest; } } if(debugflag) say(id, sprint("redirecting from %q to %q", path, dest)); resp.h.set("location", dest); dest = htmlescape(dest); st := Emovedpermanently; html := mkhtmlstart(sprint("%d - %s", st, statusmsg(st))) + sprint("<h1>Moved Permanently: Moved to <a href=\"%s\">%s</a></h1>\n", dest, dest)+"</body></html>\n"; return respond(op, Emovedpermanently, html, "text/html; charset=utf-8"); } if(((cgipath, cgiaction, methods, cgitype) := findcgi(cfg, path)).t1 != nil) { if(methods != nil && !hasmethod(methods, req.methodstr)) return responderrmsg(op, Emethodnotallowed, nil); return cgi(path, op, cgipath, cgiaction, cgitype); } # path is one of: plain file, directory (either listing or plain index file) dfd := sys->open("."+path, Sys->OREAD); if(dfd != nil) (dok, dir) := sys->fstat(dfd); if(dok == 0 && dir.mode&Sys->DMDIR && path[len path-1] == '/') { for(l := cfg.indexfiles; l != nil; l = tl l) { ipath := "."+path+hd l; (iok, idir) := sys->stat(ipath); if(iok != 0 || idir.mode&Sys->DMDIR) continue; ifd := sys->open(ipath, Sys->OREAD); if(ifd == nil) return responderrmsg(op, Enotfound, nil); if(debugflag) say(id, sprint("using index file %q", hd l)); dfd = ifd; dir = idir; path += hd l; break; } } if(dfd == nil || dok != 0 || (dir.mode&Sys->DMDIR) && (!dolisting(cfg, path) || path != nil && path[len path-1] != '/')) return responderrmsg(op, Enotfound, nil); if(req.method == POST) { resp.h.add("allow", "GET, HEAD, OPTIONS"); return responderrmsg(op, Emethodnotallowed, "Method Not Allowed: POST not allowed"); } resp.h.add("last-modified", httpdate(dir.mtime)); tag := etag(path, op, dir); resp.h.add("etag", tag); ifmatch, ifnonematch, ifunmodsincestr: string; havecond: int; (havecond, ifmatch) = req.h.find("if-match"); if(req.version() >= HTTP_11 && havecond && !etagmatch(req.version(), tag, ifmatch, 1)) return responderrmsg(op, Epreconditionfailed, sprint("Precondition Failed: Etag(s) \"%s\", specified with If-Match did not match", ifmatch)); ifmodsince := parsehttpdate(req.h.get("if-modified-since")); # http/1.0, head and if-modified-since: rfc1945#8.1; unsupported date value can safely be ignored. if(!(req.version() == HTTP_10 && req.method == HEAD) && ifmodsince && dir.mtime <= ifmodsince) return responderr(op, Enotmodified); # note: for get this is okay, but for put/delete a bad-syntax value would be have to raise an error (havecond, ifnonematch) = req.h.find("if-none-match"); if(req.version() >= HTTP_11 && havecond && req.method == GET && etagmatch(req.version(), tag, ifnonematch, 0)) return responderr(op, Enotmodified); # unsupported date value causes a "precondition failed" (havecond, ifunmodsincestr) = req.h.find("if-unmodified-since"); ifunmodsince := parsehttpdate(ifunmodsincestr); if(req.version() >= HTTP_11 && (ifunmodsince && dir.mtime > ifunmodsince || havecond && ifunmodsince == 0)) return responderrmsg(op, Epreconditionfailed, sprint("Precondition Failed: Object has been modified since \"%s\"", req.h.get("if-unmodified-since"))); if(dir.mode&Sys->DMDIR) listdir(path, op, dfd); else plainfile(path, op, dfd, dir, tag); } pathsanitize(path: string): string { trailslash := path != nil && path[len path-1] == '/'; (nil, elems) := sys->tokenize(path, "/"); r: list of string; for(; elems != nil; elems = tl elems) if(hd elems == ".") continue; else if(hd elems == "..") { if(r != nil) r = tl r; } else r = hd elems::r; s := ""; for(; r != nil; r = tl r) s = "/"+hd r+s; if(trailslash || s == "") s += "/"; return s; } findcgi(cfg: ref Cfg, path: string): (string, string, list of string, int) { for(l := cfg.cgipaths; l != nil; l = tl l) if(str->prefix((*hd l).t0, path)) return *hd l; return (nil, nil, nil, 0); } etag(path: string, op: ref Op, dir: Sys->Dir): string { host := splithost(op.req.h.get("host")).t0; if(host == nil) host = "_default"; return "\""+sha1(array of byte sprint("%d,%d,%s,%s,%s", dir.qid.vers, dir.mtime, host, op.lport, path))+"\""; } etagmatch(version: int, etag: string, etagstr: string, strong: int): int { if(etagstr == "*") return 1; (l, err) := tokenizeqs(etagstr, version); if(err != nil) return 0; for(; l != nil; l = tl l) if(hd l == etag && (!strong || !str->prefix("W/", hd l))) return 1; return 0; } plainfile(path: string, op: ref Op, dfd: ref Sys->FD, dir: Sys->Dir, tag: string) { id := op.id; req := op.req; resp := op.resp; if(debugflag) say(id, "doing plain file"); ct := mimetype(op.cfgs, path); if(ct != nil) resp.h.add("content-type", ct); else warn(op.id, sprint("could not determine content-type: host %q path %q query %q", op.req.h.get("host"), op.req.url.path, op.req.url.query)); # synthetic files sometimes don't have meaningful dir.length. # there is no one true way to determine if a file is synthetic. this is the most reasonable. issynthetic := dir.length == big 0 && dir.qid.vers == 0; if(issynthetic) { op.chunked = resp.version() >= HTTP_11; } else { op.length = dir.length; resp.h.add("content-length", string op.length); } if(issynthetic && (req.h.has("range", nil) || req.h.has("if-range", nil))) return responderrmsg(op, Enotsatisfiable, nil); (valid, ranges) := parserange(req.version(), req.h.find("range"), dir.length); if(!valid) { resp.h.add("content-range", sprint("bytes */%bd", dir.length)); return responderrmsg(op, Enotsatisfiable, nil); } bound := ""; ifrange := req.h.get("if-range"); # unsupported date value can safely be ignored. if(ranges != nil && (ifrange == nil || ifrange[0] == '"' && tag == ifrange || dir.mtime <= parsehttpdate(ifrange))) { if(len ranges == 1) { (start, end) := *hd ranges; resp.h.add("content-range", sprint("bytes %bd-%bd/%bd", start, end-big 1, dir.length)); resp.h.set("content-length", string (end-start)); } else { bound = sha1(array of byte (string <-randch+","+string op.now)); resp.h.set("content-type", "multipart/byteranges; boundary="+bound); resp.h.del("content-length", nil); op.chunked = resp.version() >= HTTP_11; } resp.st = string Epartialcontent; resp.stmsg = "Partial Content"; if(debugflag) say(id, sprint("sending %d ranges for multipart/byterange response", len ranges)); } else ranges = ref (big 0, dir.length)::nil; if(gzipallowed(op.cfg.gzpaths, path)) if(gzipaccepted(req.h)) if(!issynthetic) if(!req.h.find("range").t0) if(!req.h.find("if-range").t0) if((gzfd := sys->open(gzpath := "."+path+".gz", sys->OREAD)) != nil) if(((nil, gzd) := sys->stat(gzpath)).t0 == 0) if(gzd.length < dir.length) if(gzd.mtime >= dir.mtime) { op.length = gzd.length; ranges = ref (big 0, gzd.length)::nil; resp.h.add("content-encoding", "gzip"); resp.h.set("content-length", string gzd.length); dfd = gzfd; dir = gzd; } if(op.cfg.cachesecs >= 0) resp.h.add("cache-control", sprint("max-age=%d", op.cfg.cachesecs)); accesslog(op); rerr := hresp(resp, op.fd, op.keepalive, op.chunked); if(rerr != nil) die(id, "writing response: "+rerr); if(req.method == HEAD) return; if(issynthetic) { buf := array[Sys->ATOMICIO] of byte; for(;;) { n := sys->readn(dfd, buf, len buf); if(n == 0) break; if(n < 0) die(id, sprint("reading file: %r")); hwrite(op, buf[:n]); } hwriteeof(op); return; } for(; ranges != nil; ranges = tl ranges) { (off, end) := *hd ranges; if(bound != nil) { s := sprint("--%s\r\ncontent-type: %s\r\ncontent-range: bytes %bd-%bd/%bd\r\n\r\n", bound, ct, off, end-big 1, dir.length); hwrite(op, array of byte s); } while(off < end) { want := end-off; if(want > big Sys->ATOMICIO) want = big Sys->ATOMICIO; n := sys->pread(dfd, d := array[int want] of byte, len d, off); if(n < 0) die(id, sprint("reading file: %r")); if(n == 0) break; off += big n; hwrite(op, d[:n]); } if(bound != nil) hwrite(op, array of byte "\r\n"); } hwriteeof(op); } gzipallowed(l: list of string, p: string): int { for(; l != nil; l = tl l) if(str->prefix(hd l, p)) return 1; return 0; } # warning: parsing is simplistic, not handling full http rules, but should be good enough for finding "gzip". gzipaccepted(h: ref Hdrs): int { for(l := sys->tokenize(h.get("accept-encoding"), ",").t1; l != nil; l = tl l) if(strip(str->splitstrl(hd l, ";").t0, " \t") == "gzip") return 1; return 0; } dolisting(cfg: ref Cfg, path: string): int { for(i := 0; i < len cfg.listings; i++) { (lpath, what) := *cfg.listings[i]; if(str->prefix(lpath, path)) { say(-1, sprint("listing for path %q: %d, prefix: %q", path, what, lpath)); return what; } } return 0; } listdir(path: string, op: ref Op, dfd: ref Sys->FD) { id := op.id; req := op.req; resp := op.resp; if(debugflag) say(id, "doing directory listing"); resp.h.add("content-type", "text/html; charset=utf-8"); op.chunked = resp.version() >= HTTP_11; if(op.cfg.cachesecs >= 0) resp.h.add("cache-control", sprint("max-age=%d", op.cfg.cachesecs)); accesslog(op); rerr := hresp(resp, op.fd, op.keepalive, op.chunked); if(rerr != nil) die(id, "writing response: "+rerr); if(req.method == HEAD) return; begin := mkhtmlstart("listing for "+path) + sprint("<h1>listing for %s</h1><hr/><table><tr><th>last modified</th><th>size</th><th>name</th></tr>\n", pathurls(path)); hwrite(op, array of byte begin); for(;;) { (nd, d) := sys->dirread(dfd); if(nd < 0) die(id, sprint("reading dir: %r")); if(nd == 0) break; html := ""; for(i := 0; i < nd && i < len d; i++) { name := d[i].name; if(d[i].mode & Sys->DMDIR) name += "/"; html += sprint("<tr><td class=\"mtime\">%s</td><td class=\"size\">%bd</td><td class=\"name\"><a href=\"%s\">%s</a></td></tr>\n", daytime->filet(op.now, d[i].mtime), d[i].length, htmlescape(encodepath("./"+name)), htmlescape(name)); } hwrite(op, array of byte html); } end := sprint("</table><hr/></body></html>\n"); hwrite(op, array of byte end); hwriteeof(op); } mkhtmlstart(msg: string): string { return sprint("<html><head>\n<style type=\"text/css\">\nh1 { font-size: 1.4em; }\ntd, th { padding-left: 1em; padding-right: 1em; }\ntd.mtime, td.size { text-align: right; }\n</style>\n<title>%s</title>\n</head><body>\n", htmlescape(msg)); } mkhtml(msg: string): string { return mkhtmlstart(msg)+sprint("\n<h1>%s</h1>\n</body></html>\n", htmlescape(msg)); } htmlescape(s: string): string { r := ""; for(i := 0; i < len s; i++) case s[i] { '<' => r += "<"; '>' => r += ">"; '&' => r += "&"; '"' => r += """; * => r += s[i:i+1]; } return r; } pathurls(s: string): string { (nil, l) := sys->tokenize(s, "/"); r := ""; i := 0; path := "./"; for(l = rev(l); l != nil; l = tl l) { r = sprint(" <a href=\"%s\">%s/</a>", path, htmlescape(hd l))+r; if(i == 0) path = "../"; else path += "../"; i += 1; } r = sprint("<a href=\"%s\">/</a>", path)+r; return r; } cgi(path: string, op: ref Op, cgipath, cgiaction: string, cgitype: int) { id := op.id; req := op.req; if(debugflag) say(id, sprint("passing to (s)cgi handler, cgipath %q cgiaction %q", cgipath, cgiaction)); # first, some sanity checks on the request # parsing/handling full transfer-coding is too involved for us. # we are taking a short cut here to avoid feeding the bloat monster. length := big 0; needcontinue := 0; if(req.method == POST) { transferenc := req.h.getlist("transfer-encoding"); if(req.version() >= HTTP_11 && transferenc != nil && transferenc != "identity") return responderrmsg(op, Enotimplemented, "Not Implemented: Transfer-Encodings other than \"identity\" "+ "(i.e. no transfer encoding) are not supported"); if(req.h.has("content-length", nil)) { lengthstr := req.h.get("content-length"); if(lengthstr == nil || str->drop(lengthstr, "0-9") != "") return responderrmsg(op, Ebadrequest, sprint("Bad Request: Invalid Content-Length: \"%s\"", lengthstr)); length = big lengthstr; } else { (e, emsg) := (Elengthrequired, ""); if(req.version() == HTTP_10) # rfc1945#7.2.2 (e, emsg) = (Ebadrequest, "Bad Request: Missing header \"Content-Length\""); return responderrmsg(op, e, emsg); } contentenc := req.h.getlist("content-encoding"); if(contentenc != nil && contentenc != "identity") return responderrmsg(op, Enotimplemented, "Not Implemented: Content-Encoding other than identity "+ "(i.e. no content encoding) are not supported"); needcontinue = req.version() >= HTTP_11 && req.h.has("expect", nil); if(needcontinue && (expect := str->tolower(req.h.getlist("expect"))) != "100-continue") return responderrmsg(op, Eexpectationfailed, sprint("Expectectation Failed: Unrecognized expectation: %s", expect)); if(debugflag) say(id, sprint("post, client content-length %bd", length)); } timeo := Cgitimeoutsecs*1000; donech := chan of int; spawn timeout(op, timeo, timeoch := chan of int, donech); timeopid := <- timeoch; if(timeopid < 0) die(op.id, "timeout proc failed"); spawn cgiproc(path, op, cgipath, cgiaction, cgitype, length, needcontinue, timeopid, timeoch, donech); # wait for timeout or cgiproc <-donech; return; } timeout(op: ref Op, timeo: int, timeoch, donech: chan of int) { pid := sys->pctl(Sys->NEWPGRP, nil); timeoch <-= pid; if(pid < 0) return warn(op.id, sprint("pctl: %r")); opid := <-timeoch; sys->sleep(timeo); if(debugflag) say(op.id, sprint("timeout %d ms for request, killing handler pid %d, timeopid %d", timeo, opid, pid)); killch <-= opid; responderrmsg(op, Eservererror, "Internal Server Error: Response could not be generated in time"); donech <-= 0; } cgiproc(path: string, op: ref Op, cgipath, cgiaction: string, cgitype: int, length: big, needcontinue: int, timeopid: int, cgich, donech: chan of int) { # set up new process group and exception propagation so # we always clean up nicely when one of the child procs dies. # we always have to respond on donech (or be killed by the timeout # proc) or we'll leave processes lingering err: string; npid := sys->pctl(Sys->NEWPGRP, nil); if(npid < 0) err = sprint("pctl newpgrp: %r"); if(err == nil) { excch <-= (npid, respch := chan of string); err = <-respch; } if(err != nil) { killch <-= timeopid; warn(op.id, err); responderrmsg(op, Eservererror, nil); donech <-= 0; return; } # to make sure our caller can return (e.g. when writing to remote fails) { _cgiproc(path, op, cgipath, cgiaction, cgitype, length, needcontinue, timeopid, cgich); } exception { * => killch <-= timeopid; # may already have been killed } donech <-= 0; } # note: this function must always kill the timeout proc on "normal" returns (i.e. without raising an exception). _cgiproc(path: string, op: ref Op, cgipath, cgiaction: string, cgitype: int, length: big, needcontinue: int, timeopid: int, cgich: chan of int) { # pid ends up in timeout(), this proc is killed if it doesn't respond timely pid := sys->pctl(0, nil); cgich <-= pid; id := op.id; req := op.req; resp := op.resp; if(debugflag) say(id, sprint("handling cgi request, cgipath %q cgiaction %q cgitype %s, pid %d timeopid %d", cgipath, cgiaction, cgitypes[cgitype], pid, timeopid)); fd0, fd1: ref Sys->FD; if(cgitype == Scgi) { scgidialch <-= (cgiaction, replychan := chan of (ref Sys->FD, string)); (sfd, serr) := <-replychan; if(serr != nil) { warn(op.id, serr); killch <-= timeopid; return responderrmsg(op, Eservererror, "Internal Server Error: Handler not reachable"); } sreq := scgirequest(path, cgipath, req, op, length); if(sys->write(sfd, sreq, len sreq) != len sreq) { warn(id, sprint("write scgi request: %r")); killch <-= timeopid; return responderrmsg(op, Eservererror, nil); } fd0 = fd1 = sfd; } else { err: string; cgispawnch <-= (cgiaction, path, cgipath, op, length, replych := chan of (ref Sys->FD, ref Sys->FD, string)); (fd0, fd1, err) = <-replych; if(err != nil) { warn(id, "cgispawn: "+err); killch <-= timeopid; return responderrmsg(op, Eservererror, nil); } } sb := bufio->fopen(fd1, Bufio->OREAD); if(sb == nil) { warn(id, sprint("bufio fopen cgi fd: %r")); killch <-= timeopid; return responderrmsg(op, Eservererror, nil); } if(length > big 0) spawn cgifunnel(op.id, op.inb, fd0, length); # we always want a "status: ..." line from the cgi program. it would be better if we would # generate a "200 ok" if the status is missing, but we cannot parse the full http request # after we've already read the first line (with a header in it) from the iobuf... rerr: string; hdrs: ref Hdrs; for(;;) { l := sb.gets('\n'); killch <-= timeopid; if(l == nil) { warn(id, "eof from cgi handler while reading response line"); return responderrmsg(op, Eservererror, "Internal Server Error: EOF from handler"); } l = l[:len l-1]; if(l != nil && l[len l-1] == '\r') l = l[:len l-1]; if(!str->prefix("status:", str->tolower(l))) { warn(id, sprint("bad cgi response line: %q", l)); return responderrmsg(op, Eservererror, "Internal Server Error: Handler sent bad response line"); } l = str->drop(l[len "status:":], " \t"); (resp.st, resp.stmsg) = str->splitstrl(l, " "); if(resp.stmsg != nil) resp.stmsg = droptl(resp.stmsg[1:], " \t"); if(len resp.st != 3 || str->drop(resp.st, "0-9") != "") { warn(id, sprint("bad cgi response line: %q", l)); return responderrmsg(op, Eservererror, "Internal Server Error: Handler sent bad response line"); } (hdrs, rerr) = Hdrs.read(sb); if(rerr != nil) { warn(id, "reading cgi headers: "+rerr); return responderrmsg(op, Eservererror, "Internal Server Error: Error reading headers from handler"); } if(resp.st == "100") { needcontinue = 0; fprint(op.fd, "HTTP/1.1 100 Continue\r\n\r\n"); continue; } if(needcontinue) fprint(op.fd, "HTTP/1.1 100 Continue\r\n\r\n"); break; } elength := big -1; if(hdrs.has("content-length", nil)) { elengthstr := hdrs.get("content-length"); if(elengthstr == nil || str->drop(elengthstr, "0-9") != "") { warn(id, sprint("bad cgi content-length header: %q", elengthstr)); return responderrmsg(op, Eservererror, "Internal Server Error: Invalid content-length from handler"); } op.length = elength = big elengthstr; } for(hl := hdrs.all(); hl != nil; hl = tl hl) resp.h.add((hd hl).t0, (hd hl).t1); accesslog(op); op.chunked = elength == big -1 && resp.version() >= HTTP_11; rerr = hresp(resp, op.fd, op.keepalive, op.chunked); if(rerr != nil) { warn(id, "writing response: "+rerr); return; } if(req.method == HEAD) return; for(;;) { n := sb.read(d := array[Sys->ATOMICIO] of byte, len d); if(n < 0) die(id, sprint("reading file: %r")); if(n == 0) { if(elength > big 0) die(id, "bad cgi body, message shorter than content-length specified"); break; } if(elength > big 0) { if(big n > elength) die(id, "bad cgi body, message longer than content-length specified"); elength -= big n; } # for last bit of data, verify that the handler is finished writing if(elength > big n || (big n == elength && sb.read(tmp := array[1] of byte, len tmp) != 0)) die(id, "bad cgi body, message longer than content-length specified"); hwrite(op, d[:n]); } hwriteeof(op); if(debugflag) say(id, "request done"); } cgifunnel(id: int, b: ref Iobuf, sfd: ref Sys->FD, length: big) { while(length > big 0) { need := Sys->ATOMICIO; if(big need > length) need = int length; n := b.read(d := array[need] of byte, len d); if(n < 0) die(id, sprint("cgi read: %r")); if(n == 0) die(id, "cgi read: premature eof"); { if(sys->write(sfd, d, n) != n) die(id, sprint("cgi write: %r")); } exception { * => die(id, sprint("cgi write: write on broken pipe")); } length -= big n; } } cgivars(path, cgipath: string, op: ref Op, length: big, environ: list of (string, string)): list of (string, string) { servername := op.req.h.get("host"); if(servername == nil) servername = op.lhost; pathinfo := path[len cgipath:]; query := op.req.url.query; if(query != nil) query = query[1:]; return ("CONTENT_LENGTH", string length):: ("GATEWAY_INTERFACE", "CGI/1.1"):: ("SERVER_PROTOCOL", http->versionstr(op.req.version())):: ("SERVER_NAME", servername):: ("REQUEST_METHOD", op.req.methodstr):: ("REQUEST_URI", op.req.url.packpath()):: ("SCRIPT_NAME", cgipath):: ("PATH_INFO", pathinfo):: ("PATH_TRANSLATED", pathinfo):: ("QUERY_STRING", query):: ("SERVER_ADDR", op.lhost):: ("SERVER_PORT", op.lport):: ("REMOTE_ADDR", op.rhost):: ("REMOTE_PORT", op.rport):: ("SERVER_SOFTWARE", Version):: environ; } scgirequest(path, scgipath: string, req: ref Req, op: ref Op, length: big): array of byte { l := ("SCGI", "1")::cgivars(path, scgipath, op, length, environment); s := ""; for(h := l; h != nil; h = tl h) s += (hd h).t0+"\0"+(hd h).t1+"\0"; for(h = req.h.all(); h != nil; h = tl h) s += cgivar((hd h).t0)+"\0"+(hd h).t1+"\0"; return netstring(s); } cgivar(s: string): string { r := "HTTP_"; for(i := 0; i < len s; i++) if(s[i] != '-') r[len r] = s[i]; else r[len r] = '_'; return str->toupper(r); } netstring(s: string): array of byte { return array of byte (sprint("%d:", len s)+s+","); } hresp(resp: ref Resp, fd: ref Sys->FD, keepalive, chunked: int): string { if(keepalive) resp.h.add("connection", "keep-alive"); else resp.h.add("connection", "close"); if(chunked) { resp.h.add("transfer-encoding", "chunked"); resp.h.del("content-length", nil); } return resp.write(fd); } hwrite(op: ref Op, d: array of byte) { if(len d == 0) return; if(op.chunked) { length := array of byte sprint("%x\r\n", len d); nd := array[len length+len d+2] of byte; nd[:] = length; nd[len length:] = d; nd[len length+len d:] = array of byte "\r\n"; d = nd; } if(sys->write(op.fd, d, len d) != len d) die(op.id, sprint("writing response data: %r")); } hwriteeof(op: ref Op) { if(op.chunked) fprint(op.fd, "0\r\n\r\n"); } respond(op: ref Op, st: int, errmsgstr: string, ct: string) { resp := op.resp; resp.st = string st; resp.stmsg = statusmsg(st); if(ct != nil) resp.h.set("content-type", ct); op.chunked = 0; errmsg := array of byte errmsgstr; op.length = big len errmsg; if(!(st >= 100 && st < 200 || st == 204 || st == 304)) resp.h.set("content-length", string op.length); err := hresp(resp, op.fd, op.keepalive, op.chunked); if(err != nil) die(op.id, "writing error response: "+err); if(errmsgstr != nil && (op.req == nil || op.req.method != HEAD)) { hwrite(op, errmsg); hwriteeof(op); } accesslog(op); } responderr(op: ref Op, st: int) { return respond(op, st, nil, nil); } responderrmsg(op: ref Op, st: int, errmsg: string) { if(errmsg == nil) errmsg = statusmsg(st); return respond(op, st, mkhtml(sprint("%d - %s", st, errmsg)), "text/html; charset=utf-8"); } statusmsg(code: int): string { for(i := 0; i < len statusmsgs && statusmsgs[i].t0 <= code; i++) if(code == statusmsgs[i].t0) return statusmsgs[i].t1; raise sprint("missing status message for code %d", code); } dnslookup(dnsch: chan of string, respch: chan of (string, string)) { path := "/net/dns"; for(;;) { ip := <-dnsch; revip, err: string; l: list of string; fd := sys->open(path, Sys->ORDWR); if(fd == nil) { err = sprint("open %q: %r", path); } else { (l, err) = reversedns(fd, ip); if(len l > 1) err = "too many results"; else if(len l == 0 && err == nil) err = "no results"; else if(len l == 1) revip = hd l; } respch <-= (revip, err); } } reversedns(fd: ref Sys->FD, ip: string): (list of string, string) { (nil, l) := sys->tokenize(ip, "."); if(len l != 4) return (nil, "invalid ip address"); dst := ""; for(; l != nil; l = tl l) dst = hd l+"."+dst; dst += "in-addr.arpa"; if(fprint(fd, "%s ptr", dst) < 0) return (nil, sprint("%r")); r: list of string; for(;;) { have := sys->read(fd, d := array[1024] of byte, len d); if(have < 0) return (nil, sprint("read: %r")); if(have == 0) break; (nil, l) = sys->tokenize(string d[:have], " \t"); if(len l != 3 || hd tl l != "ptr" || hd l != dst) continue; r = (hd tl tl l)::r; } return (r, nil); } logger() { accessfd: ref Sys->FD; backlog := array[0] of (string, string); ip, msg: string; respch := chan of (string, string); dnsch := chan of string; spawn dnslookup(dnsch, respch); for(;;) alt { (logip, s) := <-logch => if(accessfd == nil) continue; if(msg != nil) { na := array[len backlog+1] of (string, string); na[:] = backlog; na[len backlog] = (logip, s); backlog = na; } else { msg = s; ip = logip; dnsch <-= logip; } (revip, err) := <-respch => if(err != nil) say(0, sprint("reverse dns lookup %q: %s", ip, err)); if(fprint(accessfd, "%s %q\n", msg, revip) < 0) warn(0, sprint("writing access log message: %r")); msg = nil; if(len backlog != 0) { (ip, msg) = backlog[0]; backlog = backlog[1:]; dnsch <-= ip; } accessfd = <-logfdch => ; } } accesslog(op: ref Op) { if(op.cfgs.accessfd == nil && !debugflag) return; length := ""; if(!op.chunked && op.length >= big 0) length = string op.length; s := sprint("%d %d %s!%s %s!%s %q %q %q HTTP/%d.%d %q %q %q %q %q", op.id, op.now, op.rhost, op.rport, op.lhost, op.lport, op.req.methodstr, op.req.h.get("host"), op.req.url.path+op.req.url.query, op.req.major, op.req.minor, op.resp.st, op.resp.stmsg, length, op.req.h.get("user-agent"), op.req.h.get("referer")); logch <-= (op.rhost, s); if(debugflag) say(op.id, "accesslog: "+s); } splithost(s: string): (string, string) { host: string; if(str->prefix("[", s)) { # "[ip6]" (ip, rem) := str->splitstrl(s[1:], "]"); if(!str->prefix("]", rem)) return (nil, nil); s = rem[1:]; (ok, ipaddr) := IPaddr.parse(ip); if(ok != 0) return (nil, nil); # canonical form, eg for ipv4 mapped on ipv6 host = ipaddr.text(); } else (host, s) = str->splitstrl(s, ":"); if(str->prefix(":", s)) s = s[1:]; return (host, s); } suffix(suf, s: string): int { if(len suf > len s) return 0; return suf == s[len s-len suf:]; } mimetype(cfgs: ref Cfgs, path: string): string { for(t := cfgs.usertypes; t != nil; t = tl t) if(suffix((hd t).t0, path)) return (hd t).t1; for(i := 0; i < len mimetypes; i++) if(suffix(mimetypes[i].t0, path)) return mimetypes[i].t1; if(!haschar(str->splitstrr(path, "/").t1, '.')) return "text/plain; charset=utf-8"; # for mkfile, README, etc. return nil; } hasbody(req: ref Req): int { return req.h.has("content-length", nil) || req.h.has("transfer-encoding", nil); } days := array[] of {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; months := array[] of {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; httpdate(t: int): string { tm := daytime->gmt(t); return sprint("%s, %02d %s %d %02d:%02d:%02d GMT", days[tm.wday], tm.mday, months[tm.mon], tm.year+1900, tm.hour, tm.min, tm.sec); } readtoken(s: string): (string, string, string) { for(i := 0; i < len s; i++) if(s[i] < ' ') return (nil, nil, "invalid control characters found"); else if(str->in(s[i], "()<>@,;:\\\"/[]?={} \t")) break; return (s[:i], s[i:], nil); } # read list of bare tokens tokenize(s: string): (list of string, string) { token, err: string; l: list of string; for(;;) { (token, s, err) = readtoken(s); if(err != nil) return (nil, err); if(token != nil) l = token::l; s = str->drop(s, " \t"); if(s == nil) break; if(s[0] != ',') return (nil, "expected comma as separator"); s = str->drop(s, ", \t"); } return (rev(l), nil); } # read double quoted token in header. # for http/1.1 a backslash may be used for escaping, not for http/1.0 readqs(s: string, v: int): (string, string, string) { if(s == nil) return (nil, nil, nil); if(s[0] != '"') return (nil, s, nil); r := "\""; for(i := 1; i < len s; i++) if(s[i] < ' ') return (nil, nil, "invalid control character found inside quoted string"); else if(v >= HTTP_11 && s[i] == '\\' && i+1 < len s && s[i+1] == '"') r[len r] = s[++i]; else { r[len r] = s[i]; if(s[i] == '"') return (r, s[i+1:], nil); } return (nil, nil, "quoted string not ended"); } # read list of double-quoted strings tokenizeqs(s: string, v: int): (list of string, string) { r: list of string; qs, err: string; for(;;) { (qs, s, err) = readqs(s, v); if(err != nil) return (nil, err); if(qs != nil) r = qs::r; s = str->drop(s, " \t"); if(s == nil) break; if(s[0] != ',') return (nil, "expected comma as separator"); s = str->drop(s, ", \t"); } return (rev(r), nil); } # i'm not going to parse three different date formats where a simple unix epoch integer would have sufficed. # death to the bloat monster! parsehttpdate(s: string): int { mday, mon, year, hour, min, sec: int; # sys-tokenize allows too much whitespace, but well... (n, tokens) := sys->tokenize(s, " "); if(n != 6 || len hd tokens != 4 || (hd tokens)[3] != ',' || index(days, (hd tokens)[:3]) < 0) return 0; if((mon = index(months, hd tl tl tokens)) < 0) return 0; (hn, htokens) := sys->tokenize(hd tl tl tl tl tokens, ":"); if(hn != 3) return 0; mday = int hd tl tokens; year = int hd tl tl tl tokens; hour = int hd htokens; min = int hd tl htokens; sec = int hd tl tl htokens; # last arg should be seconds offset for timezone, "luckily" http allows only gmt... return daytime->tm2epoch(ref Daytime->Tm(sec, min, hour, mday, mon, year-1900, 0, 0, s[1:], 0)); } parserange(version: int, rangehdr: (int, string), length: big): (int, list of ref (big, big)) { (haverange, range) := rangehdr; if(!haverange || !(version >= HTTP_11)) return (1, nil); if(!str->prefix("bytes", range)) return (0, nil); range = range[len "bytes":]; range = str->drop(range, " \t"); if(!str->prefix("=", range)) return (0, nil); range = str->drop(range[1:], " \t"); # warning: range header parsing is fairly abstruse r: list of ref (big, big); valid := 0; for(l := sys->tokenize(range, ",").t1; l != nil; l = tl l) { s := strip(hd l, " \t"); if(s == nil) continue; if(s[0] == '-') { # single (negative) byte offset relative to end of file s = str->drop(s[1:], " \t"); if(s == nil || str->drop(s, "0-9") != nil) return (1, nil); if(big s != big 0) valid = 1; i := length - big s; if(i < big 0) i = big 0; if(i >= length) i = length - big 1; r = ref (i, length)::r; } else { (first, last) := str->splitstrl(s, "-"); if(stripws(str->drop(first, "0-9")) != nil || last == nil || str->drop(stripws(last[1:]), "0-9") != nil) return (1, nil); f := big first; e := length; last = stripws(last[1:]); if(last != nil) e = big last+big 1; if(e > length) e = length; if(f > e) return (1, nil); if(f < length) valid = 1; r = ref (f, e)::r; } } return (valid, rev(r)); } listingssort(cfg: ref Cfg) { sort(cfg.listings, listingge); } sort[T](a: array of T, ge: ref fn(a, b: T): int) { for(i := 1; i < len a; i++) { tmp := a[i]; for(j := i; j > 0 && ge(a[j-1], tmp); j--) a[j] = a[j-1]; a[j] = tmp; } } listingge(e1, e2: ref (string, int)): int { return len e1.t0 < len e2.t0; } strip(s, cl: string): string { return droptl(str->drop(s, cl), cl); } stripws(s: string): string { return strip(s, " \t"); } droptl(s, cl: string): string { while(s != nil && str->in(s[len s-1], cl)) s = s[:len s-1]; return s; } index(a: array of string, s: string): int { for(i := 0; i < len a; i++) if(a[i] == s) return i; return -1; } readaddr(id: int, path: string): (string, string) { (s, err) := readfileline(path, 256); if(err != nil) die(id, err); (lhost, lport) := str->splitstrl(s, "!"); if(lport != nil) lport = lport[1:]; return (lhost, lport); } readfileline(path: string, maxsize: int): (string, string) { fd := sys->open(path, Sys->OREAD); if(fd == nil) return (nil, sprint("open %s: %r", path)); n := sys->read(fd, buf := array[maxsize] of byte, len buf); if(n < 0) return (nil, sprint("read %s: %r", path)); s := string buf[:n]; if(s != nil && s[len s-1] == '\n') s = s[:len s-1]; return (s, nil); } readtime(): int { n := sys->pread(timefd, d := array[64] of byte, len d, big 0); if(n < 0) fail(sprint("reading time: %r")); return int ((big string d[:n])/big 1000000); } byte2str(a: array of byte): string { s := ""; for(i := 0; i < len a; i++) s += sprint("%02x", int a[i]); return s; } sha1(a: array of byte): string { r := array[keyring->SHA1dlen] of byte; keyring->sha1(a, len a, r, nil); return byte2str(r); } listhas(l: list of string, s: string): int { for(; l != nil; l = tl l) if(str->tolower(hd l) == s) return 1; return 0; } haschar(s: string, c: int): int { for(i := 0; i < len s; i++) if(s[i] == c) return 1; return 0; } hasmethod(l: list of string, v: string): int { for(; l != nil; l = tl l) if(hd l == v) return 1; return 0; } substr(sub, s: string): int { return str->prefix(sub, str->splitstrl(s, sub).t1); } rev[T](l: list of T): list of T { r: list of T; for(; l != nil; l = tl l) r = hd l::r; return r; } kill(pid: int) { fd := sys->open(sprint("/prog/%d/ctl", pid), Sys->OWRITE); if(fd != nil) fprint(fd, "kill"); } say(id:int, s: string) { msec := sys->millisec(); if(debugflag) fprint(fildes(2), "%d %d, %s\n", msec, id, s); if(debugflag && errorfd != nil) fprint(errorfd, "%d %d, %s\n", msec, id, s); } warn(id: int, s: string) { msec := sys->millisec(); if(debugflag) fprint(fildes(2), "%d %d, %s\n", msec, id, s); if(errorfd != nil) fprint(errorfd, "%d %d, %s\n", msec, id, s); } die(id: int, s: string) { warn(id, s); raise "fail:"+s; } fail(s: string) { fprint(fildes(2), "%s\n", s); raise "fail:"+s; } # reading the config file Cfgs.init(file: string): (ref Cfgs, string) { db := Db.open(file); if(db == nil) return (nil, sprint("open config %q: %r", file)); return Cfgs.read(file, db); } Cfgs.read(file: string, db: ref Db): (ref Cfgs, string) { c := ref Cfgs(file, db, Cfg.new(), nil, nil, 0, 0, nil, nil); logfile: string; e: ref Dbentry; (e, nil) = c.db.find(nil, "vhost"); if(e != nil) c.vhostflag = 1; (e, nil) = c.db.find(nil, "novhost"); if(e != nil) c.vhostflag = 0; (e, nil) = c.db.find(nil, "debug"); if(e != nil) c.debugflag = 1; (e, nil) = c.db.find(nil, "nodebug"); if(e != nil) c.debugflag = 0; (e, nil) = c.db.find(nil, "ctlchan"); if(e != nil) { s := e.findfirst("ctlchan"); if(s != nil) ctlchan = s; } (e, nil) = c.db.find(nil, "accesslog"); if(e != nil) { s := e.findfirst("accesslog"); if(s != nil) logfile = s; } ptr: ref Attrdb->Dbptr; attr := "mime"; for(;;) { (e, ptr) = c.db.find(ptr, attr); if(e == nil) break; ext := e.findfirst("ext"); mtype := e.findfirst("type"); if(ext == nil || mtype == nil) return (nil, sprint("bad mime type, ext=%q type=%q", ext, mtype)); c.usertypes = ref (ext, mtype)::c.usertypes; } ptr = nil; attr = "announce"; for(;;) { (e, ptr) = c.db.find(ptr, attr); if(e == nil) break; c.addrs = e.findfirst("announce")::c.addrs; } ptr = nil; attr = "host"; for(;;) { (e, ptr) = c.db.find(ptr, attr); if(e == nil) break; host := e.findfirst("host"); port := e.findfirst("port"); if(port == nil) port = "80"; (cfg, err) := Cfg.read(e, port); if(err != nil) return (nil, err); if(host == "*") host = ""; cfg.host = host; cfg.port = string int port; if(host == nil) c.default = cfg; c.cfgs = (host, port, cfg)::c.cfgs; } ptr = nil; attr = "alias"; for(;;) { (e, ptr) = c.db.find(ptr, attr); if(e == nil) break; host := e.findfirst("host"); port := e.findfirst("port"); usehost := e.findfirst("usehost"); useport := e.findfirst("useport"); if(port == nil) port = "80"; if(usehost == nil) usehost = host; if(useport == nil) useport = port; if(usehost == host && useport == port) return (nil, "alias line aliases host and port to itself, ignoring"); cfg := c.find(usehost, string int useport); if(cfg == nil) return (nil, sprint("alias references non-existing usehost=%q useport=%q", usehost, useport)); c.cfgs = (host, string int port, cfg)::c.cfgs; } ptr = nil; if(logfile != nil) { c.accessfd = sys->open(logfile, Sys->OWRITE); if(c.accessfd == nil) return (nil, sprint("open logfile %q: %r", logfile)); sys->seek(c.accessfd, big 0, Sys->SEEKEND); } c.usertypes = rev(c.usertypes); return (c, nil); } Cfgs.find(c: self ref Cfgs, host, port: string): ref Cfg { for(l := c.cfgs; l != nil; l = tl l) { (chost, cport, config) := hd l; if(host == chost && port == cport) return config; } return c.default; } Cfg.new(): ref Cfg { return ref Cfg("", "80", array[0] of ref (string, int), -1, nil, nil, nil, nil, nil, nil); } Cfg.read(e: ref Dbentry, defaultport: string): (ref Cfg, string) { cfg := Cfg.new(); for(l := list of {"cachesecs"}; l != nil; l = tl l) { for(r := e.find(hd l); r != nil; r = tl r) { for(attrs := (hd r).t1; attrs != nil; attrs = tl attrs) { val := (hd attrs).val; case (hd attrs).attr { "cachesecs" => cfg.cachesecs = int val; * => warn(0, sprint("ignoring config attribute %q", (hd attrs).attr)); } } } } for(l = list of {"listings", "nolistings", "listen", "redir", "auth", "index", "cgi", "scgi", "gzip"}; l != nil; l = tl l) { attr := hd l; for(r := e.find(attr); r != nil; r = tl r) { (tups, nil) := hd r; case attr { "listings" or "nolistings" => what := attr == "listings"; for(pl := tups.find("path"); pl != nil; pl = tl pl) { nl := array[len cfg.listings+1] of ref (string, int); nl[:] = cfg.listings; nl[len cfg.listings] = ref ((hd pl).val, what); cfg.listings = nl; } "listen" => ip := tups.find("ip"); port := tups.find("port"); if(ip == nil) return (nil, sprint("missing ip in listen line")); ipstr := (hd ip).val; (ok, ipaddr) := IPaddr.parse(ipstr); if(ok != 0) return (nil, sprint("invalid ip address: %q", ipstr)); portstr := defaultport; if(port != nil) portstr = (hd port).val; cfg.listens = (ref (ipaddr.text(), string int portstr))::cfg.listens; "redir" => src := tups.find("src"); dst := tups.find("dst"); if(src == nil || dst == nil) return (nil, "missing src or dst in redir line"); (repl, rerr) := Repl.parse((hd src).val, (hd dst).val); if(rerr != nil) return (nil, "parsing redir: "+rerr); cfg.redirs = repl::cfg.redirs; "auth" => path := tups.find("path"); realm := tups.find("realm"); user := tups.find("user"); pass := tups.find("pass"); if(path == nil || realm == nil || user == nil || pass == nil) return (nil, "missing field in auth line, need path, realm, user and pass"); if(haschar((hd realm).val, '"')) return (nil, "realm must not have double quote, not supported by http/1.0"); cfg.auths = ref ((hd path).val, (hd realm).val, base64->enc(array of byte ((hd user).val+":"+(hd pass).val)))::cfg.auths; "index" => for(file := tups.find("file"); file != nil; file = tl file) cfg.indexfiles = (hd file).val::cfg.indexfiles; "cgi" => path := tups.find("path"); cmd := tups.find("cmd"); if(path == nil || cmd == nil) return (nil, "missing path or cmd in cgi line"); methods: list of string; methodtups := tups.find("methods"); if(methodtups != nil) methods = sys->tokenize((hd methodtups).val, " ,").t1; cfg.cgipaths = ref ((hd path).val, (hd cmd).val, methods, Cgi)::cfg.cgipaths; "scgi" => path := tups.find("path"); addr := tups.find("addr"); if(path == nil || addr == nil) return (nil, "missing path or addr in scgi line"); methods: list of string; methodtups := tups.find("methods"); if(methodtups != nil) methods = sys->tokenize((hd methodtups).val, " ,").t1; cfg.cgipaths = ref ((hd path).val, (hd addr).val, methods, Scgi)::cfg.cgipaths; "gzip" => for(pl := tups.find("path"); pl != nil; pl = tl pl) cfg.gzpaths = (hd pl).val::cfg.gzpaths; } } } cfg.rev(); return (cfg, nil); } Cfg.rev(cfg: self ref Cfg) { cfg.listens = rev(cfg.listens); cfg.cgipaths = rev(cfg.cgipaths); cfg.indexfiles = rev(cfg.indexfiles); cfg.redirs = rev(cfg.redirs); cfg.auths = rev(cfg.auths); listingssort(cfg); } Repl.parse(restr, rulestr: string): (ref Repl, string) { (re, err) := regex->compile(restr, 1); if(err != nil) return (nil, "bad regex: "+err); rule: list of ref (string, int); maxrepl := 0; for(;;) { (l, r) := str->splitstrl(rulestr, "$"); if(r == nil) { rule = ref (l, -1)::rule; break; } r = r[1:]; if(r != nil && r[0] == '$') { rule = ref (l+"$", -1)::rule; r = r[1:]; } else { num := str->take(r, "0-9"); if(num == nil) return (nil, "bad rule: $ not followed by number or dollar"); n := int num; if(n > maxrepl) maxrepl = n; rule = ref (l, n)::rule; r = r[len num:]; } rulestr = r; } rule = rev(rule); return (ref Repl(re, rule, maxrepl), nil); } Repl.apply(r: self ref Repl, s: string): (int, string, string) { m := regex->executese(r.re, s, (0, len s), 1, 1); if(m == nil) return (0, nil, nil); if(r.maxrepl > len m-1) return (0, nil, "replacement group not in groups in regular expression"); res := ""; for(rl := r.rule; rl != nil; rl = tl rl) { (part, index) := *(hd rl); res += part; if(index == -1) continue; (b, e) := m[index]; if(b == -1 || e == -1) return (0, nil, "replacement group did not match in regular expression"); res += s[b:e]; } return (1, res, nil); } |
Added appl/cmd/logparse.y.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 | %{ include "sys.m"; sys: Sys; print, sprint, fprint, fildes: import sys; include "draw.m"; include "arg.m"; include "bufio.m"; bufio: Bufio; Iobuf: import bufio; include "daytime.m"; daytime: Daytime; include "dict.m"; dict: Dictionary; Dict: import dict; include "lists.m"; lists: Lists; include "string.m"; str: String; # line from the log file Log: adt { d: ref Dict; time: int; parse: fn(s: string): (ref Log, string); get: fn(l: self ref Log, s: string): (string, string); }; # what comes after keyword "match" Expr: adt { pick { And or Or or Eq or Ne => p0, p1: cyclic ref Expr; Param or Str => s: string; } eval: fn(e: self ref Expr, l: ref Log): int; text: fn(e: self ref Expr): string; }; # keywords "limit", "sort" & "reverse" Final: adt { pick { Limit => n: int; Sort or Normalise => s: string; Reverse => Lump => s, cutoff, str: string; } text: fn(f: self ref Final): string; }; # a table, its requirements & progress/state Table: adt { name, descr: string; match: ref Expr; per: list of string; keep: list of string; final: list of ref Final; rows: array of array of ref (string, int, int, int); # string value, int value, extra values (used by avg) types: array of int; colnames: fn(t: self ref Table): list of string; apply: fn(t: self ref Table, l: ref Log): string; finalize: fn(t: self ref Table, f: ref Final); averages: fn(t: self ref Table); write: fn(t: self ref Table, fd: ref Sys->FD): string; writetabbed: fn(t: self ref Table, fd: ref Sys->FD): string; text: fn(t: self ref Table): string; }; YYSTYPE: adt { tab, word, str: string; table: ref Table; match: ref Expr; }; YYLEX: adt { lval: YYSTYPE; lex: fn(l: self ref YYLEX): int; error: fn(l: self ref YYLEX, msg: string); }; %} %module Logparse { init: fn(nil: ref Draw->Context, args: list of string); } %type <match> exprs expr param %token <tab> TAB %token <str> STR %token <word> WORD %token DESCR PER KEEP MATCH SORT LIMIT REVERSE NORMALISE LUMP END %token AND %token OR %token EQ NE %% top: top table { tabs = curtab::tabs; } | { tabs = lists->reverse(tabs); } ; table: TAB { curtab = ref zerotab; curtab.name = $1; } descr matches pers keeps finals END { curtab.per = lists->reverse(curtab.per); curtab.keep = lists->reverse(curtab.keep); curtab.final = lists->reverse(curtab.final); } ; descr: DESCR STR { curtab.descr = $2; } | ; matches: matches match | ; match: MATCH exprs { if(curtab.match == nil) curtab.match = $2; else curtab.match = ref Expr.And(curtab.match, $2); } ; pers: pers per | ; per: PER WORD { curtab.per = $2::curtab.per; } ; exprs: expr AND expr { $$ = ref Expr.And ($1, $3); } | expr OR expr { $$ = ref Expr.Or ($1, $3); } | expr ; expr: param EQ param { $$ = ref Expr.Eq($1, $3); } | param NE param { $$ = ref Expr.Ne($1, $3); } | param ; param: WORD { $$ = ref Expr.Param ($1); } | STR { $$ = ref Expr.Str ($1); } ; keeps: keeps keep | ; keep: KEEP WORD { if(!isaggregate($2) && len curtab.per != 0 && !has($2, curtab.per)) fail(sprint("%s:%d: cannot have non-aggregate 'keep' key %q that is not specified as 'per'", tabfile, lineno, $2)); curtab.keep = $2::curtab.keep; } ; finals: finals final | ; final: SORT WORD { if(fieldindex(curtab, $2) < 0) fail(sprint("%s:%d: sort key %#q must be in 'per' or 'keep' statement too", tabfile, lineno, $2)); curtab.final = ref Final.Sort ($2)::curtab.final; } | LIMIT WORD { curtab.final = ref Final.Limit (int $2)::curtab.final; } | REVERSE { curtab.final = ref Final.Reverse::curtab.final; } | NORMALISE WORD { if(fieldindex(curtab, $2) < 0) fail(sprint("%s:%d: normalise key %#q must be in 'per' or 'keep' statement too", tabfile, lineno, $2)); curtab.final = ref Final.Normalise ($2)::curtab.final; } | LUMP WORD WORD STR { if(fieldindex(curtab, $2) < 0) fail(sprint("%s:%d: lump key %#q must be in 'per' or 'keep' statement too", tabfile, lineno, $2)); if(str->toint($3, 10).t1 != nil) fail(sprint("%s:%d: bad threshold, must be numeric", tabfile, lineno)); curtab.final = ref Final.Lump ($2, $3, $4)::curtab.final; } ; %% dflag: int; qflag: int; btab: ref Iobuf; done: int; zerotab: Table; curtab: ref Table; tabs: list of ref Table; lineno := 1; Searchblocksize: con big (32*1024); tabfile, logfile: string; init(nil: ref Draw->Context, args: list of string) { sys = load Sys Sys->PATH; bufio = load Bufio Bufio->PATH; daytime = load Daytime Daytime->PATH; dict = load Dictionary Dictionary->PATH; str = load String String->PATH; lists = load Lists Lists->PATH; arg := load Arg Arg->PATH; starttime := endtime := -1; arg->init(args); arg->setusage(arg->progname()+" [-dq] [-s starttime] [-e endtime] tabfile log"); while((c := arg->opt()) != 0) case c { 'd' => dflag++; 's' => starttime = int arg->earg(); 'e' => endtime = int arg->earg(); 'q' => qflag++; * => arg->usage(); } args = arg->argv(); if(len args != 2) arg->usage(); tabfile = hd args; logfile = hd tl args; btab = bufio->open(tabfile, Bufio->OREAD); if(btab == nil) fail(sprint("open %q: %r", tabfile)); blog := bufio->open(logfile, Bufio->OREAD); if(blog == nil) fail(sprint("open %q: %r", logfile)); done = 0; lex := ref YYLEX; yyparse(lex); tabs = lists->reverse(tabs); if(dflag) { for(t := tabs; t != nil; t = tl t) warn((hd t).text()+"\n"); } # seek to starttime if there is one if(starttime >= 0) { start := big 0; end := blog.seek(start, Bufio->SEEKEND); while((diff := end-start) >= big 2*Searchblocksize) { mid := start + diff/big 2; blog.seek(mid, Bufio->SEEKSTART); blog.gets('\n'); line := blog.gets('\n'); if(line != nil) (l, err) := Log.parse(line); if(line == nil || err != nil) break; # current "start" is just fine if(l.time >= starttime) end = mid; else start = mid; } blog.seek(start, Bufio->SEEKSTART); blog.gets('\n'); } # for each line in the log file... for(;;) { line := blog.gets('\n'); if(line == nil) break; (l, err) := Log.parse(line); if(err != nil) fail("parselog: "+err); if(starttime >= 0 && l.time < starttime) continue; if(endtime >= 0 && l.time > endtime) break; # try each table to see if they "accept" it (by match expressions) for(t := tabs; t != nil; t = tl t) { tab := hd t; if(tab.match == nil || tab.match.eval(l)) if((err = tab.apply(l)) != nil) fail(err); } } # now we reverse/limit/sort/normalise/lump and then recalculate averages for(t := tabs; t != nil; t = tl t) { tab := hd t; for(f := tab.final; f != nil; f = tl f) tab.finalize(hd f); tab.averages(); } fd := sys->fildes(1); for(t = tabs; t != nil; t = tl t) { tab := hd t; err := ""; if(qflag) err = tab.write(fd); else err = tab.writetabbed(fd); if(err != nil) { warn(sprint("write %q: %s", tab.name, err)); continue; } sys->fprint(fd, "\n"); } } YYLEX.error(nil: self ref YYLEX, err: string) { fail(sprint("%s:%d: %s", tabfile, lineno, err)); } YYLEX.lex(lex: self ref YYLEX): int { if(done) return -1; for(;;){ c := btab.getc(); case c { '"' => # read until end of string, two consecutive ones escape s: string; for(;;) { case c = btab.getc() { Bufio->EOF or Bufio->ERROR => return -1; '"' => c = btab.getc(); if(c != '"') { btab.ungetc(); lex.lval.str = s; return STR; } s[len s] = '"'; * => s[len s] = c; } } ' ' or '\t' => ; '\n' => lineno++; n := 0; for(;;) { c = btab.getc(); if(c != '\n') break; lineno++; n++; } btab.ungetc(); if(n > 0) return END; '!' => c = btab.getc(); if(c == '=') return NE; btab.ungetc(); return -1; '=' => c = btab.getc(); if(c == '=') return EQ; btab.ungetc(); return -1; 'a' to 'z' or '0' to '9' or '(' or ')' => s: string; s[len s] = c; for(;;) { case c = btab.getc() { 'a' to 'z' or '0' to '9' or '(' or ')' or ':' => s[len s] = c; Bufio->ERROR => return -1; * => if(c != Bufio->EOF) btab.ungetc(); if(s[len s-1] == ':') { lex.lval.tab = s[:len s-1]; return TAB; } case s { "descr" => return DESCR; "per" => return PER; "keep" => return KEEP; "match" => return MATCH; "sort" => return SORT; "limit" => return LIMIT; "reverse" => return REVERSE; "normalise" => return NORMALISE; "lump" => return LUMP; "and" => return AND; "or" => return OR; * => lex.lval.word = s; return WORD; } } } Bufio->ERROR => return -1; Bufio->EOF => done = 1; return END; } } } keys := array[] of { "msec", "time", "fromaddr", "toaddr", "method", "host", "path", "httpversion", "status", "statusmsg", "size", "useragent", "referer", "fromdns", }; Log.parse(s: string): (ref Log, string) { l := str->unquoted(s); if(len l != len keys) return (nil, sprint("wrong number of tokens, want %d, have %d", len keys, len l)); v := l2a(l); d := ref Dict; for(i := 0; i < len keys; i++) d.add((keys[i], v[i])); time := int v[1]; return (ref Log (d, time), nil); } substr(sub, s: string): int { return str->splitstrl(s, sub).t1 != nil; } aggrs := array[] of { "count", "sum(size)", "avg(size)", }; isaggregate(s: string): int { for(i := 0; i < len aggrs; i++) if(aggrs[i] == s) return 1; return 0; } isavg(s: string): int { return s == "avg(size)"; } Log.get(l: self ref Log, s: string): (string, string) { val := l.d.lookup(s); if(val != nil) return (val, nil); # might have empty value. annoying dict interface... for(k := l.d.keys(); k != nil; k = tl k) if(hd k == s) return ("", nil); case s { "useragentname(useragent)" => ua := l.get("useragent").t0; return (str->splitstrl(ua, " ").t0, nil); "bothuman(useragent)" => bots := array[] of { "bot", "yahoo! slurp", }; v := str->tolower(l.get("useragent").t0); for(i := 0; i < len bots; i++) if(substr(bots[i], v)) return ("bot", nil); return ("human", nil); "fromip" => v := l.get("fromaddr").t0; return (str->splitstrl(v, "!").t0, nil); "subnet16(fromip)" => v := l.get("fromaddr").t0; e := sys->tokenize(v, ".").t1; return (hd e+"."+hd tl e, nil); "dnstld(dns)" => v := l.get("fromdns").t0; if(v == nil) return ("<no reverse dns>", nil); return (str->splitstrr(v, ".").t1, nil); "domain(referer)" => v := l.get("referer").t0; if(v == nil) return ("<no referer>", nil); if(str->prefix("http://", v)) v = v[len "http://":]; else if(str->prefix("https://", v)) v = v[len "https://":]; else return ("<malformed>", nil); return (str->splitstrl(v, "/").t0, nil); "dayofweek(time)" => days := array[] of { "sun", "mon", "tue", "wed", "thu", "fri", "sat", }; tm := daytime->gmt(l.time); return (days[tm.wday], nil); "date(time)" => tm := daytime->gmt(l.time); return (sprint("%04d-%02d-%02d", 1900+tm.year, tm.mon+1, tm.mday), nil); "hour(time)" => tm := daytime->gmt(l.time); return (sprint("%02d", tm.hour), nil); "week(time)" => tm := daytime->gmt(l.time); week := 1+tm.yday/7; firstsat := tm.yday%7 + (6-tm.wday); if(firstsat != 6 && tm.yday > firstsat) week++; return (string week, nil); "month(time)" => months := array[] of { "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec" }; tm := daytime->gmt(l.time); return (months[tm.mon], nil); "extension(path)" => v := l.get("path").t0; rem: string; (rem, v) = str->splitr(v, "/."); if(rem != nil && rem[len rem-1] == '/') v = ""; else v = "."+v; return (v, nil); "major(status)" => v := l.get("status").t0; return (v[0:1], nil); * => return (nil, "no such key/derivative: "+s); } } eval(e: ref Expr, l: ref Log): string { pick ee := e { And => if(eval(ee.p0, l) != "" && eval(ee.p1, l) != "") return "true"; return ""; Or => if(eval(ee.p0, l) != "" || eval(ee.p1, l) != "") return "true"; return ""; Eq => if(eval(ee.p0, l) == eval(ee.p1, l)) return "true"; return ""; Ne => if(eval(ee.p0, l) != eval(ee.p1, l)) return "true"; return ""; Param => (v, err) := l.get(ee.s); if(err != nil) { warn(sprint("eval %q: %s", ee.s, err)); return ""; } return v; Str => return ee.s; } } Expr.eval(e: self ref Expr, l: ref Log): int { return eval(e, l) != ""; } Table.colnames(t: self ref Table): list of string { v: list of string; for(l := t.per; l != nil; l = tl l) v = hd l::v; for(l = t.keep; l != nil; l = tl l) v = hd l::v; return lists->reverse(v); } Table.apply(t: self ref Table, l: ref Log): string { # find row, or reuse existing row in case of aggregates (row, err) := getrow(t, l); i := len t.per; for(k := t.keep; err == nil && k != nil; k = tl k) err = setcol(row, i++, hd k, l, t.types); return err; } # NOTE: keep isaggregate() in sync! setcol(row: array of ref (string, int, int, int), col: int, k: string, l: ref Log, types: array of int): string { case k { "count" => types[col] = 1; row[col].t1++; "sum(size)" => types[col] = 1; v := l.get("size").t0; if(v != nil) row[col].t1 += int v; "avg(size)" => types[col] = 1; v := l.get("size").t0; if(v != nil) { row[col].t2 += int v; row[col].t3++; row[col].t1 = row[col].t2/row[col].t3; } * => (v, err) := l.get(k); if(err != nil) return err; row[col].t0 = v; } return nil; } getrow(t: ref Table, l: ref Log): (array of ref (string, int, int, int), string) { # xxx should be done once during table init... if(t.types == nil) t.types = array[len t.per+len t.keep] of {* => 0}; pvs := array[len t.per] of ref (string, int, int, int); i := 0; for(pers := t.per; pers != nil; pers = tl pers) { p := hd pers; (v, err) := l.get(p); if(err != nil) return (nil, err); pvs[i++] = ref (v, 0, 0, 0); } if(len pvs > 0) { nextrow: for(i = 0; i < len t.rows; i++) { for(j := 0; j < len pvs; j++) if(t.rows[i][j].t0 != pvs[j].t0) continue nextrow; return (t.rows[i], nil); } } ncol := len t.per+len t.keep; row := array[ncol] of {* => ref ("", 0, 0, 0)}; row[:] = pvs; nrows := array[len t.rows+1] of array of ref (string, int, int, int); nrows[:] = t.rows; nrows[len t.rows] = row; t.rows = nrows; return (row, nil); } sort[T](a: array of T, ge: ref fn(a, b: T, field, numeric: int): int, field, numeric: int) { for(i := 1; i < len a; i++) { tmp := a[i]; for(j := i; j > 0 && ge(a[j-1], tmp, field, numeric); j--) a[j] = a[j-1]; a[j] = tmp; } } # higher is first rowge(a, b: array of ref (string, int, int, int), i, numeric: int): int { if(numeric) return a[i].t1 < b[i].t1; return a[i].t0 < b[i].t0; } fieldindex(t: ref Table, s: string): int { i := 0; for(l := t.per; l != nil; l = tl l) if(hd l == s) return i; else i++; for(l = t.keep; l != nil; l = tl l) if(hd l == s) return i; else i++; raise "unknown field requested: "+s; } Table.finalize(t: self ref Table, f: ref Final) { if(t.rows == nil || len t.rows == 0) return; pick ff := f { Sort => col := fieldindex(t, ff.s); sort(t.rows, rowge, col, t.types[col]); Limit => if(len t.rows > ff.n) t.rows = t.rows[:ff.n]; Reverse => for(i := 0; i < len t.rows ; i++) (t.rows[i], t.rows[len t.rows-1-i]) = (t.rows[len t.rows-1-i], t.rows[i]); Normalise => col := fieldindex(t, ff.s); if(t.types[col] != 1) fail(sprint("cannot normalise a non-integer")); total := 0; for(i := 0; i < len t.rows; i++) total += t.rows[i][col].t1; for(i = 0; i < len t.rows; i++) t.rows[i][col].t1 = 1000*t.rows[i][col].t1/total; Lump => col := fieldindex(t, ff.s); if(t.types[col] != 1) fail(sprint("cannot lump a non-integer")); cutoff := int ff.cutoff; first := -1; i := 0; while(i < len t.rows) { r := t.rows[i]; if(r[col].t1 <= cutoff) { if(first < 0) { first = i; for(j := 0; j < len t.types; j++) r[j].t0 = ff.str; } else { t.rows[first][col].t1 += r[col].t1; t.rows[first][col].t2 += r[col].t2; t.rows[first][col].t3 += r[col].t3; t.rows[i:] = t.rows[i+1:]; t.rows = t.rows[:len t.rows-1]; continue; } } i++; } } } Table.averages(t: self ref Table) { i := 0; for(l := t.colnames(); l != nil; l = tl l) { if(isavg(hd l)) { for(j := 0; j < len t.rows; j++) { cell := t.rows[j][i]; if(cell.t3 > 0) cell.t1 = cell.t2/cell.t3; } } i++; } } Table.write(t: self ref Table, fd: ref Sys->FD): string { sys->fprint(fd, "%s: %s\n", t.name, t.descr); sys->fprint(fd, "%s\n", str->quoted(t.colnames())); for(i := 0; i < len t.rows; i++) { v: list of string; for(j := 0; j < len t.types; j++) { if(t.types[j]) v = string t.rows[i][j].t1::v; else v = t.rows[i][j].t0::v; } sys->fprint(fd, "%s\n", str->quoted(lists->reverse(v))); } return nil; } Table.writetabbed(t: self ref Table, fd: ref Sys->FD): string { sys->fprint(fd, "%s: %s\n", t.name, t.descr); for(l := t.per; l != nil; l = tl l) sys->fprint(fd, "\t%s", hd l); for(l = t.keep; l != nil; l = tl l) sys->fprint(fd, "\t%s", hd l); sys->fprint(fd, "\n"); for(i := 0; i < len t.rows; i++) { for(j := 0; j < len t.types; j++) { if(t.types[j]) sys->fprint(fd, "\t%d", t.rows[i][j].t1); else sys->fprint(fd, "\t%s", t.rows[i][j].t0); } sys->fprint(fd, "\n"); } return nil; } Table.text(t: self ref Table): string { s := sprint("%s:\n\tdescr \"%s\"\n", t.name, t.descr); if(t.match != nil) s += "\tmatch "+t.match.text()+"\n"; for(l := t.per; l != nil; l = tl l) s += "\tper "+hd l+"\n"; for(l = t.keep; l != nil; l = tl l) s += "\tkeep "+hd l+"\n"; for(ff := t.final; ff != nil; ff = tl ff) s += "\t"+(hd ff).text()+"\n"; return s; } Expr.text(e: self ref Expr): string { pick ee := e { And => return "("+ee.p0.text()+" and "+ee.p1.text()+")"; Or => return "("+ee.p0.text()+" or "+ee.p1.text()+")"; Eq => return "("+ee.p0.text()+" == "+ee.p1.text()+")"; Ne => return "("+ee.p0.text()+" != "+ee.p1.text()+")"; Param => return ee.s; Str => return "\""+ee.s+"\""; } } Final.text(f: self ref Final): string { pick ff := f { Sort => return sprint("sort %s", ff.s); Limit => return sprint("limit %d", ff.n); Reverse => return "reverse"; Normalise => return sprint("normalise %s", ff.s); Lump => return sprint("lump %s %s \"%s\"", ff.s, ff.cutoff, ff.str); } } has(s: string, l: list of string): int { for(; l != nil; l = tl l) if(hd l == s) return 1; return 0; } l2a[T](l: list of T): array of T { a := array[len l] of T; i := 0; for(; l != nil; l = tl l) a[i++] = hd l; return a; } say(s: string) { if(dflag) warn(s); } warn(s: string) { sys->fprint(sys->fildes(2), "%s\n", s); } fail(s: string) { warn(s); raise "fail:"+s; } |
Changes to appl/cmd/mkfile.
︙ | ︙ | |||
95 96 97 98 99 100 101 102 103 104 105 106 107 108 | ircfs.dis\ itest.dis\ itreplay.dis\ kill.dis\ listen.dis\ lockfs.dis\ logfile.dis\ look.dis\ ls.dis\ lstar.dis\ lszip.dis\ m4.dis\ man2html.dis\ man2txt.dis\ | > | 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | ircfs.dis\ itest.dis\ itreplay.dis\ kill.dis\ listen.dis\ lockfs.dis\ logfile.dis\ #logparse.dis\ look.dis\ ls.dis\ lstar.dis\ lszip.dis\ m4.dis\ man2html.dis\ man2txt.dis\ |
︙ | ︙ | |||
265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 | DISBIN=$ROOT/dis <$ROOT/mkfiles/mkdis <$ROOT/mkfiles/mksubdirs auhdr.dis: auplay.dis rm -f auhdr.dis && cp auplay.dis auhdr.dis dbfs.dis: $MODDIR/styxservers.m rawdbfs.dis: $MODDIR/styxservers.m import.dis: $MODDIR/encoding.m $MODDIR/factotum.m basename.dis: $MODDIR/names.m cleanname.dis: $MODDIR/names.m vacfs.dis: $MODDIR/vac.m $MODDIR/venti.m vacget.dis: $MODDIR/vac.m $MODDIR/venti.m vacput.dis: $MODDIR/vac.m $MODDIR/venti.m | > > | 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 | DISBIN=$ROOT/dis <$ROOT/mkfiles/mkdis <$ROOT/mkfiles/mksubdirs auhdr.dis: auplay.dis rm -f auhdr.dis && cp auplay.dis auhdr.dis logparse.b: logparse.y yacc -o logparse.b logparse.y dbfs.dis: $MODDIR/styxservers.m rawdbfs.dis: $MODDIR/styxservers.m import.dis: $MODDIR/encoding.m $MODDIR/factotum.m basename.dis: $MODDIR/names.m cleanname.dis: $MODDIR/names.m vacfs.dis: $MODDIR/vac.m $MODDIR/venti.m vacget.dis: $MODDIR/vac.m $MODDIR/venti.m vacput.dis: $MODDIR/vac.m $MODDIR/venti.m |
Changes to appl/lib/mkfile.
︙ | ︙ | |||
72 73 74 75 76 77 78 79 80 81 82 83 84 85 | keyset.dis\ libc.dis\ libc0.dis\ lists.dis\ lock.dis\ login.dis\ man.dis\ memfs.dis\ mpeg.dis\ msgio.dis\ #mercurial.dis\ #mercurialwire.dis\ #mercurialremote.dis\ bdiff.dis\ | > | 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | keyset.dis\ libc.dis\ libc0.dis\ lists.dis\ lock.dis\ login.dis\ man.dis\ mhttp.dis\ memfs.dis\ mpeg.dis\ msgio.dis\ #mercurial.dis\ #mercurialwire.dis\ #mercurialremote.dis\ bdiff.dis\ |
︙ | ︙ |
Added appl/svc/httpd.sh.
> > | 1 2 | #!/dis/sh /dis/ip/shttpd -h -n /services/httpd/config.db |
Deleted appl/svc/httpd/alarms.b.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/alarms.m.
|
| < < < < < < < < < < < |
Deleted appl/svc/httpd/cache.b.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/cache.m.
|
| < < < < < < < < < |
Deleted appl/svc/httpd/cgiparse.b.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/cgiparse.m.
|
| < < < < < < < < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/contents.b.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/contents.m.
|
| < < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/date.b.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/date.m.
|
| < < < < < < < < < < < |
Deleted appl/svc/httpd/echo.b.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/httpd.b.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/httpd.debug.
Deleted appl/svc/httpd/httpd.log.
Deleted appl/svc/httpd/httpd.m.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/httpd.rewrite.
|
| < < < < < < < < < < |
Deleted appl/svc/httpd/httpd.suff.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/imagemap.b.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/mkfile.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/parser.b.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/parser.m.
|
| < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/redirect.b.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted appl/svc/httpd/redirect.m.
|
| < < < < < < < |
Deleted appl/svc/httpd/stats.b.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to appl/svc/mkfile.
1 2 3 | <../../mkconfig DIRS=\ | < > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <../../mkconfig DIRS=\ webget\ SHTARG=\ auth.sh\ httpd.sh\ net.sh\ registry.sh\ rstyx.sh\ styx.sh\ BIN=$ROOT/dis/svc |
︙ | ︙ |
Changes to appl/wm/man.b.
︙ | ︙ | |||
23 24 25 26 27 28 29 | window: ref Tk->Toplevel; W: adt { textwidth: fn(nil: self ref W, text: Text): int; }; | > | | | | | | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | window: ref Tk->Toplevel; W: adt { textwidth: fn(nil: self ref W, text: Text): int; }; # TODO theme support ROMAN: con "/fonts/hermit/regular/16/font"; BOLD: con "/fonts/hermit/bold/16/font"; ITALIC: con "/fonts/hermit/regularitalic/16/font"; HEADING1: con "/fonts/hermit/bold/16/font"; HEADING2: con "/fonts/hermit/bolditalic/16/font"; rfont, bfont, ifont, h1font, h2font: ref Font; GOATTR: con Parseman->ATTR_LAST << iota; MANPATH: con "/man/1/man"; INDENT: con 40; metrics: Parseman->Metrics; |
︙ | ︙ |
Changes to appl/wm/sh.b.
︙ | ︙ | |||
223 224 225 226 227 228 229 230 231 232 233 234 235 236 | for (i := 0; i < len shwin_cfg; i++) cmd(t, shwin_cfg[i]); (menuw, nil) := itemsize(t, ".m"); if (font != nil) { if (font[0] != '/' && (len font == 1 || font[0:2] != "./")) font = "/fonts/" + font; cmd(t, ".ft.t configure -font " + font); } cmd(t, ".ft.t configure -width 65w -height 20h"); cmd(t, "pack propagate . 0"); if(width != nil) cmd(t, ". configure -width " + width); if(height != nil) cmd(t, ". configure -height " + height); | > > > | 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 | for (i := 0; i < len shwin_cfg; i++) cmd(t, shwin_cfg[i]); (menuw, nil) := itemsize(t, ".m"); if (font != nil) { if (font[0] != '/' && (len font == 1 || font[0:2] != "./")) font = "/fonts/" + font; cmd(t, ".ft.t configure -font " + font); } else { # TODO theme support font = "/fonts/BQN386/16/font"; cmd(t, ".ft.t configure -font " + font); } cmd(t, ".ft.t configure -width 65w -height 20h"); cmd(t, "pack propagate . 0"); if(width != nil) cmd(t, ". configure -width " + width); if(height != nil) cmd(t, ". configure -height " + height); |
︙ | ︙ |
Added dis/svc/httpd.
> > | 1 2 | #!/dis/sh /dis/ip/shttpd -h -n /services/httpd/config.db |
Deleted dis/svc/httpd/.keep.
Added doc/docs.txt.
> > | 1 2 | message headers (also other protocols than http): http://www.iana.org/assignments/message-headers/message-header-index.html |
Added doc/http.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 | note: this document is not finished yet # introduction this document contains comments on the http/1.1 specification, as in rfc2616. it also attempts to provide pointers for implementors, by showing common pitfalls, minimum requirements for implementations (and parts of the specification that can be skipped while remaining compliant), problems/ambiguities in the specification, examples. this is not (yet) a full introduction to http/1.1, it may become one in the future. first an example of a contemporary http/1.1 transaction. sent from a firefox 2.0.0.x client to a lighttpd 1.4.x server. first the request: GET / HTTP/1.1 Host: www.ueber.net User-Agent: Mozilla/5.0 (X11; U; OpenBSD i386; en-US; rv:1.8.1.6) Gecko/20070819 Firefox/2.0.0.6 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive and the response: HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 ETag: "6646323153445497512" Accept-Ranges: bytes Last-Modified: Sat, 24 Feb 2007 16:35:45 GMT Content-Length: 590 Date: Fri, 14 Dec 2007 13:38:16 GMT Server: lighttpd/1.4.13 [590 bytes of body] as for the request. the first line is a method (`GET`), a path (`/`) and the http version (`HTTP/1.1`). each separated by a single space. lines end with CRLF, but servers should be permissive and accept a LF instead of CRLF as well. next follow the headers, typically one per line, the colon separates the name from the value. practically always, leading and trailing whitespace can be removed. an empty line ends the headers. if a body is present it follows the empty line immediately. the length of the body is determined by the headers. the response is very similar. only the first line is different: it consists of the version (`HTTP/1.1`), followed by a 3-digit status code (`200`), followed by a descriptive message (`OK`). the message leads to the end of the line and is allowed to contain spaces. the three elements are again separated by a single space. the body follows the empty line after the headers immediately, just like with a request. some headers can occur only in requests, some only in responses, some in both. some headers that are allowed in both have differing semantics based on whether they are used in a request or response. the most common requests use the methods `GET` and `POST`. other methods, namely `HEAD`, `OPTIONS` and `TRACE` are used much less. `PUT` and `DELETE` are not normally used in browsers, browsers just download things. more methods have been specified for e.g. WEBDAV. `PUT` and `DELETE` are mostly used with WEBDAV by the way. http/1.1 also specifies `CONNECT`, which is a bit special: it makes the http proxy/server forward the current tcp connection to some random ip:port; used for doing the secure "https" through a proxy. in general, http gets complex very quickly due to the state-explosive combinations of requests, response statuses and the many headers. the specification tries to describe behaviour such that new methods and headers can be specified. unfortunately, new methods and headers can easily introduce inconsistencies. those who consider a solution to many problems, please read the following rfcs and documents: * rfc3143, "Known HTTP Proxy/Caching Problems" * rfc3205, "On the use of HTTP as a Substrate" * http://www.usenix.org/events/usenix99/invited_talks/mogul.pdf, "What’s wrong with HTTP (and why it doesn't matter)" or in short: try to avoid http where you can. # on http headers in general headers are of the form `field: value`. whitespace (space/tab, or crlf followed by at least one space/tab) can, but does not have to occur before the value. so these are all equivalent: Content-Length:<sp>123<crlf> Content-Length:123<sp><tab><crlf> Content-Length:<sp><tab><sp>123<crlf> Content-Length: <crlf> <sp><tab>123<sp><sp><crlf> in general, whitespace can occur between tokens that make up a header, unless specically specified as not allowed. some headers where this is not allowed: `Date` (precisely specified), `Content-Type` (actually, only the media-type in the content type). whitespace has no meaning, it just serves to separate tokens and readability. headers aren't really hard, although the way they are specified leaves it a bit unclear how complext it is going to get. for example, section 2.2 "basic rules" specify `comments` for headers, i.e. data with parentheses. and comments can be nested. parsing this with simple string functions isn't nice. luckily, after reading the specification you'll know that only a few headers are allowed to have headers (in others, the parenteses are simply part of the value). the headers are: `Via`, `Server`, `User-Agent`. all headers for which the value doens't have important semantics. then about the headers whose values consists of comma-separated elements. these are specified in bnf as `#rule`, meaning zero or more `rule`'s separated by comma's (and lws in between). the special trick is that multiple headers with the same name may be present, and should be concatenated (with a comma as separator) when handling that header. about duplicate header names for other headers the specification is silent. it may be a good idea to treat duplicate headers with known semantics which don't consist of comma-separated values as invalid (i.e. respond with 400 "bad request" if a server encounters it in a request). the order in which the headers occur is important. the `#rule`-headers are: `Accept`, `Accept-Charset`, `Accept-Encoding`, `Accept-Language`, `Allow`, `Cache-Control`, `Connection`, `Content-Encoding`, `Content-Language`, `Expect`, `Pragma`, `Proxy-Authenticate`, `TE`, `Trailer`, `Transfer-Encoding`, `Upgrade`, note that some headers partially consist of `#rule`-values, but may (partially) consist of other values too. these are not allowed to be merged. these headers are: `Accept-Ranges`, `If-Match`, `If-None-Match`, `Vary`, `Via`, `Warning`, `WWW-Authenticate`. some header values can be "quoted-strings": double quotes around any character except controls and the double quote. in http/1.0 that was it. in http/1.1 quoted-string parsing has changed, a backslash is now allowed to escape a double quote. thus, interpretation of headers should be done based on the http version of the request. # connections keeping connections alive after a request is an important feature in http/1.1 compared to http/1.0. by default, http/1.1 connections are keep-alive connections. so, after a request another request can follow. when either the request or the response contains a `Connection: close` header, the connection will close after the response has come in. # entity a _request_ has an entity when either a `Content-Length` or `Transfer-Encoding` header is present. whether a _response_ has an entity is based on request method and response status code. section 4.3 "message body" tells us responses to a `HEAD` request do never have bodies, even if there are headers such as `Content-Length` that suggest otherwise. the section also tells all 1xx, 204 "no content" and 304 "not modified" responses to not have bodies. all other responses do have bodies (though maybe of zero length). for requests, only POST and PUT normally have bodies. OPTIONS is allowed to have a body has well, for future compatibility. it's semantics are undefined, so it is best not used. rfc2616 suggests that such a body is discarded. this is best done by simply closing the connection after reading having sent the response. this prevents the incoming data to be regarded as a request. now for the length of the entity if it is present. first, if `Transfer-Encoding` has a value other than `identity`, the response is in chunked mode, which is self-delimiting. if a `Content-Length` is present, it is the length in bytes. note that both headers should not be present in a single request/response; if they are, `Content-Length` must be ignored. this strikes me as odd: if `Transfer-Encoding: identity` is present, how would you determine the length? next section 4.4 "message length" describes that a `Content-Type` with media-type `multipart/byteranges` is self-delimiting and thus doesn't need a `Transfer-Encoding` or `Content-Length`. they could have just required chunked transfer-encoding for that case... the last way of determining the length, only when none of the just mentioned methods apply, is to simply read to end of file. this is mostly for http/1.0 backwards compatibility but is also used between http/1.1-only transactions. actually, this last method is quite unsatisfactory: it doesn't allow detecting if a remote server is shutdown (causing its tcp connections to close, i.e. without timing out). # forward compatibility rfc2616 sprinkles information on how unrecognized http versions, methods, response statuses, header names and header values should be handled throughout the specification. the goal is to allow future http versions/extensions to be specified without breaking older clients. this section contains this data. 1. unknown http versions (section 3.1 "http version"). a higher minor version implies newer message semantics but **not** new message parsing algorithms. i.e. the new version may have new headers. the new version will probably be specified such that http/1.1 interpreters of the message will stuff handle the message correctly. a higher major version implies new message parsing semantics. thus, if the server is even able to detect the http version in the message with a new major version (a new specification will probably make sure it is), it cannot assume it correctly parsed the message and thus must respond with 505 "http version not supported". a request in unknown minor version should probably be handled as the highest known minor version understood. care must be taken to respond properly to unknown values in headers. the specification explicitly defines what to do for some headers. unfortuantely, in practice all bets are probably off: the http/1.0 specification prescribes practically the same, but still http/1.1 messages are parsed differently (chunked encoding isn't present in http/1.0) and the major version number has not been incremented. 2. unknown http methods (section 5.1.1, "method"). methods that are specified but not implemented (e.g. `PUT`), or not completely unrecognized must be responded to with 501 "not implemented". 3. unknown http header names. this one is easy, unrecognized names should simply be ignored. this is an explicit forward-compatibility thing. 4. unknown http header values. this is one is much more tricky. some headers with invalid values should be ignored. xxx should some be responded to with a "bad request"? for some header names a few values are specified and extension values are explicitly allowed in the BNF. how to handle these unknown values varies. how invalid values should be handled isn't always clear as well. the next listing attempts to provide sane defaults. * `If-Modified-Since` and `If-Unmodified-Since`: if the date is invalid, it should be ignored. i think 400 "bad request" would have been better. * `Cache-Control` explictly allows extensions. they are supposedly designed such that they can be ignored. the extension is supposed to override the default caching directives that apply or are specified in the header for backwards compatibility. too bad, cache-control is already too complex. * `Content-Encoding` implies a 415 "unsupported media type" should be sent for unknown encodings. unknown encodings aren't really allowed, all valid encodings are specified in section 3.5. * `Content-Length`, although 14.13 doesn't say what to do for invalid values, the only proper interpration is "bad request" or "bad response". * `Content-Type`, again, sections 14.17 and 7.2.1 do not specify how to handle invalid values. if the content-type is not specified, it can safely be assumed to be application/octet-stream (which can be responded to with 415 "unsupported media type"). if the value is syntactically invalid, it should probably be treated as a 400 "bad request". * `Expect`: the only value specified is `100-continue`. if the value is unknown, an error should be returned according to section 14.20. 400 "bad request" seems appropriate. if the value is known but cannot be met, 417 "expectation failed" applies. * `Host`: this header must be present in all requests. the really silly thing: if the host is not a valid host on the server (i.e. the server doesn't know the host), a 400 "bad request" must be returned. 404 "file not found" sounds so much better, there is nothing "bad" about the request. * `If-Match`: section 14.24, typically used to safely overwrite a file with a `PUT` request. bad values should be responded to with 400 "bad request" to be safe. The same goes for `If-Modified-Since` from section 14.28. * `Transfer-Encoding`: section 14.41. again, nothing is said about unknown encodings. however, if you don't understand how a message if formed, the only useful action seems to be not to interpret it. 400 "bad request" probably comes closest. * `Vary`: section 14.44, again nothing specified about invalid values. the safe option seems to treat the value as `*`, the most restrictive and safe value. * many other headers are optional. e.g. `Date`, `ETag`, `If-None-Match, `Last-Modified` only provide additional services (caching). `Range` provides partial file serving. if they are invalid, they are safe to igore. in my opinion it is usually better to point the program to its error rather than guessing what the programs intentions were, but that is not what the specification says. # minimal implementation & http in practice bad for us: the http/1.1 specification is pretty large. good for us: we can safely ignore parts of it. and some parts are only for clients, proxies and/or servers. as for methods, only `GET` and `HEAD` are mandatory. a webserver without `POST` is crippled. `OPTIONS` and `TRACE` aren't very useful but aren't that hard to implement either. ## ignorable headers we can cut a lot more in headers we need to support. first, headers that are completely irrelevant to servers: `Age`, `Max-Forwards`, `Proxy-Authenticate`, `Via`, `Warning`. these are only for caches (e.g. proxies). next, some incoming headers have no influence on responses and can safely be ignored: `From`, `Referer`, `User-Agent`. these may be useful for logging in their raw form. now, yet another set of headers "should" or "may" be handled, but are not (useful) in practice: `Accept`, `Accept-Charset`, `Accept-Encoding`, `Accept-Language`, `Content-Location`, `Content-MD5`, `TE`, `Upgrade`. ## mandatory/useful headers then, another set of headers are only generated by servers, not received. generating headers is usually far easier to implement than parsing them. they are: `Allow`, `Accept-Ranges`, `ETag`, `Expires`, `Last-Modified`, `Location`, `Server`, `Vary`, `WWW-Authenticate`. these headers can be generated by both clients and servers, but the server can ignore them when they come from a client: `Date`, `Cache-Control`, `Pragma`, `Trailer`. headers that clients send but can safely be ignored, but are quite useful and recommended to be implemented: `Authorization`, `If-Modified-Since`, `If-None-Match`, `If-Range`, `Range`. note: `Content-Range` is also only generated by a server, though not entirely trivial. it is a response to the `Range` header. headers that clients send and really really should be implemented (perhaps partially): `Connection`, `Content-Encoding`, `Content-Length`, `Content-Type`, `Expect`, `Host`, `If-Match`, `If-Unmodified-Since`, `Transfer-Encoding`. for security, some headers should be handled specially. when a `Proxy-Authorization` is sent to a server it should respond with 400 "bad request", this should just never happen. when a `Authorization` header is sent for a path on a server that doesn't need authentication, it should only be accepted when the user/pass are empty strings; for anything else, a 401 "unauthorized" should be send. note that is not specified by the specification but should protect users from spewing their credentials around. # on specific headers ## `Connection` if one of the values (it is a comma-separated list) is `close`, the connection will be closed. the response should also include a `Connection: close` header. other values can safely be ignored. ## `Content-Encoding` the server can generated this, e.g. for sending compressed data. the client can send this for a `POST` too, though it doesn't seem to be common practice. there is no good reason it isn't though. ## `Content-Length` if present, and `Transfer-Encoding` is not present, this denotes the size of the message body. if `Transfer-Encoding` is present (they shouldn't both be), `Content-Length` should be ignored. ## `Content-Type` it should be present whenever an entity is sent. if it isn't, `application/octet-stream` may be assumed. otherwise, remember to specify a decent `charset` for the data if it is `text/*`, e.g.: `Content-Type: text/html; charset=utf-8`. ## `Expect` only relevant for `POST`. if the value is not (case-insensitive) `100-continue`, or if it is but the request is not acceptable, send 417 "expectation failed". note that `100-continue` will usually have to be handled by the programs that handle the `POST` request, which is usually a separate process started by the webserver. ## `Host` _All_ requests must have a `Host` header (see section 9). Even if it isn't used, e.g. for `TRACE` requests. Also, when the path, specified after the method, is a full URL, the `Host` must still be present but must also be ignored. ## `If-Match` and `If-Unmodified-Since` only mandatory for `PUT` and `DELETE`, to make operations safe. are not really useful for `GET` etc. ## `Transfer-Encoding` when present, in practice it has the value `chunked`. this one is "funny" to read about in rfc2616. first, according to section 14.41 multiple transformations can be applied to message. thus, we are allowed to send `Transfer-Encoding: chunked, chunked`, and wrap one chunk-stream in another. utterly silly and annoying. xxx check how many clients support this. on the other hand: section 4.4, list item 2, says that if the value is anything other than `identity` it means it is simply chunked. though that section implies something other hilarious again. *** ## `Allow` send this comma-separated value in response to an `OPTIONS` request. not much use sending it otherwise, though you are allowed to. ## `Accept-Ranges` you can send this with value `bytes` if you support range requests (with the `Range` request-header and `Content-Range` response-header). it isn't required though, clients can always try to send range requests. it is probably useful to send this for `OPTIONS` requests. ## `ETag` these are only mandatory for `Range` requests. they are very useful for caching since they specify the version of a file uniquely. the older (and seemingly more popular, even in this century) habit of using timestamps with second-precision has only disadvantages. etags are simply quoted strings that represent the entity uniquely. the SHA-1 hash of the contents can be used, but this usually isn't feasible. better: the SHA-1 hash of the concatenatino of: last modification time (of the file or of the data generated content is based on), requested URL (host, port, path, query), file modification count. the etag should normally be about the entity returned (e.g. with a 200 "OK" response) or not returned (e.g. with a 304 "not modified" response). for 201 "created", the etag is about the object created, not the response. it doesn't make much sense to return etags in error responses, such as 404 "file not found", they would have to be about the error message, which isn't useful. ## `Expires` used for specifying how long an entity can be cached. data that should not be cached can send a date string in the past, or equal to the current date minus approximately a year (this comes from the specification indeed..., section 14.21). but that's mostly for compatibility with http/1.0. sending a `Cache-Control: max-age=0` is preferred (by me at least). ## `Last-Modified` the last modification time of the file or data the entity is based on, as a date string. the value is again used by clients in conditional requests, with the `If-Unmodified-Since` header. there is no reason not to include it when an mtime is available. ## `Location` an url pointing to an object. should be present in: 301 "moved permanently", 302 "found", 303 "see other", 307 "temporary redirect"; may be present in: 300 "multiple choices" a 305 "use proxy" should have a location header pointing to a proxy. this response doesn't make much sense though. in practice, just implement for the 3xx responses mentioned above. ## `Server` an identification of the server. is not mandatory, but useful for debugging and statistics. note that this isn't free-form, use `name/version`, e.g. `myhttpd/1`. ## `Vary` used for specifying (to a cache) which headers were used in content negotiation. if the value is `*`, other elements than headers have influenced the representation chosen. otherwise, it is a comma-separated list of header fields. a cache may return a previously returned response if the headers listed are identical and the other caching headers are valid. ## `WWW-Authenticate` must be present in a 401 "unauthorized". specified in rfc 2617. "basic" authorization just sends plaintext username/passwords. "digest" authorization uses a challenge. not great. *** ## `Date` the date the client/server created the request/response. no reason not to include it. ## `Cache-Control` this header as many pages in the rfc describing its behaviour. if you want things explicitly uncacheable, make the server return `max-age=0`. safe to ignore otherwise, mostly relevant for caches. ## `Pragma` for backwards compatibility. http/1.0 used this for caching. when making an object explicitly uncacheable, set it to `no-cache`. safe to ignore otherwise. ## `Trailer` comma-separated list of headers that will be present in the trailing headers after the chunk-encoded stream. there is rarely a reason to need and implement this. trailing headers must be explicitly allowed. safe to ignore. # on http quirks this section describes some strange things about http/1.1. servers should ignore empty lines at the beginning of a request. for being lenient towards crappy clients. quality values in headers, e.g. `q=0.2` are a bit silly. e.g. these are all valid values: `0.`, `0.0`, `0`, `0.000`. do they all have the same semantics? elsewhere in the specification, special meaning is assigned to a value of `0`. do they mean the floating point value zero? simply picking numbers from 0-1000 would have been easier. needing to understand three forms of dates... full url should be understood by servers, but Host: must always be present. if a full url is present, the Host header must simply be ignored. a Host: header should include the port the request came in on. this is useless, the server can always determine which port it was. a client can lie about this. the hostname is different of course, that's what the host header is for. section 4.4, list item 2 claims that a message has `Transfer-Encoding` with a value other than `identity`, it means the transfer encoding is chunked, "unless the message is terminated by closing the connection". this implies a response with such a header value will have to be treated as chunked and buffered somewhere, and if the connection ends before the proper end-of-chunked-stream message has come in, the entire chunked stream (with chunk messages) will retroactively have to be interpreted as a literal stream. hilarious. sad. a cache is only allowed to combine range requests if the etag is strongly equivalent. sure. a client, however, is not granted the same protection, it is allowed (well, not forbidden as with caches) to combine the responses. it doesn't make sense to specify this restriction just for caches. the whole idea of using timestamps with second-precision for caching isn't great. the way the timestamp is specified is even more ridiculous. the fact that entities can be conditionally retrieved based on the timestamp is even more silly given that etags are so much more useful for that. an `OPTIONS` request wants to know which methods are allowed on an object. to determine this, we may need authorization credentials. otherwise we might be giving away information the client is not allowed to know. and besides, it sounds pretty bloaty... so instead, we'll just say we support POST on everything, as if `*` was specified for path. also, it seems `OPTIONS` is somewhwat underspecified. e.g., what to do when the path does not exist? lastly, no one seems to use `OPTIONS`, so we really do not care enough. # on http/1.0 compatibility xxx to write mention headers new to http/1.1, which must be ignored for http/1.0. mention new status response codes and when they are used. new methods? aren't defined right? http/1.0 headers: - Allow - Authorization - Content-Encoding - Content-Length - Content-Type - Date - Expires - From - If-Modified-Since - Last-Modified - Location - Pragma - Referer - Server - User-Agent - WWW-Authenticate new in http/1.1: - Accept - Accept-Charset - Accept-Encoding - Accept-Language - Accept-Ranges - Age - Cache-Control - Connection - Content-Language - Content-Location - Content-MD5 - Content-Range - ETag - Expect - Host - If-Match - If-None-Match - If-Range - If-Unmodified-Since - Max-Forwards - Proxy-Authenticate - Proxy-Authorization - Range - Retry-After - TE - Trailer - Transfer-Encoding - Upgrade - Vary - Via - Warning sending headers such as `ETag` to a http/1.0 client is not a problem, clients should not do anything with them. some incoming headers should really be handled for http/1.1 only: - Expect - If-Match - If-None-Match - If-Range - If-Unmodified-Since - Range - Transfer-Encoding missing length for clients sending a body must result in 400, not 411? (rfcrfc1945#7.2.2) if-modified-since should be ignored for head request (rfc1945#8.1) |
Added doc/implementations.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | benchmarks: http://www.acme.com/software/http_load/ http://www.hping.org/wbox/ servers: lighttpd apache thttpd hiawatha cherokee bozohttpd nostromo clients: lynx w3m links elinks firefox opera konqueror wget openbsd ftp curl python http libs charon safari internet explorer compliance testers: |
Added doc/ndb-testshttpd.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | # echo reload >/chan/shttpd debug vhost ctlchan=shttpd #accesslog=/services/logs/shttpdaccess announce=net!localhost!8000 announce=net!localhost!8001 mime ext=.sig type='application/pgp-signature' mime ext=.swf type='application/x-shockwave-flash' mime ext=.m3u type='audio/x-mpegurl' mime ext=.xbm type='image/x-xbitmap' mime ext=.xpm type='image/x-xpixmap' mime ext=.asc type='text/plain; charset=utf-8' mime ext=.cpp type='text/plain; charset=utf-8' mime ext=.log type='text/plain; charset=utf-8' mime ext=.text type='text/plain; charset=utf-8' mime ext=.dtd type='text/xml; charset=utf-8' mime ext=.xml type='text/xml; charset=utf-8' mime ext=.mov type='video/quicktime' mime ext=.wmv type='video/x-ms-wmv' mime ext=.erl type='text/plain; charset=utf-8' mime ext=.dis type='application/x-dis; charset=utf-8' mime ext=.jpg type='testing/jpg' host=localhost port=8000 cachesecs=60 listings path='' listen ip=127.1 index file=index.html file=index.htm file=index.txt redir src='^/redir1$' dst=http://www.example.com/redir1 redir src='^/redir2$' dst=/redir3 redir src='^/redir4$' dst=/$0/$1 redir src='^/redir5$' dst=/$$$$ cgi path=/cgi0 cmd='{load std; echo Status: 200 OK; echo content-type: text/plain; echo; cd /env && for(i in *) { echo -n $i^''=''; cat $i; echo}}' cgi path=/cgi1 cmd='{echo test}' cgi path=/cgi2 cmd='{echo Status: 100 continue}' cgi path=/cgi3 cmd='{echo Status: 100 continue; echo; echo Status: 200 OK; echo content-type: text/plain; echo; echo test}' cgi path=/cgi4 cmd='{echo Status: 200 OK; echo content-length: test; echo;}' cgi path=/cgi5 cmd='{echo Status: 200 OK; echo content-length: 1; echo content-type: text/plain; echo; echo -n a}' cgi path=/cgi6 cmd='{echo Status: 200 OK; echo content-length: 1; echo content-type: text/plain; echo; echo -n aa}' cgi path=/cgi7 cmd='{echo Status: 200 OK; echo content-length: 1; echo content-type: text/plain; echo}' cgi path=/cgi8 cmd='{load std; echo Status: 200 OK; echo content-type: text/plain; echo; cd /env && for(i in *) { echo -n $i^''=''; cat $i; echo}}' methods=GET,HEAD scgi path=/scgi0 addr='net!localhost!4006' scgi path=/scgi1 addr='net!localhost!3999' auth path=/auth0 realm=test user=testuser pass=testpass alias host='localhost.local' port=8000 usehost=localhost alias host='127.0.0.2' port=8000 usehost=localhost alias host='::1' port=8000 usehost=localhost host='*' port=8000 index file=index.html file=index.htm file=index.txt listings path='' |
Added doc/requests.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | requests made by commonly used clients python2.5 libs: GET /test 123 HTTP/1.1 Host: localhost:8000 Accept-Encoding: identity wget: GET /test%20123 HTTP/1.0 User-Agent: Wget/1.10.2 Accept: */* Host: localhost:8000 Connection: Keep-Alive openbsd ftp: GET /test 123 HTTP/1.0 Host: localhost:8000 User-Agent: OpenBSD ftp firefox 2.0.0.6: GET /test%20123 HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (X11; U; OpenBSD i386; en-US; rv:1.8.1.6) Gecko/20070819 Firefox/2.0.0.6 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive curl: GET /test 123 HTTP/1.1 User-Agent: curl/7.16.2 (i386-unknown-openbsd4.2) libcurl/7.16.2 OpenSSL/0.9.7j zlib/1.2.3 libidn/0.6.1 Host: localhost:8000 Accept: */* lynx: GET /test%20123 HTTP/1.0 Host: localhost:8000 Accept: text/html, text/plain, text/sgml, video/mpeg, image/jpeg, image/tiff, image/x-rgb, image/png, image/x-xbitmap, image/x-xbm, image/gif, application/postscript, */*;q=0.01 Accept-Encoding: gzip, compress Accept-Language: en User-Agent: Lynx/2.8.5rel.4 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.7j w3m: GET /test%20123 HTTP/1.0 User-Agent: w3m/0.5.2 Accept: text/html, text/*;q=0.5, image/* Accept-Encoding: gzip, compress, bzip, bzip2, deflate Accept-Language: en;q=1.0 Host: localhost:8000 charon: GET /test lala HTTP/1.0 Accept: */*; * Host: localhost:8000 User-Agent: Mozilla/4.08 (Charon; Inferno) links: GET /test%20123 HTTP/1.1 Host: localhost:8000 User-Agent: Links (1.00pre20; OpenBSD 4.2 i386; 80x24) Accept: */* Accept-Charset: us-ascii, ISO-8859-1, ISO-8859-2, ISO-8859-4, ISO-8895-5, ISO-8859-7, ISO-8895-9, ISO-8859-13, ISO-8859-15, ISO-8859-16, windows-1250, windows-1251, windows-1257, cp437, cp737, cp850, cp852, cp866, x-cp866-u, x-mac, x-mac-ce, x-kam-cs, koi8-r, koi8-u, TCVN-5712, VISCII, utf-8 Accept-Language: en, *;q=0.1 Connection: Keep-Alive elinks: GET /test%20123 HTTP/1.1 Host: localhost:8000 User-Agent: ELinks/0.11.2 (textmode; OpenBSD 4.2 i386; 80x24-2) Accept: */* Accept-Encoding: gzip Accept-Language: en Connection: Keep-Alive konqueror: GET /test%20123 HTTP/1.1 User-Agent: Mozilla/5.0 (compatible; Konqueror/3.5; OpenBSD) KHTML/3.5.7 (like Gecko) Accept: text/html, image/jpeg, image/png, text/*, image/*, */* Accept-Encoding: x-gzip, x-deflate, gzip, deflate Accept-Charset: utf-8, utf-8;q=0.5, *;q=0.5 Accept-Language: en Host: localhost:8000 Connection: Keep-Alive internet explorer 6: GET /test%20123 HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Accept-Language: en-us Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322) Host: localhost:8000 Connection: Keep-Alive safari 3 beta for windows: GET /test%20123 HTTP/1.1 Accept-Encoding: gzip, deflate Accept-Language: en-US User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/523.12.9 (KHTML, like Gecko) Version/3.0 Safari/523.12.9 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Connection: keep-alive Host: localhost:8000 |
Added doc/rfc1630.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 | Network Working Group T. Berners-Lee Request for Comments: 1630 CERN Category: Informational June 1994 Universal Resource Identifiers in WWW A Unifying Syntax for the Expression of Names and Addresses of Objects on the Network as used in the World-Wide Web Status of this Memo This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind. Distribution of this memo is unlimited. IESG Note: Note that the work contained in this memo does not describe an Internet standard. An Internet standard for general Resource Identifiers is under development within the IETF. Introduction This document defines the syntax used by the World-Wide Web initiative to encode the names and addresses of objects on the Internet. The web is considered to include objects accessed using an extendable number of protocols, existing, invented for the web itself, or to be invented in the future. Access instructions for an individual object under a given protocol are encoded into forms of address string. Other protocols allow the use of object names of various forms. In order to abstract the idea of a generic object, the web needs the concepts of the universal set of objects, and of the universal set of names or addresses of objects. A Universal Resource Identifier (URI) is a member of this universal set of names in registered name spaces and addresses referring to registered protocols or name spaces. A Uniform Resource Locator (URL), defined elsewhere, is a form of URI which expresses an address which maps onto an access algorithm using network protocols. Existing URI schemes which correspond to the (still mutating) concept of IETF URLs are listed here. The Uniform Resource Name (URN) debate attempts to define a name space (and presumably resolution protocols) for persistent object names. This area is not addressed by this document, which is written in order to document existing practice and provide a reference point for URL and URN discussions. Berners-Lee [Page 1] RFC 1630 URIs in WWW June 1994 The world-wide web protocols are discussed on the mailing list www- talk-request@info.cern.ch and the newsgroup comp.infosystems.www is preferable for beginner's questions. The mailing list uri- request@bunyip.com has discussion related particularly to the URI issue. The author may be contacted as timbl@info.cern.ch. This document is available in hypertext form at: http://info.cern.ch/hypertext/WWW/Addressing/URL/URI_Overview.html The Need For a Universal Syntax This section describes the concept of the URI and does not form part of the specification. Many protocols and systems for document search and retrieval are currently in use, and many more protocols or refinements of existing protocols are to be expected in a field whose expansion is explosive. These systems are aiming to achieve global search and readership of documents across differing computing platforms, and despite a plethora of protocols and data formats. As protocols evolve, gateways can allow global access to remain possible. As data formats evolve, format conversion programs can preserve global access. There is one area, however, in which it is impractical to make conversions, and that is in the names and addresses used to identify objects. This is because names and addresses of objects are passed on in so many ways, from the backs of envelopes to hypertext objects, and may have a long life. A common feature of almost all the data models of past and proposed systems is something which can be mapped onto a concept of "object" and some kind of name, address, or identifier for that object. One can therefore define a set of name spaces in which these objects can be said to exist. Practical systems need to access and mix objects which are part of different existing and proposed systems. Therefore, the concept of the universal set of all objects, and hence the universal set of names and addresses, in all name spaces, becomes important. This allows names in different spaces to be treated in a common way, even though names in different spaces have differing characteristics, as do the objects to which they refer. Berners-Lee [Page 2] RFC 1630 URIs in WWW June 1994 URIs This document defines a way to encapsulate a name in any registered name space, and label it with the the name space, producing a member of the universal set. Such an encoded and labelled member of this set is known as a Universal Resource Identifier, or URI. The universal syntax allows access of objects available using existing protocols, and may be extended with technology. The specification of the URI syntax does not imply anything about the properties of names and addresses in the various name spaces which are mapped onto the set of URI strings. The properties follow from the specifications of the protocols and the associated usage conventions for each scheme. URLs For existing Internet access protocols, it is necessary in most cases to define the encoding of the access algorithm into something concise enough to be termed address. URIs which refer to objects accessed with existing protocols are known as "Uniform Resource Locators" (URLs) and are listed here as used in WWW, but to be formally defined in a separate document. URNs There is currently a drive to define a space of more persistent names than any URLs. These "Uniform Resource Names" are the subject of an IETF working group's discussions. (See Sollins and Masinter, Functional Specifications for URNs, circulated informally.) The URI syntax and URL forms have been in widespread use by World-Wide Web software since 1990. Berners-Lee [Page 3] RFC 1630 URIs in WWW June 1994 Design Criteria and Choices This section is not part of the specification: it is simply an explanation of the way in which the specification was derived. Design criteria The syntax was designed to be: Extensible New naming schemes may be added later. Complete It is possible to encode any naming scheme. Printable It is possible to express any URI using 7-bit ASCII characters so that URIs may, if necessary, be passed using pen and ink. Choices for a universal syntax For the syntax itself there is little choice except for the order and punctuation of the elements, and the acceptable characters and escaping rules. The extensibility requirement is met by allowing an arbitrary (but registered) string to be used as a prefix. A prefix is chosen as left to right parsing is more common than right to left. The choice of a colon as separator of the prefix from the rest of the URI was arbitrary. The decoding of the rest of the string is defined as a function of the prefix. New prefixed are introduced for new schemes as necessary, in agreement with the registration authority. The registration of a new scheme clearly requires the definition of the decoding of the URI into a given name space, and a definition of the properties and, where applicable, resolution protocols, for the name space. The completeness requirement is easily met by allowing particularly strange or plain binary names to be encoded in base 16 or 64 using the acceptable characters. The printability requirement could have been met by requiring all schemes to encode characters not part of a basic set. This led to many discussions of what the basic set should be. A difficult case, for example, is when an ISO latin 1 string appears in a URL, and within an application with ISO Latin-1 capability, it can be handled intact. However, for transport in general, the non-ASCII Berners-Lee [Page 4] RFC 1630 URIs in WWW June 1994 characters need to be escaped. The solution to this was to specify a safe set of characters, and a general escaping scheme which may be used for encoding "unsafe" characters. This "safe" set is suitable, for example, for use in electronic mail. This is the canonical form of a URI. The choice of escape character for introducing representations of non-allowed characters also tends to be a matter of taste. An ANSI standard exists in the C language, using the back-slash character "\". The use of this character on unix command lines, however, can be a problem as it is interpreted by many shell programs, and would have itself to be escaped. It is also a character which is not available on certain keyboards. The equals sign is commonly used in the encoding of names having attribute=value pairs. The percent sign was eventually chosen as a suitable escape character. There is a conflict between the need to be able to represent many characters including spaces within a URI directly, and the need to be able to use a URI in environments which have limited character sets or in which certain characters are prone to corruption. This conflict has been resolved by use of an hexadecimal escaping method which may be applied to any characters forbidden in a given context. When URLs are moved between contexts, the set of characters escaped may be enlarged or reduced unambiguously. The use of white space characters is risky in URIs to be printed or sent by electronic mail, and the use of multiple white space characters is very risky. This is because of the frequent introduction of extraneous white space when lines are wrapped by systems such as mail, or sheer necessity of narrow column width, and because of the inter-conversion of various forms of white space which occurs during character code conversion and the transfer of text between applications. This is why the canonical form for URIs has all white spaces encoded. Reommendations This section describes the syntax for URIs as used in the WorldWide Web initiative. The generic syntax provides a framework for new schemes for names to be resolved using as yet undefined protocols. URI syntax A complete URI consists of a naming scheme specifier followed by a string whose format is a function of the naming scheme. For locators of information on the Internet, a common syntax is used for the IP Berners-Lee [Page 5] RFC 1630 URIs in WWW June 1994 address part. A BNF description of the URL syntax is given in an a later section. The components are as follows. Fragment identifiers and relative URIs are not involved in the basic URL definition. SCHEME Within the URI of a object, the first element is the name of the scheme, separated from the rest of the object by a colon. PATH The rest of the URI follows the colon in a format depending on the scheme. The path is interpreted in a manner dependent on the protocol being used. However, when it contains slashes, these must imply a hierarchical structure. Reserved characters The path in the URI has a significance defined by the particular scheme. Typically, it is used to encode a name in a given name space, or an algorithm for accessing an object. In either case, the encoding may use those characters allowed by the BNF syntax, or hexadecimal encoding of other characters. Some of the reserved characters have special uses as defined here. THE PERCENT SIGN The percent sign ("%", ASCII 25 hex) is used as the escape character in the encoding scheme and is never allowed for anything else. HIERARCHICAL FORMS The slash ("/", ASCII 2F hex) character is reserved for the delimiting of substrings whose relationship is hierarchical. This enables partial forms of the URI. Substrings consisting of single or double dots ("." or "..") are similarly reserved. The significance of the slash between two segments is that the segment of the path to the left is more significant than the segment of the path to the right. ("Significance" in this case refers solely to closeness to the root of the hierarchical structure and makes no value judgement!) Berners-Lee [Page 6] RFC 1630 URIs in WWW June 1994 Note The similarity to unix and other disk operating system filename conventions should be taken as purely coincidental, and should not be taken to indicate that URIs should be interpreted as file names. HASH FOR FRAGMENT IDENTIFIERS The hash ("#", ASCII 23 hex) character is reserved as a delimiter to separate the URI of an object from a fragment identifier . QUERY STRINGS The question mark ("?", ASCII 3F hex) is used to delimit the boundary between the URI of a queryable object, and a set of words used to express a query on that object. When this form is used, the combined URI stands for the object which results from the query being applied to the original object. Within the query string, the plus sign is reserved as shorthand notation for a space. Therefore, real plus signs must be encoded. This method was used to make query URIs easier to pass in systems which did not allow spaces. The query string represents some operation applied to the object, but this specification gives no common syntax or semantics for it. In practice the syntax and sematics may depend on the scheme and may even on the base URI. OTHER RESERVED CHARACTERS The astersik ("*", ASCII 2A hex) and exclamation mark ("!" , ASCII 21 hex) are reserved for use as having special signifiance within specific schemes. Unsafe characters In canonical form, certain characters such as spaces, control characters, some characters whose ASCII code is used differently in different national character variant 7 bit sets, and all 8bit characters beyond DEL (7F hex) of the ISO Latin-1 set, shall not be used unencoded. This is a recommendation for trouble-free interchange, and as indicated below, the encoded set may be extended or reduced. Berners-Lee [Page 7] RFC 1630 URIs in WWW June 1994 Encoding reserved characters When a system uses a local addressing scheme, it is useful to provide a mapping from local addresses into URIs so that references to objects within the addressing scheme may be referred to globally, and possibly accessed through gateway servers. For a new naming scheme, any mapping scheme may be defined provided it is unambiguous, reversible, and provides valid URIs. It is recommended that where hierarchical aspects to the local naming scheme exist, they be mapped onto the hierarchical URL path syntax in order to allow the partial form to be used. It is also recommended that the conventional scheme below be used in all cases except for any scheme which encodes binary data as opposed to text, in which case a more compact encoding such as pure hexadecimal or base 64 might be more appropriate. For example, the conventional URI encoding method is used for mapping WAIS, FTP, Prospero and Gopher addresses in the URI specification. CONVENTIONAL URI ENCODING SCHEME Where the local naming scheme uses ASCII characters which are not allowed in the URI, these may be represented in the URL by a percent sign "%" immediately followed by two hexadecimal digits (0-9, A-F) giving the ISO Latin 1 code for that character. Character codes other than those allowed by the syntax shall not be used unencoded in a URI. REDUCED OR INCREASED SAFE CHARACTER SETS The same encoding method may be used for encoding characters whose use, although technically allowed in a URI, would be unwise due to problems of corruption by imperfect gateways or misrepresentation due to the use of variant character sets, or which would simply be awkward in a given environment. Because a % sign always indicates an encoded character, a URI may be made "safer" simply by encoding any characters considered unsafe, while leaving already encoded characters still encoded. Similarly, in cases where a larger set of characters is acceptable, % signs can be selectively and reversibly expanded. Before two URIs can be compared, it is therefore necessary to bring them to the same encoding level. However, the reserved characters mentioned above have a quite different significance when encoded, and so may NEVER be encoded and unencoded in this way. Berners-Lee [Page 8] RFC 1630 URIs in WWW June 1994 The percent sign intended as such must always be encoded, as its presence otherwise always indicates an encoding. Sequences which start with a percent sign but are not followed by two hexadecimal characters are reserved for future extension. (See Example 3.) Example 1 The URIs http://info.cern.ch/albert/bertram/marie-claude and http://info.cern.ch/albert/bertram/marie%2Dclaude are identical, as the %2D encodes a hyphen character. Example 2 The URIs http://info.cern.ch/albert/bertram/marie-claude and http://info.cern.ch/albert/bertram%2Fmarie-claude are NOT identical, as in the second case the encoded slash does not have hierarchical significance. Example 3 The URIs fxqn:/us/va/reston/cnri/ietf/24/asdf%*.fred and news:12345667123%asdghfh@info.cern.ch are illegal, as all % characters imply encodings, and there is no decoding defined for "%*" or "%as" in this recommendation. Partial (relative) form Within a object whose URI is well defined, the URI of another object may be given in abbreviated form, where parts of the two URIs are the same. This allows objects within a group to refer to each other Berners-Lee [Page 9] RFC 1630 URIs in WWW June 1994 without requiring the space for a complete reference, and it incidentally allows the group of objects to be moved without changing any references. It must be emphasized that when a reference is passed in anything other than a well controlled context, the full form must always be used. In the World-Wide Web applications, the context URI is that of the document or object containing a reference. In this case partial URIs can be generated in virtual objects or stored in real objects, without the need for dramatic change if the higher-order parts of a hierarchical naming system are modified. Apart from terseness, this gives greater robustness to practical systems, by enabling information hiding between system components. The partial form relies on a property of the URI syntax that certain characters ("/") and certain path elements ("..", ".") have a significance reserved for representing a hierarchical space, and must be recognized as such by both clients and servers. A partial form can be distinguished from an absolute form in that the latter must have a colon and that colon must occur before any slash characters. Systems not requiring partial forms should not use any unencoded slashes in their naming schemes. If they do, absolute URIs will still work, but confusion may result. (See note on Gopher below.) The rules for the use of a partial name relative to the URI of the context are: If the scheme parts are different, the whole absolute URI must be given. Otherwise, the scheme is omitted, and: If the partial URI starts with a non-zero number of consecutive slashes, then everything from the context URI up to (but not including) the first occurrence of exactly the same number of consecutive slashes which has no greater number of consecutive slashes anywhere to the right of it is taken to be the same and so prepended to the partial URL to form the full URL. Otherwise: The last part of the path of the context URI (anything following the rightmost slash) is removed, and the given partial URI appended in its place, and then: Within the result, all occurrences of "xxx/../" or "/." are recursively removed, where xxx, ".." and "." are complete path elements. Berners-Lee [Page 10] RFC 1630 URIs in WWW June 1994 Note: Trailing slashes If a path of the context locator ends in slash, partial URIs are treated differently to the URI with the same path but without a trailing slash. The trailing slash indicates a void segment of the path. Note: Gopher The gopher system does not have the concept of relative URIs, and the gopher community currently allows / as data characters in gopher URIs without escaping them to %2F. Relative forms may not in general be used for documents served by gopher servers. If they are used, then WWW software assumes, normally correctly, that in fact they do have hierarchical significance despite the specifications. The use of HTTP rather than gopher protocol is however recommended. Examples In the context of URI magic://a/b/c//d/e/f the partial URIs would expand as follows: g magic://a/b/c//d/e/g /g magic://a/g //g magic://g ../g magic://a/b/c//d/g g:h g:h and in the context of the URI magic://a/b/c//d/e/ the results would be exactly the same. Fragment-id This represents a part of, fragment of, or a sub-function within, an object. Its syntax and semantics are defined by the application responsible for the object, or the specification of the content type of the object. The only definition here is of the allowed characters by which it may be represented in a URL. Berners-Lee [Page 11] RFC 1630 URIs in WWW June 1994 Specific syntaxes for representing fragments in text documents by line and character range, or in graphics by coordinates, or in structured documents using ladders, are suitable for standardization but not defined here. The fragment-id follows the URL of the whole object from which it is separated by a hash sign (#). If the fragment-id is void, the hash sign may be omitted: A void fragment-id with or without the hash sign means that the URL refers to the whole object. While this hook is allowed for identification of fragments, the question of addressing of parts of objects, or of the grouping of objects and relationship between continued and containing objects, is not addressed by this document. Fragment identifiers do NOT address the question of objects which are different versions of a "living" object, nor of expressing the relationships between different versions and the living object. There is no implication that a fragment identifier refers to anything which can be extracted as an object in its own right. It may, for example, refer to an indivisible point within an object. Specific Schemes The mapping for URIs onto some existing standard and experimental protocols is outlined in the BNF syntax definition. Notes on particular protocols follow. These URIs are frequently referred to as URLs, though the exact definition of the term URL is still under discussion (March 1993). The schemes covered are: http Hypertext Transfer Protocol (examples) ftp File Transfer protocol gopher Gopher protocol mailto Electronic mail address news Usenet news telnet, rlogin and tn3270 Reference to interactive sessions wais Wide Area Information Servers file Local file access Berners-Lee [Page 12] RFC 1630 URIs in WWW June 1994 The following schemes are proposed as essential to the unification of the web with electronic mail, but not currently (to the author's knowledge) implemented: mid Message identifiers for electronic mail cid Content identifiers for MIME body part The schemes for X.500, network management database, and Whois++ have not been specified and may be the subject of further study. Schemes for Prospero, and restricted NNTP use are not currently implemented as far as the author is aware. The "urn" prefix is reserved for use in encoding a Uniform Resource Name when that has been developed by the IETF working group. New schemes may be registered at a later time. HTTP The HTTP protocol specifies that the path is handled transparently by those who handle URLs, except for the servers which de-reference them. The path is passed by the client to the server with any request, but is not otherwise understood by the client. The host details are not passed on to the client when the URL is an HTTP URL which refers to the server in question. In this case the string sent starts with the slash which follows the host details. However, when an HTTP server is being used as a gateway (or "proxy") then the entire URI, whether HTTP or some other scheme, is passed on the HTTP command line. The search part, if present, is sent as part of the HTTP command, and may in this respect be treated as part of the path. No fragmentid part of a WWW URI (the hash sign and following) is sent with the request. Spaces and control characters in URLs must be escaped for transmission in HTTP, as must other disallowed characters. EXAMPLES These examples are not part of the specification: they are provided as illustations only. The URI of the "welcome" page to a server is conventionally http://www.my.work.com/ As the rest of the URL (after the hostname an port) is opaque to the client, it shows great variety but the following are all fairly typical. Berners-Lee [Page 13] RFC 1630 URIs in WWW June 1994 http://www.my.uni.edu/info/matriculation/enroling.html http://info.my.org/AboutUs/Phonebook http://www.library.my.town.va.us/Catalogue/76523471236%2Fwen44--4.98 http://www.my.org/462F4F2D4241522A314159265358979323846 A URL for a server on a different port to 80 looks like http://info.cern.ch:8000/imaginary/test A reference to a particular part of a document may, including the fragment identifier, look like http://www.myu.edu/org/admin/people#andy in which case the string "#andy" is not sent to the server, but is retained by the client and used when the whole object had been retrieved. A search on a text database might look like http://info.my.org/AboutUs/Index/Phonebook?dobbins and on another database http://info.cern.ch/RDB/EMP?*%20where%20name%%3Ddobbins In all cases the client passes the path string to the server uninterpreted, and for the client to deduce anything from FTP The ftp: prefix indicates that the FTP protocol is used, as defined in STD 9, RFC 959 or any successor. The port number, if present, gives the port of the FTP server if not the FTP default. User name and password The syntax allows for the inclusion of a user name and even a password for those systems which do not use the anonymous FTP convention. The default, however, if no user or password is supplied, will be to use that convention, viz. that the user name is "anonymous" and the password the user's Internet-style mail address. Berners-Lee [Page 14] RFC 1630 URIs in WWW June 1994 Where possible, this mail address should correspond to a usable mail address for the user, and preferably give a DNS host name which resolves to the IP address of the client. Note that servers currently vary in their treatment of the anonymous password. Path The FTP protocol allows for a sequence of CWD commands (change working directory) and a TYPE command prior to service commands such as RETR (retrieve) or NLIST (etc.) which actually access a file. The arguments of any CWD commands are successive segment parts of the URL delimited by slash, and the final segment is suitable as the filename argument to the RETR command for retrieval or the directory argument to NLIST. For some file systems (Unix in particular), the "/" used to denote the hierarchical structure of the URL corresponds to the delimiter used to construct a file name hierarchy, and thus, the filename will look the same as the URL path. This does NOT mean that the URL is a Unix filename. Note: Retrieving subsequent URLs from the same host There is no common hierarchical model to the FTP protocol, so if a directory change command has been given, it is impossible in general to deduce what sequence should be given to navigate to another directory for a second retrieval, if the paths are different. The only reliable algorithm is to disconnect and reestablish the control connection. Data type The data content type of a file can only, in the general FTP case, be deduced from the name, normally the suffix of the name. This is not standardized. An alternative is for it to be transferred in information outside the URL. A suitable FTP transfer type (for example binary "I" or text "A") must in turn be deduced from the data content type. It is recommended that conventions for suffixes of public archives be established, but it is outside the scope of this standard. An FTP URL may optionally specify the FTP data transfer type by which an object is to be retrieved. Most of the methods correspond to the FTP "Data Types" ASCII and IMAGE for the retrieval of a document, as specified in FTP by the TYPE command. One method indicates directory access. Berners-Lee [Page 15] RFC 1630 URIs in WWW June 1994 The data type is specified by a suffix to the URL. Possible suffixes are: ;type = <type-code> Use FTP type as given to perform data transfer. / Use FTP directory list commands to read directory The type code is in the format defined in RFC 959 except that THE SPACE IS OMITTED FROM THE URL. Transfer Mode Stream Mode is always used. Gopher The gopher URL specifies the host and optionally the port to which the client should connect. This is followed by a slash and a single gopher type code. This type code is used by the client to determine how to interpret the server's reply and is is not for sending to server. The command string to be sent to the server immediately follows the gopher type character. It consists of the gopher selector string followed by any "Gopher plus" syntax, but always omitting the trainling CR LF pair. When the gopher command string contains characters (such a embedded CR LF and HT characters) not allowed in a URL, these are encoded using the conventional encoding. Note that some gopher selector strings begin with a copy of the gopher type character, in which case that character will occur twice consecutively. Also note that the gopher selector string may be an empty string since this is how gopher clients refer to the top-level directory on a gopher server. If the encoded command string (with trailing CR LF stripped) would be void then the gopher type character may be omiited and "1" (ASCII 31 hex) is assumed. Note that slash "/" in gopher selector strings may not correspond to a level in a hierarchical structure. Berners-Lee [Page 16] RFC 1630 URIs in WWW June 1994 Mailto This allows a URL to specify an RFC822 addr-spec mail address. Note that use of % , for example as used in forming a gatewayed mail address, requires conversion to %25 in a URL. News The news locators refer to either news group names or article message identifiers which must conform to the rules for a Message-Id of RFC 1036 (Horton 1987). A message identifier may be distinguished from a news group name by the presence of the commercial at "@" character. These rules imply that within an article, a reference to a news group or to another article will be a valid URL (in the partial form). A news URL may be dereferenced using NNTP (RFC 977, Kantor 1986) (The ARTICLE by message-id command ) or using any other protocol for the conveyance of usenet news articles, or by reference to a body of news articles already received. Note 1: Among URLs the "news" URLs are anomalous in that they are location-independent. They are unsuitable as URN candidates because the NNTP architecture relies on the expiry of articles and therefore a small number of articles being available at any time. When a news: URL is quoted, the assumption is that the reader will fetch the article or group from his or her local news host. News host names are NOT part of news URLs. Note 2: An outstanding problem is that the message identifier is insufficient to allow the retrieval of an expired article, as no algorithm exists for deriving an archive site and file name. The addition of the date and news group set to the article's URL would allow this if a directory existed of archive sites by news group. Suggested subject of study in conjunction with NNTP working group. Further extension possible may be to allow the naming of subject threads as addressable objects. Telnet, rlogin, tn3270 The use of URLs to represent interactive sessions is a convenient extension to their uses for objects. This allows access to information systems which only provide an interactive service, and no information server. As information within the service cannot be Berners-Lee [Page 17] RFC 1630 URIs in WWW June 1994 addressed individually or, in general, automatically retrieved, this is a less desirable, though currently common, solution. URN The "Universal Resource Name" is currently (March 1993) under development in the IETF. A requirements specification is in preparation. It currently looks as though it will be a short string suitable for encoding in URI syntax, for which case the "urn:" prefix is reserved. The URN shall be encoded precisely as defined in the (future) URN standard, except in that: If the official description of the URN syntax includes any constant wrapper characters, then they shall not be omitted from the URI encoding of the URN; If the URN has a hierarchical nature, then the slash delimiter shall be used in the URI encoding; If the URN has a hierarchical nature, the most significant part shall be encoded on the left in the URI encoding; Any characters with reserved meanings in the URI syntax shall be escape encoded These rules of course apply to any URI scheme. It is of course possible that the URN syntax will be chosen such that the URI encoding will be a 1-1 transcription. An example might be a name such as urn:/iana/dns/ch/cern/cn/techdoc/94/1642-3 but the reader should refer to the latest URN drafts or specifications. WAIS The current WAIS implementation public domain requires that a client know the "type" of a object prior to retrieval. This value is returned along with the internal object identifier in the search response. It has been encoded into the path part of the URL in order to make the URL sufficient for the retrieval of the object. Within the WAIS world, names do not of course need to be prefixed by "wais:" (by the partial form rules). Berners-Lee [Page 18] RFC 1630 URIs in WWW June 1994 The wpath of a WAIS URL consists of encoded fields of the WAIS identifier, in the same order as inthe WAIS identifier. For each field, the identifier field number is the digits before the equals sign, and the field contents follow, encoded in the conventional encoding, terminated by ";". file The other URI schemes (except nntp) share the property that they are equally valid at any geographical place. There is however a real practical requirement to be able to generate a URL for an object in a machine's local file system. The syntax is similar to the ftp syntax, but in this case the slash is used to donate boundaries between directory levels of a hierarchical file system is used. The "client" software converts the file URL into a file name in the local file name conventions. This allows local files to be treated just as network objects without any necessity to use a network server for access. This may be used for example for defining a user's "home" document in WWW. There is clearly a danger of confusion that a link made to a local file should be followed by someone on a different system, with unexpected and possibly harmful results. Therefore, the convention is that even a "file" URL is provided with a host part. This allows a client on another system to know that it cannot access the file system, or perhaps to use some other local mecahnism to access the file. The special value "localhost" is used in the host field to indicate that the filename should really be used on whatever host one is. This for example allows links to be made to files which are distribted on many machines, or to "your unix local password file" subject of course to consistency across the users of the data. A void host field is equivalent to "localhost". Message-Id For systems which include information transferred using mail protocols, there is a need to be able to make cross-references between different items of information, even though, by the nature of mail, those items are only available to a restricted set of people. Two schemes are defined. The first, "mid:", refers to the STD 11, RFC 822 Message-Id of a mail message. This Identifier is already used in RFC 822 in for example the References and In-Reply-to field. Berners-Lee [Page 19] RFC 1630 URIs in WWW June 1994 The rest of the URL after the "mid:" is the RFC822 msg-id with the constant <> wrapper removed, leaving an identifier whose format in fact happens to be the same as addr-spec format for mailboxes (though the semantics are different). The use of a "mid" URL implies access to a body of mail already received. If a message has been distributed using NNTP or other usenet protocols over the news system, then the "news:" form should be used. Content-Id The second scheme, "cid:", is similar to "mid:", but makes reference to a body part of a MIME message by the value of its content-id field. This allows, for example, a master document being the first part of a multipart/related MIME message to refer to component parts which are transferred in the same message. Note Beware however, that content identifiers are only required to be unique within the context of a given MIME message, and so the cid: URL is only meaningful with the context the same MIME message. For a reference outside the message, it would need to be appended to the message-id of the whole message. A syntax for this has not been defined. Schemes for Further Study X500 The mapping of x500 names onto URLs is not defined here. A decision is required as to whether "distinguished names" or "user friendly names" (ufn), or both, should be allowed. If any punctuation conversions are needed from the adopted x500 representation (such as the use of slashes between parts of a ufn) they must be defined. This is a subject for study. WHOIS This prefix describes the access using the "whois++" scheme in the process of definition. The host name part is the same as for other IP based schemes. The path part can be either a whois handle for a whois object, or it can be a valid whois query string. This is a subject for further study. Berners-Lee [Page 20] RFC 1630 URIs in WWW June 1994 NETWORK MANAGEMENT DATABASE This is a subject for study. NNTP This is an alternative form of reference for news articles, specifically to be used with NNTP servers, and particularly those incomplete server implementations which do not allow retrieval by message identifier. In all other cases the "news" scheme should be used. The news server name, newsgroup name, and index number of an article within the newsgroup on that particular server are given. The NNTP protocol must be used. Note 1. This form of URL is not of global accessability, as typically NNTP servers only allow access from local clients. Note that the article numbers within groups vary from server to server. This form or URL should not be quoted outside this local area. It should not be used within news articles for wider circulation than the one server. This is a local identifier for a resource which is often available globally, and so is not recommended except in the case in which incomplete NNTP implementations on the local server force its adoption. Prospero The Prospero (Neuman, 1991) directory service is used to resolve the URL yielding an access method for the object (which can then itself be represented as a URL if translated). The host part contains a host name or internet address. The port part is optional. The path part contains a host specific object name and an optional version number. If present, the version number is separated from the host specific object name by the characters "%00" (percent zero zero), this being an escaped string terminator (null). External Prospero links are represented as URLs of the underlying access method and are not represented as Prospero URLs. Registration of naming schemes A new naming scheme may be introduced by defining a mapping onto a conforming URL syntax, using a new prefix. Experimental prefixes may be used by mutual agreement between parties, and must start with the Berners-Lee [Page 21] RFC 1630 URIs in WWW June 1994 characters "x-". The scheme name "urn:" is reserved for the work in progress on a scheme for more persistent names. It is proposed that the Internet Assigned Numbers Authority (IANA) perform the function of registration of new schemes. Any submission of a new URI scheme must include a definition of an algorithm for the retrieval of any object within that scheme. The algorithm must take the URI and produce either a set of URL(s) which will lead to the desired object, or the object itself, in a well-defined or determinable format. It is recommended that those proposing a new scheme demonstrate its utility and operability by the provision of a gateway which will provide images of objects in the new scheme for clients using an existing protocol. If the new scheme is not a locator scheme, then the properties of names in the new space should be clearly defined. It is likewise recommended that, where a protocol allows for retrieval by URL, that the client software have provision for being configured to use specific gateway locators for indirect access through new naming schemes. BNF of Generic URI Syntax This is a BNF-like description of the URI syntax. at the level at which specific schemes are not considered. A vertical line "|" indicates alternatives, and [brackets] indicate optional parts. Spaces are represented by the word "space", and the vertical line character by "vline". Single letters stand for single letters. All words of more than one letter below are entities described somewhere in this description. The "generic" production gives a higher level parsing of the same URIs as the other productions. The "national" and "punctuation" characters do not appear in any productions and therefore may not appear in URIs. fragmentaddress uri [ # fragmentid ] uri scheme : path [ ? search ] scheme ialpha path void | xpalphas [ / path ] search xalphas [ + search ] fragmentid xalphas Berners-Lee [Page 22] RFC 1630 URIs in WWW June 1994 xalpha alpha | digit | safe | extra | escape xalphas xalpha [ xalphas ] xpalpha xalpha | + xpalphas xpalpha [ xpalpha ] ialpha alpha [ xalphas ] alpha a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z digit 0 |1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 safe $ | - | _ | @ | . | & extra ! | * | " | ' | ( | ) | , reserved = | ; | / | # | ? | : | space escape % hex hex hex digit | a | b | c | d | e | f | A | B | C | D | E | F national { | } | vline | [ | ] | \ | ^ | ~ punctuation < | > void (end of URI BNF) BNF for specific URL schemes This is a BNF-like description of the Uniform Resource Locator syntax. A vertical line "|" indicates alternatives, and [brackets] indicate optional parts. Spaces are represented by the word "space", and the vertical line character by "vline". Single letters stand for single letters. All words of more than one letter below are entities described somewhere in this description. Berners-Lee [Page 23] RFC 1630 URIs in WWW June 1994 The current IETF URI Working Group preference is for the prefixedurl production. (Nov 1993. July 93: url). The "national" and "punctuation" characters do not appear in any productions and therefore may not appear in URLs. The "afsaddress" is left in as historical note, but is not a url production. prefixedurl u r l : url url httpaddress | ftpaddress | newsaddress | nntpaddress | prosperoaddress | telnetaddress | gopheraddress | waisaddress | mailtoaddress | midaddress | cidaddress scheme ialpha httpaddress h t t p : / / hostport [ / path ] [ ? search ] ftpaddress f t p : / / login / path [ ftptype ] afsaddress a f s : / / cellname / path newsaddress n e w s : groupart nntpaddress n n t p : group / digits midaddress m i d : addr-spec cidaddress c i d : content-identifier mailtoaddress m a i l t o : xalphas @ hostname waisaddress waisindex | waisdoc waisindex w a i s : / / hostport / database [ ? search ] waisdoc w a i s : / / hostport / database / wtype / wpath wpath digits = path ; [ wpath ] groupart * | group | article group ialpha [ . group ] Berners-Lee [Page 24] RFC 1630 URIs in WWW June 1994 article xalphas @ host database xalphas wtype xalphas prosperoaddress prosperolink prosperolink p r o s p e r o : / / hostport / hsoname [ % 0 0 version [ attributes ] ] hsoname path version digits attributes attribute [ attributes ] attribute alphanums telnetaddress t e l n e t : / / login gopheraddress g o p h e r : / / hostport [/ gtype [ gcommand ] ] login [ user [ : password ] @ ] hostport hostport host [ : port ] host hostname | hostnumber ftptype A formcode | E formcode | I | L digits formcode N | T | C cellname hostname hostname ialpha [ . hostname ] hostnumber digits . digits . digits . digits port digits gcommand path path void | segment [ / path ] segment xpalphas Berners-Lee [Page 25] RFC 1630 URIs in WWW June 1994 search xalphas [ + search ] user alphanum2 [ user ] password alphanum2 [ password ] fragmentid xalphas gtype xalpha alphanum2 alpha | digit | - | _ | . | + xalpha alpha | digit | safe | extra | escape xalphas xalpha [ xalphas ] xpalpha xalpha | + xpalphas xpalpha [ xpalphas ] ialpha alpha [ xalphas ] alpha a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z digit 0 |1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 safe $ | - | _ | @ | . | & | + | - extra ! | * | " | ' | ( | ) | , reserved = | ; | / | # | ? | : | space escape % hex hex hex digit | a | b | c | d | e | f | A | B | C | D | E | F national { | } | vline | [ | ] | \ | ^ | ~ punctuation < | > digits digit [ digits ] Berners-Lee [Page 26] RFC 1630 URIs in WWW June 1994 alphanum alpha | digit alphanums alphanum [ alphanums ] void (end of URL BNF) References Alberti, R., et.al., "Notes on the Internet Gopher Protocol", University of Minnesota, December 1991, <ftp://boombox.micro.umn.edu/pub/gopher/ gopher_protocol>. See also <gopher://gopher.micro.umn.edu/00/Information About Gopher/About Gopher> Berners-Lee, T., "Hypertext Transfer Protocol (HTTP)", CERN, December 1991, as updated from time to time, <ftp://info.cern.ch/pub/www/doc/http-spec.txt> Crocker, D., "Standard for ARPA Internet Text Messages" STD 11, RFC 822, UDel, August 1982. Davis, F, et al., "WAIS Interface Protocol: Prototype Functional Specification", Thinking Machines Corporation, April 23, 1990. <ftp://quake.think.com/pub/wa is/doc/protspec.txt> International Standards Organization, Information and Documentation - Search and Retrieve Application Protocol Specification for open Systems Interconnection, ISO-10163. Horton, M., and R. Adams, "Standard for Interchange of USENET messages", RFC 1036, AT&T Bell Laboratories, Center for Seismic Studies, December 1987. Huitema, C., "Naming: strategies and techniques", Computer Networks and ISDN Systems 23 (1991) 107-110. Kahle, B., "Document Identifiers, or International Standard Book Numbers for the Electronic Age", <ftp: //quake.think.com/pub/wais/doc/doc-ids.txt> Kantor, B., and P. Lapsley, Kantor, B., and P. Lapsley, "Network News Transfer Protocol", RFC 977, UC San Diego & UC Berkeley, February 1986. <ftp://ds.internic.net/rfc/rfc977.txt> Kunze, J., "Requirements for URLs", Work in Progress. Berners-Lee [Page 27] RFC 1630 URIs in WWW June 1994 Lynch, C., Coalition for Networked Information: "Workshop on ID and Reference Structures for Networked Information", November 1991. See <wais://quake.think.com/wais-discussion-archives?lynch> Mockapetris, P., "Domain Names - Concepts and Facilities", STD 13, RFC 1034, USC/Information Sciences Institute, November 1987, <ftp://ds.internic.net/rfc/rfc1034.txt> Neuman, B. Clifford, "Prospero: A Tool for Organizing Internet Resources", Electronic Networking: Research, Applications and Policy, Vol 1 No 2, Meckler Westport CT USA, 1992. See also <ftp://prospero.isi.edu/pub/prospero/oir.ps> Postel, J., and J. Reynolds, "File Transfer Protocol (FTP)", STD 9, RFC 959, USC/Information Sciences Institute, October 1985. <ftp://ds.internic.net/rfc/rfc959.txt> Sollins, K., and L. Masinter, "Requiremnets for URNs", Work in Progress. Yeong, W., "Towards Networked Information Retrieval", Technical report 91-06-25-01, June 1991, Performance Systems International, Inc. <ftp://uu.psi.com/wp/nir.txt> Yeong, W., "Representing Public Archives in the Directory", Work in Progress, November 1991, now expired. Security Considerations Security issues are not discussed in this memo. Author's Address Tim Berners-Lee World-Wide Web project CERN 1211 Geneva 23, Switzerland Phone: +41 (22)767 3755 Fax: +41 (22)767 7155 EMail: timbl@info.cern.ch Berners-Lee [Page 28] |
Added doc/rfc1945.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 | Network Working Group T. Berners-Lee Request for Comments: 1945 MIT/LCS Category: Informational R. Fielding UC Irvine H. Frystyk MIT/LCS May 1996 Hypertext Transfer Protocol -- HTTP/1.0 Status of This Memo This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind. Distribution of this memo is unlimited. IESG Note: The IESG has concerns about this protocol, and expects this document to be replaced relatively soon by a standards track document. Abstract The Hypertext Transfer Protocol (HTTP) is an application-level protocol with the lightness and speed necessary for distributed, collaborative, hypermedia information systems. It is a generic, stateless, object-oriented protocol which can be used for many tasks, such as name servers and distributed object management systems, through extension of its request methods (commands). A feature of HTTP is the typing of data representation, allowing systems to be built independently of the data being transferred. HTTP has been in use by the World-Wide Web global information initiative since 1990. This specification reflects common usage of the protocol referred to as "HTTP/1.0". Table of Contents 1. Introduction .............................................. 4 1.1 Purpose .............................................. 4 1.2 Terminology .......................................... 4 1.3 Overall Operation .................................... 6 1.4 HTTP and MIME ........................................ 8 2. Notational Conventions and Generic Grammar ................ 8 2.1 Augmented BNF ........................................ 8 2.2 Basic Rules .......................................... 10 3. Protocol Parameters ....................................... 12 Berners-Lee, et al Informational [Page 1] RFC 1945 HTTP/1.0 May 1996 3.1 HTTP Version ......................................... 12 3.2 Uniform Resource Identifiers ......................... 14 3.2.1 General Syntax ................................ 14 3.2.2 http URL ...................................... 15 3.3 Date/Time Formats .................................... 15 3.4 Character Sets ....................................... 17 3.5 Content Codings ...................................... 18 3.6 Media Types .......................................... 19 3.6.1 Canonicalization and Text Defaults ............ 19 3.6.2 Multipart Types ............................... 20 3.7 Product Tokens ....................................... 20 4. HTTP Message .............................................. 21 4.1 Message Types ........................................ 21 4.2 Message Headers ...................................... 22 4.3 General Header Fields ................................ 23 5. Request ................................................... 23 5.1 Request-Line ......................................... 23 5.1.1 Method ........................................ 24 5.1.2 Request-URI ................................... 24 5.2 Request Header Fields ................................ 25 6. Response .................................................. 25 6.1 Status-Line .......................................... 26 6.1.1 Status Code and Reason Phrase ................. 26 6.2 Response Header Fields ............................... 28 7. Entity .................................................... 28 7.1 Entity Header Fields ................................. 29 7.2 Entity Body .......................................... 29 7.2.1 Type .......................................... 29 7.2.2 Length ........................................ 30 8. Method Definitions ........................................ 30 8.1 GET .................................................. 31 8.2 HEAD ................................................. 31 8.3 POST ................................................. 31 9. Status Code Definitions ................................... 32 9.1 Informational 1xx .................................... 32 9.2 Successful 2xx ....................................... 32 9.3 Redirection 3xx ...................................... 34 9.4 Client Error 4xx ..................................... 35 9.5 Server Error 5xx ..................................... 37 10. Header Field Definitions .................................. 37 10.1 Allow ............................................... 38 10.2 Authorization ....................................... 38 10.3 Content-Encoding .................................... 39 10.4 Content-Length ...................................... 39 10.5 Content-Type ........................................ 40 10.6 Date ................................................ 40 10.7 Expires ............................................. 41 10.8 From ................................................ 42 Berners-Lee, et al Informational [Page 2] RFC 1945 HTTP/1.0 May 1996 10.9 If-Modified-Since ................................... 42 10.10 Last-Modified ....................................... 43 10.11 Location ............................................ 44 10.12 Pragma .............................................. 44 10.13 Referer ............................................. 44 10.14 Server .............................................. 45 10.15 User-Agent .......................................... 46 10.16 WWW-Authenticate .................................... 46 11. Access Authentication ..................................... 47 11.1 Basic Authentication Scheme ......................... 48 12. Security Considerations ................................... 49 12.1 Authentication of Clients ........................... 49 12.2 Safe Methods ........................................ 49 12.3 Abuse of Server Log Information ..................... 50 12.4 Transfer of Sensitive Information ................... 50 12.5 Attacks Based On File and Path Names ................ 51 13. Acknowledgments ........................................... 51 14. References ................................................ 52 15. Authors' Addresses ........................................ 54 Appendix A. Internet Media Type message/http ................ 55 Appendix B. Tolerant Applications ........................... 55 Appendix C. Relationship to MIME ............................ 56 C.1 Conversion to Canonical Form ......................... 56 C.2 Conversion of Date Formats ........................... 57 C.3 Introduction of Content-Encoding ..................... 57 C.4 No Content-Transfer-Encoding ......................... 57 C.5 HTTP Header Fields in Multipart Body-Parts ........... 57 Appendix D. Additional Features ............................. 57 D.1 Additional Request Methods ........................... 58 D.1.1 PUT ........................................... 58 D.1.2 DELETE ........................................ 58 D.1.3 LINK .......................................... 58 D.1.4 UNLINK ........................................ 58 D.2 Additional Header Field Definitions .................. 58 D.2.1 Accept ........................................ 58 D.2.2 Accept-Charset ................................ 59 D.2.3 Accept-Encoding ............................... 59 D.2.4 Accept-Language ............................... 59 D.2.5 Content-Language .............................. 59 D.2.6 Link .......................................... 59 D.2.7 MIME-Version .................................. 59 D.2.8 Retry-After ................................... 60 D.2.9 Title ......................................... 60 D.2.10 URI ........................................... 60 Berners-Lee, et al Informational [Page 3] RFC 1945 HTTP/1.0 May 1996 1. Introduction 1.1 Purpose The Hypertext Transfer Protocol (HTTP) is an application-level protocol with the lightness and speed necessary for distributed, collaborative, hypermedia information systems. HTTP has been in use by the World-Wide Web global information initiative since 1990. This specification reflects common usage of the protocol referred too as "HTTP/1.0". This specification describes the features that seem to be consistently implemented in most HTTP/1.0 clients and servers. The specification is split into two sections. Those features of HTTP for which implementations are usually consistent are described in the main body of this document. Those features which have few or inconsistent implementations are listed in Appendix D. Practical information systems require more functionality than simple retrieval, including search, front-end update, and annotation. HTTP allows an open-ended set of methods to be used to indicate the purpose of a request. It builds on the discipline of reference provided by the Uniform Resource Identifier (URI) [2], as a location (URL) [4] or name (URN) [16], for indicating the resource on which a method is to be applied. Messages are passed in a format similar to that used by Internet Mail [7] and the Multipurpose Internet Mail Extensions (MIME) [5]. HTTP is also used as a generic protocol for communication between user agents and proxies/gateways to other Internet protocols, such as SMTP [12], NNTP [11], FTP [14], Gopher [1], and WAIS [8], allowing basic hypermedia access to resources available from diverse applications and simplifying the implementation of user agents. 1.2 Terminology This specification uses a number of terms to refer to the roles played by participants in, and objects of, the HTTP communication. connection A transport layer virtual circuit established between two application programs for the purpose of communication. message The basic unit of HTTP communication, consisting of a structured sequence of octets matching the syntax defined in Section 4 and transmitted via the connection. Berners-Lee, et al Informational [Page 4] RFC 1945 HTTP/1.0 May 1996 request An HTTP request message (as defined in Section 5). response An HTTP response message (as defined in Section 6). resource A network data object or service which can be identified by a URI (Section 3.2). entity A particular representation or rendition of a data resource, or reply from a service resource, that may be enclosed within a request or response message. An entity consists of metainformation in the form of entity headers and content in the form of an entity body. client An application program that establishes connections for the purpose of sending requests. user agent The client which initiates a request. These are often browsers, editors, spiders (web-traversing robots), or other end user tools. server An application program that accepts connections in order to service requests by sending back responses. origin server The server on which a given resource resides or is to be created. proxy An intermediary program which acts as both a server and a client for the purpose of making requests on behalf of other clients. Requests are serviced internally or by passing them, with possible translation, on to other servers. A proxy must interpret and, if necessary, rewrite a request message before Berners-Lee, et al Informational [Page 5] RFC 1945 HTTP/1.0 May 1996 forwarding it. Proxies are often used as client-side portals through network firewalls and as helper applications for handling requests via protocols not implemented by the user agent. gateway A server which acts as an intermediary for some other server. Unlike a proxy, a gateway receives requests as if it were the origin server for the requested resource; the requesting client may not be aware that it is communicating with a gateway. Gateways are often used as server-side portals through network firewalls and as protocol translators for access to resources stored on non-HTTP systems. tunnel A tunnel is an intermediary program which is acting as a blind relay between two connections. Once active, a tunnel is not considered a party to the HTTP communication, though the tunnel may have been initiated by an HTTP request. The tunnel ceases to exist when both ends of the relayed connections are closed. Tunnels are used when a portal is necessary and the intermediary cannot, or should not, interpret the relayed communication. cache A program's local store of response messages and the subsystem that controls its message storage, retrieval, and deletion. A cache stores cachable responses in order to reduce the response time and network bandwidth consumption on future, equivalent requests. Any client or server may include a cache, though a cache cannot be used by a server while it is acting as a tunnel. Any given program may be capable of being both a client and a server; our use of these terms refers only to the role being performed by the program for a particular connection, rather than to the program's capabilities in general. Likewise, any server may act as an origin server, proxy, gateway, or tunnel, switching behavior based on the nature of each request. 1.3 Overall Operation The HTTP protocol is based on a request/response paradigm. A client establishes a connection with a server and sends a request to the server in the form of a request method, URI, and protocol version, followed by a MIME-like message containing request modifiers, client information, and possible body content. The server responds with a Berners-Lee, et al Informational [Page 6] RFC 1945 HTTP/1.0 May 1996 status line, including the message's protocol version and a success or error code, followed by a MIME-like message containing server information, entity metainformation, and possible body content. Most HTTP communication is initiated by a user agent and consists of a request to be applied to a resource on some origin server. In the simplest case, this may be accomplished via a single connection (v) between the user agent (UA) and the origin server (O). request chain ------------------------> UA -------------------v------------------- O <----------------------- response chain A more complicated situation occurs when one or more intermediaries are present in the request/response chain. There are three common forms of intermediary: proxy, gateway, and tunnel. A proxy is a forwarding agent, receiving requests for a URI in its absolute form, rewriting all or parts of the message, and forwarding the reformatted request toward the server identified by the URI. A gateway is a receiving agent, acting as a layer above some other server(s) and, if necessary, translating the requests to the underlying server's protocol. A tunnel acts as a relay point between two connections without changing the messages; tunnels are used when the communication needs to pass through an intermediary (such as a firewall) even when the intermediary cannot understand the contents of the messages. request chain --------------------------------------> UA -----v----- A -----v----- B -----v----- C -----v----- O <------------------------------------- response chain The figure above shows three intermediaries (A, B, and C) between the user agent and origin server. A request or response message that travels the whole chain must pass through four separate connections. This distinction is important because some HTTP communication options may apply only to the connection with the nearest, non-tunnel neighbor, only to the end-points of the chain, or to all connections along the chain. Although the diagram is linear, each participant may be engaged in multiple, simultaneous communications. For example, B may be receiving requests from many clients other than A, and/or forwarding requests to servers other than C, at the same time that it is handling A's request. Any party to the communication which is not acting as a tunnel may employ an internal cache for handling requests. The effect of a cache is that the request/response chain is shortened if one of the participants along the chain has a cached response applicable to that request. The following illustrates the resulting chain if B has a Berners-Lee, et al Informational [Page 7] RFC 1945 HTTP/1.0 May 1996 cached copy of an earlier response from O (via C) for a request which has not been cached by UA or A. request chain ----------> UA -----v----- A -----v----- B - - - - - - C - - - - - - O <--------- response chain Not all responses are cachable, and some requests may contain modifiers which place special requirements on cache behavior. Some HTTP/1.0 applications use heuristics to describe what is or is not a "cachable" response, but these rules are not standardized. On the Internet, HTTP communication generally takes place over TCP/IP connections. The default port is TCP 80 [15], but other ports can be used. This does not preclude HTTP from being implemented on top of any other protocol on the Internet, or on other networks. HTTP only presumes a reliable transport; any protocol that provides such guarantees can be used, and the mapping of the HTTP/1.0 request and response structures onto the transport data units of the protocol in question is outside the scope of this specification. Except for experimental applications, current practice requires that the connection be established by the client prior to each request and closed by the server after sending the response. Both clients and servers should be aware that either party may close the connection prematurely, due to user action, automated time-out, or program failure, and should handle such closing in a predictable fashion. In any case, the closing of the connection by either or both parties always terminates the current request, regardless of its status. 1.4 HTTP and MIME HTTP/1.0 uses many of the constructs defined for MIME, as defined in RFC 1521 [5]. Appendix C describes the ways in which the context of HTTP allows for different use of Internet Media Types than is typically found in Internet mail, and gives the rationale for those differences. 2. Notational Conventions and Generic Grammar 2.1 Augmented BNF All of the mechanisms specified in this document are described in both prose and an augmented Backus-Naur Form (BNF) similar to that used by RFC 822 [7]. Implementors will need to be familiar with the notation in order to understand this specification. The augmented BNF includes the following constructs: Berners-Lee, et al Informational [Page 8] RFC 1945 HTTP/1.0 May 1996 name = definition The name of a rule is simply the name itself (without any enclosing "<" and ">") and is separated from its definition by the equal character "=". Whitespace is only significant in that indentation of continuation lines is used to indicate a rule definition that spans more than one line. Certain basic rules are in uppercase, such as SP, LWS, HT, CRLF, DIGIT, ALPHA, etc. Angle brackets are used within definitions whenever their presence will facilitate discerning the use of rule names. "literal" Quotation marks surround literal text. Unless stated otherwise, the text is case-insensitive. rule1 | rule2 Elements separated by a bar ("I") are alternatives, e.g., "yes | no" will accept yes or no. (rule1 rule2) Elements enclosed in parentheses are treated as a single element. Thus, "(elem (foo | bar) elem)" allows the token sequences "elem foo elem" and "elem bar elem". *rule The character "*" preceding an element indicates repetition. The full form is "<n>*<m>element" indicating at least <n> and at most <m> occurrences of element. Default values are 0 and infinity so that "*(element)" allows any number, including zero; "1*element" requires at least one; and "1*2element" allows one or two. [rule] Square brackets enclose optional elements; "[foo bar]" is equivalent to "*1(foo bar)". N rule Specific repetition: "<n>(element)" is equivalent to "<n>*<n>(element)"; that is, exactly <n> occurrences of (element). Thus 2DIGIT is a 2-digit number, and 3ALPHA is a string of three alphabetic characters. Berners-Lee, et al Informational [Page 9] RFC 1945 HTTP/1.0 May 1996 #rule A construct "#" is defined, similar to "*", for defining lists of elements. The full form is "<n>#<m>element" indicating at least <n> and at most <m> elements, each separated by one or more commas (",") and optional linear whitespace (LWS). This makes the usual form of lists very easy; a rule such as "( *LWS element *( *LWS "," *LWS element ))" can be shown as "1#element". Wherever this construct is used, null elements are allowed, but do not contribute to the count of elements present. That is, "(element), , (element)" is permitted, but counts as only two elements. Therefore, where at least one element is required, at least one non-null element must be present. Default values are 0 and infinity so that "#(element)" allows any number, including zero; "1#element" requires at least one; and "1#2element" allows one or two. ; comment A semi-colon, set off some distance to the right of rule text, starts a comment that continues to the end of line. This is a simple way of including useful notes in parallel with the specifications. implied *LWS The grammar described by this specification is word-based. Except where noted otherwise, linear whitespace (LWS) can be included between any two adjacent words (token or quoted-string), and between adjacent tokens and delimiters (tspecials), without changing the interpretation of a field. At least one delimiter (tspecials) must exist between any two tokens, since they would otherwise be interpreted as a single token. However, applications should attempt to follow "common form" when generating HTTP constructs, since there exist some implementations that fail to accept anything beyond the common forms. 2.2 Basic Rules The following rules are used throughout this specification to describe basic parsing constructs. The US-ASCII coded character set is defined by [17]. OCTET = <any 8-bit sequence of data> CHAR = <any US-ASCII character (octets 0 - 127)> UPALPHA = <any US-ASCII uppercase letter "A".."Z"> LOALPHA = <any US-ASCII lowercase letter "a".."z"> Berners-Lee, et al Informational [Page 10] RFC 1945 HTTP/1.0 May 1996 ALPHA = UPALPHA | LOALPHA DIGIT = <any US-ASCII digit "0".."9"> CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)> CR = <US-ASCII CR, carriage return (13)> LF = <US-ASCII LF, linefeed (10)> SP = <US-ASCII SP, space (32)> HT = <US-ASCII HT, horizontal-tab (9)> <"> = <US-ASCII double-quote mark (34)> HTTP/1.0 defines the octet sequence CR LF as the end-of-line marker for all protocol elements except the Entity-Body (see Appendix B for tolerant applications). The end-of-line marker within an Entity-Body is defined by its associated media type, as described in Section 3.6. CRLF = CR LF HTTP/1.0 headers may be folded onto multiple lines if each continuation line begins with a space or horizontal tab. All linear whitespace, including folding, has the same semantics as SP. LWS = [CRLF] 1*( SP | HT ) However, folding of header lines is not expected by some applications, and should not be generated by HTTP/1.0 applications. The TEXT rule is only used for descriptive field contents and values that are not intended to be interpreted by the message parser. Words of *TEXT may contain octets from character sets other than US-ASCII. TEXT = <any OCTET except CTLs, but including LWS> Recipients of header field TEXT containing octets outside the US- ASCII character set may assume that they represent ISO-8859-1 characters. Hexadecimal numeric characters are used in several protocol elements. HEX = "A" | "B" | "C" | "D" | "E" | "F" | "a" | "b" | "c" | "d" | "e" | "f" | DIGIT Many HTTP/1.0 header field values consist of words separated by LWS or special characters. These special characters must be in a quoted string to be used within a parameter value. word = token | quoted-string Berners-Lee, et al Informational [Page 11] RFC 1945 HTTP/1.0 May 1996 token = 1*<any CHAR except CTLs or tspecials> tspecials = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT Comments may be included in some HTTP header fields by surrounding the comment text with parentheses. Comments are only allowed in fields containing "comment" as part of their field value definition. In all other fields, parentheses are considered part of the field value. comment = "(" *( ctext | comment ) ")" ctext = <any TEXT excluding "(" and ")"> A string of text is parsed as a single word if it is quoted using double-quote marks. quoted-string = ( <"> *(qdtext) <"> ) qdtext = <any CHAR except <"> and CTLs, but including LWS> Single-character quoting using the backslash ("\") character is not permitted in HTTP/1.0. 3. Protocol Parameters 3.1 HTTP Version HTTP uses a "<major>.<minor>" numbering scheme to indicate versions of the protocol. The protocol versioning policy is intended to allow the sender to indicate the format of a message and its capacity for understanding further HTTP communication, rather than the features obtained via that communication. No change is made to the version number for the addition of message components which do not affect communication behavior or which only add to extensible field values. The <minor> number is incremented when the changes made to the protocol add features which do not change the general message parsing algorithm, but which may add to the message semantics and imply additional capabilities of the sender. The <major> number is incremented when the format of a message within the protocol is changed. The version of an HTTP message is indicated by an HTTP-Version field in the first line of the message. If the protocol version is not specified, the recipient must assume that the message is in the Berners-Lee, et al Informational [Page 12] RFC 1945 HTTP/1.0 May 1996 simple HTTP/0.9 format. HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT Note that the major and minor numbers should be treated as separate integers and that each may be incremented higher than a single digit. Thus, HTTP/2.4 is a lower version than HTTP/2.13, which in turn is lower than HTTP/12.3. Leading zeros should be ignored by recipients and never generated by senders. This document defines both the 0.9 and 1.0 versions of the HTTP protocol. Applications sending Full-Request or Full-Response messages, as defined by this specification, must include an HTTP- Version of "HTTP/1.0". HTTP/1.0 servers must: o recognize the format of the Request-Line for HTTP/0.9 and HTTP/1.0 requests; o understand any valid request in the format of HTTP/0.9 or HTTP/1.0; o respond appropriately with a message in the same protocol version used by the client. HTTP/1.0 clients must: o recognize the format of the Status-Line for HTTP/1.0 responses; o understand any valid response in the format of HTTP/0.9 or HTTP/1.0. Proxy and gateway applications must be careful in forwarding requests that are received in a format different than that of the application's native HTTP version. Since the protocol version indicates the protocol capability of the sender, a proxy/gateway must never send a message with a version indicator which is greater than its native version; if a higher version request is received, the proxy/gateway must either downgrade the request version or respond with an error. Requests with a version lower than that of the application's native format may be upgraded before being forwarded; the proxy/gateway's response to that request must follow the server requirements listed above. Berners-Lee, et al Informational [Page 13] RFC 1945 HTTP/1.0 May 1996 3.2 Uniform Resource Identifiers URIs have been known by many names: WWW addresses, Universal Document Identifiers, Universal Resource Identifiers [2], and finally the combination of Uniform Resource Locators (URL) [4] and Names (URN) [16]. As far as HTTP is concerned, Uniform Resource Identifiers are simply formatted strings which identify--via name, location, or any other characteristic--a network resource. 3.2.1 General Syntax URIs in HTTP can be represented in absolute form or relative to some known base URI [9], depending upon the context of their use. The two forms are differentiated by the fact that absolute URIs always begin with a scheme name followed by a colon. URI = ( absoluteURI | relativeURI ) [ "#" fragment ] absoluteURI = scheme ":" *( uchar | reserved ) relativeURI = net_path | abs_path | rel_path net_path = "//" net_loc [ abs_path ] abs_path = "/" rel_path rel_path = [ path ] [ ";" params ] [ "?" query ] path = fsegment *( "/" segment ) fsegment = 1*pchar segment = *pchar params = param *( ";" param ) param = *( pchar | "/" ) scheme = 1*( ALPHA | DIGIT | "+" | "-" | "." ) net_loc = *( pchar | ";" | "?" ) query = *( uchar | reserved ) fragment = *( uchar | reserved ) pchar = uchar | ":" | "@" | "&" | "=" | "+" uchar = unreserved | escape unreserved = ALPHA | DIGIT | safe | extra | national escape = "%" HEX HEX reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" extra = "!" | "*" | "'" | "(" | ")" | "," safe = "$" | "-" | "_" | "." unsafe = CTL | SP | <"> | "#" | "%" | "<" | ">" national = <any OCTET excluding ALPHA, DIGIT, Berners-Lee, et al Informational [Page 14] RFC 1945 HTTP/1.0 May 1996 reserved, extra, safe, and unsafe> For definitive information on URL syntax and semantics, see RFC 1738 [4] and RFC 1808 [9]. The BNF above includes national characters not allowed in valid URLs as specified by RFC 1738, since HTTP servers are not restricted in the set of unreserved characters allowed to represent the rel_path part of addresses, and HTTP proxies may receive requests for URIs not defined by RFC 1738. 3.2.2 http URL The "http" scheme is used to locate network resources via the HTTP protocol. This section defines the scheme-specific syntax and semantics for http URLs. http_URL = "http:" "//" host [ ":" port ] [ abs_path ] host = <A legal Internet host domain name or IP address (in dotted-decimal form), as defined by Section 2.1 of RFC 1123> port = *DIGIT If the port is empty or not given, port 80 is assumed. The semantics are that the identified resource is located at the server listening for TCP connections on that port of that host, and the Request-URI for the resource is abs_path. If the abs_path is not present in the URL, it must be given as "/" when used as a Request-URI (Section 5.1.2). Note: Although the HTTP protocol is independent of the transport layer protocol, the http URL only identifies resources by their TCP location, and thus non-TCP resources must be identified by some other URI scheme. The canonical form for "http" URLs is obtained by converting any UPALPHA characters in host to their LOALPHA equivalent (hostnames are case-insensitive), eliding the [ ":" port ] if the port is 80, and replacing an empty abs_path with "/". 3.3 Date/Time Formats HTTP/1.0 applications have historically allowed three different formats for the representation of date/time stamps: Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format Berners-Lee, et al Informational [Page 15] RFC 1945 HTTP/1.0 May 1996 The first format is preferred as an Internet standard and represents a fixed-length subset of that defined by RFC 1123 [6] (an update to RFC 822 [7]). The second format is in common use, but is based on the obsolete RFC 850 [10] date format and lacks a four-digit year. HTTP/1.0 clients and servers that parse the date value should accept all three formats, though they must never generate the third (asctime) format. Note: Recipients of date values are encouraged to be robust in accepting date values that may have been generated by non-HTTP applications, as is sometimes the case when retrieving or posting messages via proxies/gateways to SMTP or NNTP. All HTTP/1.0 date/time stamps must be represented in Universal Time (UT), also known as Greenwich Mean Time (GMT), without exception. This is indicated in the first two formats by the inclusion of "GMT" as the three-letter abbreviation for time zone, and should be assumed when reading the asctime format. HTTP-date = rfc1123-date | rfc850-date | asctime-date rfc1123-date = wkday "," SP date1 SP time SP "GMT" rfc850-date = weekday "," SP date2 SP time SP "GMT" asctime-date = wkday SP date3 SP time SP 4DIGIT date1 = 2DIGIT SP month SP 4DIGIT ; day month year (e.g., 02 Jun 1982) date2 = 2DIGIT "-" month "-" 2DIGIT ; day-month-year (e.g., 02-Jun-82) date3 = month SP ( 2DIGIT | ( SP 1DIGIT )) ; month day (e.g., Jun 2) time = 2DIGIT ":" 2DIGIT ":" 2DIGIT ; 00:00:00 - 23:59:59 wkday = "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun" weekday = "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" | "Sunday" month = "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun" | "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec" Note: HTTP requirements for the date/time stamp format apply only to their usage within the protocol stream. Clients and servers are not required to use these formats for user Berners-Lee, et al Informational [Page 16] RFC 1945 HTTP/1.0 May 1996 presentation, request logging, etc. 3.4 Character Sets HTTP uses the same definition of the term "character set" as that described for MIME: The term "character set" is used in this document to refer to a method used with one or more tables to convert a sequence of octets into a sequence of characters. Note that unconditional conversion in the other direction is not required, in that not all characters may be available in a given character set and a character set may provide more than one sequence of octets to represent a particular character. This definition is intended to allow various kinds of character encodings, from simple single- table mappings such as US-ASCII to complex table switching methods such as those that use ISO 2022's techniques. However, the definition associated with a MIME character set name must fully specify the mapping to be performed from octets to characters. In particular, use of external profiling information to determine the exact mapping is not permitted. Note: This use of the term "character set" is more commonly referred to as a "character encoding." However, since HTTP and MIME share the same registry, it is important that the terminology also be shared. HTTP character sets are identified by case-insensitive tokens. The complete set of tokens are defined by the IANA Character Set registry [15]. However, because that registry does not define a single, consistent token for each character set, we define here the preferred names for those character sets most likely to be used with HTTP entities. These character sets include those registered by RFC 1521 [5] -- the US-ASCII [17] and ISO-8859 [18] character sets -- and other names specifically recommended for use within MIME charset parameters. charset = "US-ASCII" | "ISO-8859-1" | "ISO-8859-2" | "ISO-8859-3" | "ISO-8859-4" | "ISO-8859-5" | "ISO-8859-6" | "ISO-8859-7" | "ISO-8859-8" | "ISO-8859-9" | "ISO-2022-JP" | "ISO-2022-JP-2" | "ISO-2022-KR" | "UNICODE-1-1" | "UNICODE-1-1-UTF-7" | "UNICODE-1-1-UTF-8" | token Although HTTP allows an arbitrary token to be used as a charset value, any token that has a predefined value within the IANA Character Set registry [15] must represent the character set defined Berners-Lee, et al Informational [Page 17] RFC 1945 HTTP/1.0 May 1996 by that registry. Applications should limit their use of character sets to those defined by the IANA registry. The character set of an entity body should be labelled as the lowest common denominator of the character codes used within that body, with the exception that no label is preferred over the labels US-ASCII or ISO-8859-1. 3.5 Content Codings Content coding values are used to indicate an encoding transformation that has been applied to a resource. Content codings are primarily used to allow a document to be compressed or encrypted without losing the identity of its underlying media type. Typically, the resource is stored in this encoding and only decoded before rendering or analogous usage. content-coding = "x-gzip" | "x-compress" | token Note: For future compatibility, HTTP/1.0 applications should consider "gzip" and "compress" to be equivalent to "x-gzip" and "x-compress", respectively. All content-coding values are case-insensitive. HTTP/1.0 uses content-coding values in the Content-Encoding (Section 10.3) header field. Although the value describes the content-coding, what is more important is that it indicates what decoding mechanism will be required to remove the encoding. Note that a single program may be capable of decoding multiple content-coding formats. Two values are defined by this specification: x-gzip An encoding format produced by the file compression program "gzip" (GNU zip) developed by Jean-loup Gailly. This format is typically a Lempel-Ziv coding (LZ77) with a 32 bit CRC. x-compress The encoding format produced by the file compression program "compress". This format is an adaptive Lempel-Ziv-Welch coding (LZW). Note: Use of program names for the identification of encoding formats is not desirable and should be discouraged for future encodings. Their use here is representative of historical practice, not good design. Berners-Lee, et al Informational [Page 18] RFC 1945 HTTP/1.0 May 1996 3.6 Media Types HTTP uses Internet Media Types [13] in the Content-Type header field (Section 10.5) in order to provide open and extensible data typing. media-type = type "/" subtype *( ";" parameter ) type = token subtype = token Parameters may follow the type/subtype in the form of attribute/value pairs. parameter = attribute "=" value attribute = token value = token | quoted-string The type, subtype, and parameter attribute names are case- insensitive. Parameter values may or may not be case-sensitive, depending on the semantics of the parameter name. LWS must not be generated between the type and subtype, nor between an attribute and its value. Upon receipt of a media type with an unrecognized parameter, a user agent should treat the media type as if the unrecognized parameter and its value were not present. Some older HTTP applications do not recognize media type parameters. HTTP/1.0 applications should only use media type parameters when they are necessary to define the content of a message. Media-type values are registered with the Internet Assigned Number Authority (IANA [15]). The media type registration process is outlined in RFC 1590 [13]. Use of non-registered media types is discouraged. 3.6.1 Canonicalization and Text Defaults Internet media types are registered with a canonical form. In general, an Entity-Body transferred via HTTP must be represented in the appropriate canonical form prior to its transmission. If the body has been encoded with a Content-Encoding, the underlying data should be in canonical form prior to being encoded. Media subtypes of the "text" type use CRLF as the text line break when in canonical form. However, HTTP allows the transport of text media with plain CR or LF alone representing a line break when used consistently within the Entity-Body. HTTP applications must accept CRLF, bare CR, and bare LF as being representative of a line break in text media received via HTTP. Berners-Lee, et al Informational [Page 19] RFC 1945 HTTP/1.0 May 1996 In addition, if the text media is represented in a character set that does not use octets 13 and 10 for CR and LF respectively, as is the case for some multi-byte character sets, HTTP allows the use of whatever octet sequences are defined by that character set to represent the equivalent of CR and LF for line breaks. This flexibility regarding line breaks applies only to text media in the Entity-Body; a bare CR or LF should not be substituted for CRLF within any of the HTTP control structures (such as header fields and multipart boundaries). The "charset" parameter is used with some media types to define the character set (Section 3.4) of the data. When no explicit charset parameter is provided by the sender, media subtypes of the "text" type are defined to have a default charset value of "ISO-8859-1" when received via HTTP. Data in character sets other than "ISO-8859-1" or its subsets must be labelled with an appropriate charset value in order to be consistently interpreted by the recipient. Note: Many current HTTP servers provide data using charsets other than "ISO-8859-1" without proper labelling. This situation reduces interoperability and is not recommended. To compensate for this, some HTTP user agents provide a configuration option to allow the user to change the default interpretation of the media type character set when no charset parameter is given. 3.6.2 Multipart Types MIME provides for a number of "multipart" types -- encapsulations of several entities within a single message's Entity-Body. The multipart types registered by IANA [15] do not have any special meaning for HTTP/1.0, though user agents may need to understand each type in order to correctly interpret the purpose of each body-part. An HTTP user agent should follow the same or similar behavior as a MIME user agent does upon receipt of a multipart type. HTTP servers should not assume that all HTTP clients are prepared to handle multipart types. All multipart types share a common syntax and must include a boundary parameter as part of the media type value. The message body is itself a protocol element and must therefore use only CRLF to represent line breaks between body-parts. Multipart body-parts may contain HTTP header fields which are significant to the meaning of that part. 3.7 Product Tokens Product tokens are used to allow communicating applications to identify themselves via a simple product token, with an optional slash and version designator. Most fields using product tokens also allow subproducts which form a significant part of the application to Berners-Lee, et al Informational [Page 20] RFC 1945 HTTP/1.0 May 1996 be listed, separated by whitespace. By convention, the products are listed in order of their significance for identifying the application. product = token ["/" product-version] product-version = token Examples: User-Agent: CERN-LineMode/2.15 libwww/2.17b3 Server: Apache/0.8.4 Product tokens should be short and to the point -- use of them for advertizing or other non-essential information is explicitly forbidden. Although any token character may appear in a product- version, this token should only be used for a version identifier (i.e., successive versions of the same product should only differ in the product-version portion of the product value). 4. HTTP Message 4.1 Message Types HTTP messages consist of requests from client to server and responses from server to client. HTTP-message = Simple-Request ; HTTP/0.9 messages | Simple-Response | Full-Request ; HTTP/1.0 messages | Full-Response Full-Request and Full-Response use the generic message format of RFC 822 [7] for transferring entities. Both messages may include optional header fields (also known as "headers") and an entity body. The entity body is separated from the headers by a null line (i.e., a line with nothing preceding the CRLF). Full-Request = Request-Line ; Section 5.1 *( General-Header ; Section 4.3 | Request-Header ; Section 5.2 | Entity-Header ) ; Section 7.1 CRLF [ Entity-Body ] ; Section 7.2 Full-Response = Status-Line ; Section 6.1 *( General-Header ; Section 4.3 | Response-Header ; Section 6.2 Berners-Lee, et al Informational [Page 21] RFC 1945 HTTP/1.0 May 1996 | Entity-Header ) ; Section 7.1 CRLF [ Entity-Body ] ; Section 7.2 Simple-Request and Simple-Response do not allow the use of any header information and are limited to a single request method (GET). Simple-Request = "GET" SP Request-URI CRLF Simple-Response = [ Entity-Body ] Use of the Simple-Request format is discouraged because it prevents the server from identifying the media type of the returned entity. 4.2 Message Headers HTTP header fields, which include General-Header (Section 4.3), Request-Header (Section 5.2), Response-Header (Section 6.2), and Entity-Header (Section 7.1) fields, follow the same generic format as that given in Section 3.1 of RFC 822 [7]. Each header field consists of a name followed immediately by a colon (":"), a single space (SP) character, and the field value. Field names are case-insensitive. Header fields can be extended over multiple lines by preceding each extra line with at least one SP or HT, though this is not recommended. HTTP-header = field-name ":" [ field-value ] CRLF field-name = token field-value = *( field-content | LWS ) field-content = <the OCTETs making up the field-value and consisting of either *TEXT or combinations of token, tspecials, and quoted-string> The order in which header fields are received is not significant. However, it is "good practice" to send General-Header fields first, followed by Request-Header or Response-Header fields prior to the Entity-Header fields. Multiple HTTP-header fields with the same field-name may be present in a message if and only if the entire field-value for that header field is defined as a comma-separated list [i.e., #(values)]. It must be possible to combine the multiple header fields into one "field- name: field-value" pair, without changing the semantics of the message, by appending each subsequent field-value to the first, each separated by a comma. Berners-Lee, et al Informational [Page 22] RFC 1945 HTTP/1.0 May 1996 4.3 General Header Fields There are a few header fields which have general applicability for both request and response messages, but which do not apply to the entity being transferred. These headers apply only to the message being transmitted. General-Header = Date ; Section 10.6 | Pragma ; Section 10.12 General header field names can be extended reliably only in combination with a change in the protocol version. However, new or experimental header fields may be given the semantics of general header fields if all parties in the communication recognize them to be general header fields. Unrecognized header fields are treated as Entity-Header fields. 5. Request A request message from a client to a server includes, within the first line of that message, the method to be applied to the resource, the identifier of the resource, and the protocol version in use. For backwards compatibility with the more limited HTTP/0.9 protocol, there are two valid formats for an HTTP request: Request = Simple-Request | Full-Request Simple-Request = "GET" SP Request-URI CRLF Full-Request = Request-Line ; Section 5.1 *( General-Header ; Section 4.3 | Request-Header ; Section 5.2 | Entity-Header ) ; Section 7.1 CRLF [ Entity-Body ] ; Section 7.2 If an HTTP/1.0 server receives a Simple-Request, it must respond with an HTTP/0.9 Simple-Response. An HTTP/1.0 client capable of receiving a Full-Response should never generate a Simple-Request. 5.1 Request-Line The Request-Line begins with a method token, followed by the Request-URI and the protocol version, and ending with CRLF. The elements are separated by SP characters. No CR or LF are allowed except in the final CRLF sequence. Request-Line = Method SP Request-URI SP HTTP-Version CRLF Berners-Lee, et al Informational [Page 23] RFC 1945 HTTP/1.0 May 1996 Note that the difference between a Simple-Request and the Request- Line of a Full-Request is the presence of the HTTP-Version field and the availability of methods other than GET. 5.1.1 Method The Method token indicates the method to be performed on the resource identified by the Request-URI. The method is case-sensitive. Method = "GET" ; Section 8.1 | "HEAD" ; Section 8.2 | "POST" ; Section 8.3 | extension-method extension-method = token The list of methods acceptable by a specific resource can change dynamically; the client is notified through the return code of the response if a method is not allowed on a resource. Servers should return the status code 501 (not implemented) if the method is unrecognized or not implemented. The methods commonly used by HTTP/1.0 applications are fully defined in Section 8. 5.1.2 Request-URI The Request-URI is a Uniform Resource Identifier (Section 3.2) and identifies the resource upon which to apply the request. Request-URI = absoluteURI | abs_path The two options for Request-URI are dependent on the nature of the request. The absoluteURI form is only allowed when the request is being made to a proxy. The proxy is requested to forward the request and return the response. If the request is GET or HEAD and a prior response is cached, the proxy may use the cached message if it passes any restrictions in the Expires header field. Note that the proxy may forward the request on to another proxy or directly to the server specified by the absoluteURI. In order to avoid request loops, a proxy must be able to recognize all of its server names, including any aliases, local variations, and the numeric IP address. An example Request-Line would be: GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.0 Berners-Lee, et al Informational [Page 24] RFC 1945 HTTP/1.0 May 1996 The most common form of Request-URI is that used to identify a resource on an origin server or gateway. In this case, only the absolute path of the URI is transmitted (see Section 3.2.1, abs_path). For example, a client wishing to retrieve the resource above directly from the origin server would create a TCP connection to port 80 of the host "www.w3.org" and send the line: GET /pub/WWW/TheProject.html HTTP/1.0 followed by the remainder of the Full-Request. Note that the absolute path cannot be empty; if none is present in the original URI, it must be given as "/" (the server root). The Request-URI is transmitted as an encoded string, where some characters may be escaped using the "% HEX HEX" encoding defined by RFC 1738 [4]. The origin server must decode the Request-URI in order to properly interpret the request. 5.2 Request Header Fields The request header fields allow the client to pass additional information about the request, and about the client itself, to the server. These fields act as request modifiers, with semantics equivalent to the parameters on a programming language method (procedure) invocation. Request-Header = Authorization ; Section 10.2 | From ; Section 10.8 | If-Modified-Since ; Section 10.9 | Referer ; Section 10.13 | User-Agent ; Section 10.15 Request-Header field names can be extended reliably only in combination with a change in the protocol version. However, new or experimental header fields may be given the semantics of request header fields if all parties in the communication recognize them to be request header fields. Unrecognized header fields are treated as Entity-Header fields. 6. Response After receiving and interpreting a request message, a server responds in the form of an HTTP response message. Response = Simple-Response | Full-Response Simple-Response = [ Entity-Body ] Berners-Lee, et al Informational [Page 25] RFC 1945 HTTP/1.0 May 1996 Full-Response = Status-Line ; Section 6.1 *( General-Header ; Section 4.3 | Response-Header ; Section 6.2 | Entity-Header ) ; Section 7.1 CRLF [ Entity-Body ] ; Section 7.2 A Simple-Response should only be sent in response to an HTTP/0.9 Simple-Request or if the server only supports the more limited HTTP/0.9 protocol. If a client sends an HTTP/1.0 Full-Request and receives a response that does not begin with a Status-Line, it should assume that the response is a Simple-Response and parse it accordingly. Note that the Simple-Response consists only of the entity body and is terminated by the server closing the connection. 6.1 Status-Line The first line of a Full-Response message is the Status-Line, consisting of the protocol version followed by a numeric status code and its associated textual phrase, with each element separated by SP characters. No CR or LF is allowed except in the final CRLF sequence. Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF Since a status line always begins with the protocol version and status code "HTTP/" 1*DIGIT "." 1*DIGIT SP 3DIGIT SP (e.g., "HTTP/1.0 200 "), the presence of that expression is sufficient to differentiate a Full-Response from a Simple-Response. Although the Simple-Response format may allow such an expression to occur at the beginning of an entity body, and thus cause a misinterpretation of the message if it was given in response to a Full-Request, most HTTP/0.9 servers are limited to responses of type "text/html" and therefore would never generate such a response. 6.1.1 Status Code and Reason Phrase The Status-Code element is a 3-digit integer result code of the attempt to understand and satisfy the request. The Reason-Phrase is intended to give a short textual description of the Status-Code. The Status-Code is intended for use by automata and the Reason-Phrase is intended for the human user. The client is not required to examine or display the Reason-Phrase. Berners-Lee, et al Informational [Page 26] RFC 1945 HTTP/1.0 May 1996 The first digit of the Status-Code defines the class of response. The last two digits do not have any categorization role. There are 5 values for the first digit: o 1xx: Informational - Not used, but reserved for future use o 2xx: Success - The action was successfully received, understood, and accepted. o 3xx: Redirection - Further action must be taken in order to complete the request o 4xx: Client Error - The request contains bad syntax or cannot be fulfilled o 5xx: Server Error - The server failed to fulfill an apparently valid request The individual values of the numeric status codes defined for HTTP/1.0, and an example set of corresponding Reason-Phrase's, are presented below. The reason phrases listed here are only recommended -- they may be replaced by local equivalents without affecting the protocol. These codes are fully defined in Section 9. Status-Code = "200" ; OK | "201" ; Created | "202" ; Accepted | "204" ; No Content | "301" ; Moved Permanently | "302" ; Moved Temporarily | "304" ; Not Modified | "400" ; Bad Request | "401" ; Unauthorized | "403" ; Forbidden | "404" ; Not Found | "500" ; Internal Server Error | "501" ; Not Implemented | "502" ; Bad Gateway | "503" ; Service Unavailable | extension-code extension-code = 3DIGIT Reason-Phrase = *<TEXT, excluding CR, LF> HTTP status codes are extensible, but the above codes are the only ones generally recognized in current practice. HTTP applications are not required to understand the meaning of all registered status Berners-Lee, et al Informational [Page 27] RFC 1945 HTTP/1.0 May 1996 codes, though such understanding is obviously desirable. However, applications must understand the class of any status code, as indicated by the first digit, and treat any unrecognized response as being equivalent to the x00 status code of that class, with the exception that an unrecognized response must not be cached. For example, if an unrecognized status code of 431 is received by the client, it can safely assume that there was something wrong with its request and treat the response as if it had received a 400 status code. In such cases, user agents should present to the user the entity returned with the response, since that entity is likely to include human-readable information which will explain the unusual status. 6.2 Response Header Fields The response header fields allow the server to pass additional information about the response which cannot be placed in the Status- Line. These header fields give information about the server and about further access to the resource identified by the Request-URI. Response-Header = Location ; Section 10.11 | Server ; Section 10.14 | WWW-Authenticate ; Section 10.16 Response-Header field names can be extended reliably only in combination with a change in the protocol version. However, new or experimental header fields may be given the semantics of response header fields if all parties in the communication recognize them to be response header fields. Unrecognized header fields are treated as Entity-Header fields. 7. Entity Full-Request and Full-Response messages may transfer an entity within some requests and responses. An entity consists of Entity-Header fields and (usually) an Entity-Body. In this section, both sender and recipient refer to either the client or the server, depending on who sends and who receives the entity. Berners-Lee, et al Informational [Page 28] RFC 1945 HTTP/1.0 May 1996 7.1 Entity Header Fields Entity-Header fields define optional metainformation about the Entity-Body or, if no body is present, about the resource identified by the request. Entity-Header = Allow ; Section 10.1 | Content-Encoding ; Section 10.3 | Content-Length ; Section 10.4 | Content-Type ; Section 10.5 | Expires ; Section 10.7 | Last-Modified ; Section 10.10 | extension-header extension-header = HTTP-header The extension-header mechanism allows additional Entity-Header fields to be defined without changing the protocol, but these fields cannot be assumed to be recognizable by the recipient. Unrecognized header fields should be ignored by the recipient and forwarded by proxies. 7.2 Entity Body The entity body (if any) sent with an HTTP request or response is in a format and encoding defined by the Entity-Header fields. Entity-Body = *OCTET An entity body is included with a request message only when the request method calls for one. The presence of an entity body in a request is signaled by the inclusion of a Content-Length header field in the request message headers. HTTP/1.0 requests containing an entity body must include a valid Content-Length header field. For response messages, whether or not an entity body is included with a message is dependent on both the request method and the response code. All responses to the HEAD request method must not include a body, even though the presence of entity header fields may lead one to believe they do. All 1xx (informational), 204 (no content), and 304 (not modified) responses must not include a body. All other responses must include an entity body or a Content-Length header field defined with a value of zero (0). 7.2.1 Type When an Entity-Body is included with a message, the data type of that body is determined via the header fields Content-Type and Content- Encoding. These define a two-layer, ordered encoding model: Berners-Lee, et al Informational [Page 29] RFC 1945 HTTP/1.0 May 1996 entity-body := Content-Encoding( Content-Type( data ) ) A Content-Type specifies the media type of the underlying data. A Content-Encoding may be used to indicate any additional content coding applied to the type, usually for the purpose of data compression, that is a property of the resource requested. The default for the content encoding is none (i.e., the identity function). Any HTTP/1.0 message containing an entity body should include a Content-Type header field defining the media type of that body. If and only if the media type is not given by a Content-Type header, as is the case for Simple-Response messages, the recipient may attempt to guess the media type via inspection of its content and/or the name extension(s) of the URL used to identify the resource. If the media type remains unknown, the recipient should treat it as type "application/octet-stream". 7.2.2 Length When an Entity-Body is included with a message, the length of that body may be determined in one of two ways. If a Content-Length header field is present, its value in bytes represents the length of the Entity-Body. Otherwise, the body length is determined by the closing of the connection by the server. Closing the connection cannot be used to indicate the end of a request body, since it leaves no possibility for the server to send back a response. Therefore, HTTP/1.0 requests containing an entity body must include a valid Content-Length header field. If a request contains an entity body and Content-Length is not specified, and the server does not recognize or cannot calculate the length from other fields, then the server should send a 400 (bad request) response. Note: Some older servers supply an invalid Content-Length when sending a document that contains server-side includes dynamically inserted into the data stream. It must be emphasized that this will not be tolerated by future versions of HTTP. Unless the client knows that it is receiving a response from a compliant server, it should not depend on the Content-Length value being correct. 8. Method Definitions The set of common methods for HTTP/1.0 is defined below. Although this set can be expanded, additional methods cannot be assumed to share the same semantics for separately extended clients and servers. Berners-Lee, et al Informational [Page 30] RFC 1945 HTTP/1.0 May 1996 8.1 GET The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI. If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the entity in the response and not the source text of the process, unless that text happens to be the output of the process. The semantics of the GET method changes to a "conditional GET" if the request message includes an If-Modified-Since header field. A conditional GET method requests that the identified resource be transferred only if it has been modified since the date given by the If-Modified-Since header, as described in Section 10.9. The conditional GET method is intended to reduce network usage by allowing cached entities to be refreshed without requiring multiple requests or transferring unnecessary data. 8.2 HEAD The HEAD method is identical to GET except that the server must not return any Entity-Body in the response. The metainformation contained in the HTTP headers in response to a HEAD request should be identical to the information sent in response to a GET request. This method can be used for obtaining metainformation about the resource identified by the Request-URI without transferring the Entity-Body itself. This method is often used for testing hypertext links for validity, accessibility, and recent modification. There is no "conditional HEAD" request analogous to the conditional GET. If an If-Modified-Since header field is included with a HEAD request, it should be ignored. 8.3 POST The POST method is used to request that the destination server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. POST is designed to allow a uniform method to cover the following functions: o Annotation of existing resources; o Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles; o Providing a block of data, such as the result of submitting a form [3], to a data-handling process; o Extending a database through an append operation. Berners-Lee, et al Informational [Page 31] RFC 1945 HTTP/1.0 May 1996 The actual function performed by the POST method is determined by the server and is usually dependent on the Request-URI. The posted entity is subordinate to that URI in the same way that a file is subordinate to a directory containing it, a news article is subordinate to a newsgroup to which it is posted, or a record is subordinate to a database. A successful POST does not require that the entity be created as a resource on the origin server or made accessible for future reference. That is, the action performed by the POST method might not result in a resource that can be identified by a URI. In this case, either 200 (ok) or 204 (no content) is the appropriate response status, depending on whether or not the response includes an entity that describes the result. If a resource has been created on the origin server, the response should be 201 (created) and contain an entity (preferably of type "text/html") which describes the status of the request and refers to the new resource. A valid Content-Length is required on all HTTP/1.0 POST requests. An HTTP/1.0 server should respond with a 400 (bad request) message if it cannot determine the length of the request message's content. Applications must not cache responses to a POST request because the application has no way of knowing that the server would return an equivalent response on some future request. 9. Status Code Definitions Each Status-Code is described below, including a description of which method(s) it can follow and any metainformation required in the response. 9.1 Informational 1xx This class of status code indicates a provisional response, consisting only of the Status-Line and optional headers, and is terminated by an empty line. HTTP/1.0 does not define any 1xx status codes and they are not a valid response to a HTTP/1.0 request. However, they may be useful for experimental applications which are outside the scope of this specification. 9.2 Successful 2xx This class of status code indicates that the client's request was successfully received, understood, and accepted. Berners-Lee, et al Informational [Page 32] RFC 1945 HTTP/1.0 May 1996 200 OK The request has succeeded. The information returned with the response is dependent on the method used in the request, as follows: GET an entity corresponding to the requested resource is sent in the response; HEAD the response must only contain the header information and no Entity-Body; POST an entity describing or containing the result of the action. 201 Created The request has been fulfilled and resulted in a new resource being created. The newly created resource can be referenced by the URI(s) returned in the entity of the response. The origin server should create the resource before using this Status-Code. If the action cannot be carried out immediately, the server must include in the response body a description of when the resource will be available; otherwise, the server should respond with 202 (accepted). Of the methods defined by this specification, only POST can create a resource. 202 Accepted The request has been accepted for processing, but the processing has not been completed. The request may or may not eventually be acted upon, as it may be disallowed when processing actually takes place. There is no facility for re-sending a status code from an asynchronous operation such as this. The 202 response is intentionally non-committal. Its purpose is to allow a server to accept a request for some other process (perhaps a batch-oriented process that is only run once per day) without requiring that the user agent's connection to the server persist until the process is completed. The entity returned with this response should include an indication of the request's current status and either a pointer to a status monitor or some estimate of when the user can expect the request to be fulfilled. 204 No Content The server has fulfilled the request but there is no new information to send back. If the client is a user agent, it should not change its document view from that which caused the request to Berners-Lee, et al Informational [Page 33] RFC 1945 HTTP/1.0 May 1996 be generated. This response is primarily intended to allow input for scripts or other actions to take place without causing a change to the user agent's active document view. The response may include new metainformation in the form of entity headers, which should apply to the document currently in the user agent's active view. 9.3 Redirection 3xx This class of status code indicates that further action needs to be taken by the user agent in order to fulfill the request. The action required may be carried out by the user agent without interaction with the user if and only if the method used in the subsequent request is GET or HEAD. A user agent should never automatically redirect a request more than 5 times, since such redirections usually indicate an infinite loop. 300 Multiple Choices This response code is not directly used by HTTP/1.0 applications, but serves as the default for interpreting the 3xx class of responses. The requested resource is available at one or more locations. Unless it was a HEAD request, the response should include an entity containing a list of resource characteristics and locations from which the user or user agent can choose the one most appropriate. If the server has a preferred choice, it should include the URL in a Location field; user agents may use this field value for automatic redirection. 301 Moved Permanently The requested resource has been assigned a new permanent URL and any future references to this resource should be done using that URL. Clients with link editing capabilities should automatically relink references to the Request-URI to the new reference returned by the server, where possible. The new URL must be given by the Location field in the response. Unless it was a HEAD request, the Entity-Body of the response should contain a short note with a hyperlink to the new URL. If the 301 status code is received in response to a request using the POST method, the user agent must not automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued. Berners-Lee, et al Informational [Page 34] RFC 1945 HTTP/1.0 May 1996 Note: When automatically redirecting a POST request after receiving a 301 status code, some existing user agents will erroneously change it into a GET request. 302 Moved Temporarily The requested resource resides temporarily under a different URL. Since the redirection may be altered on occasion, the client should continue to use the Request-URI for future requests. The URL must be given by the Location field in the response. Unless it was a HEAD request, the Entity-Body of the response should contain a short note with a hyperlink to the new URI(s). If the 302 status code is received in response to a request using the POST method, the user agent must not automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued. Note: When automatically redirecting a POST request after receiving a 302 status code, some existing user agents will erroneously change it into a GET request. 304 Not Modified If the client has performed a conditional GET request and access is allowed, but the document has not been modified since the date and time specified in the If-Modified-Since field, the server must respond with this status code and not send an Entity-Body to the client. Header fields contained in the response should only include information which is relevant to cache managers or which may have changed independently of the entity's Last-Modified date. Examples of relevant header fields include: Date, Server, and Expires. A cache should update its cached entity to reflect any new field values given in the 304 response. 9.4 Client Error 4xx The 4xx class of status code is intended for cases in which the client seems to have erred. If the client has not completed the request when a 4xx code is received, it should immediately cease sending data to the server. Except when responding to a HEAD request, the server should include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. These status codes are applicable to any request method. Berners-Lee, et al Informational [Page 35] RFC 1945 HTTP/1.0 May 1996 Note: If the client is sending data, server implementations on TCP should be careful to ensure that the client acknowledges receipt of the packet(s) containing the response prior to closing the input connection. If the client continues sending data to the server after the close, the server's controller will send a reset packet to the client, which may erase the client's unacknowledged input buffers before they can be read and interpreted by the HTTP application. 400 Bad Request The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications. 401 Unauthorized The request requires user authentication. The response must include a WWW-Authenticate header field (Section 10.16) containing a challenge applicable to the requested resource. The client may repeat the request with a suitable Authorization header field (Section 10.2). If the request already included Authorization credentials, then the 401 response indicates that authorization has been refused for those credentials. If the 401 response contains the same challenge as the prior response, and the user agent has already attempted authentication at least once, then the user should be presented the entity that was given in the response, since that entity may include relevant diagnostic information. HTTP access authentication is explained in Section 11. 403 Forbidden The server understood the request, but is refusing to fulfill it. Authorization will not help and the request should not be repeated. If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, it should describe the reason for the refusal in the entity body. This status code is commonly used when the server does not wish to reveal exactly why the request has been refused, or when no other response is applicable. 404 Not Found The server has not found anything matching the Request-URI. No indication is given of whether the condition is temporary or permanent. If the server does not wish to make this information available to the client, the status code 403 (forbidden) can be used instead. Berners-Lee, et al Informational [Page 36] RFC 1945 HTTP/1.0 May 1996 9.5 Server Error 5xx Response status codes beginning with the digit "5" indicate cases in which the server is aware that it has erred or is incapable of performing the request. If the client has not completed the request when a 5xx code is received, it should immediately cease sending data to the server. Except when responding to a HEAD request, the server should include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. These response codes are applicable to any request method and there are no required header fields. 500 Internal Server Error The server encountered an unexpected condition which prevented it from fulfilling the request. 501 Not Implemented The server does not support the functionality required to fulfill the request. This is the appropriate response when the server does not recognize the request method and is not capable of supporting it for any resource. 502 Bad Gateway The server, while acting as a gateway or proxy, received an invalid response from the upstream server it accessed in attempting to fulfill the request. 503 Service Unavailable The server is currently unable to handle the request due to a temporary overloading or maintenance of the server. The implication is that this is a temporary condition which will be alleviated after some delay. Note: The existence of the 503 status code does not imply that a server must use it when becoming overloaded. Some servers may wish to simply refuse the connection. 10. Header Field Definitions This section defines the syntax and semantics of all commonly used HTTP/1.0 header fields. For general and entity header fields, both sender and recipient refer to either the client or the server, depending on who sends and who receives the message. Berners-Lee, et al Informational [Page 37] RFC 1945 HTTP/1.0 May 1996 10.1 Allow The Allow entity-header field lists the set of methods supported by the resource identified by the Request-URI. The purpose of this field is strictly to inform the recipient of valid methods associated with the resource. The Allow header field is not permitted in a request using the POST method, and thus should be ignored if it is received as part of a POST entity. Allow = "Allow" ":" 1#method Example of use: Allow: GET, HEAD This field cannot prevent a client from trying other methods. However, the indications given by the Allow header field value should be followed. The actual set of allowed methods is defined by the origin server at the time of each request. A proxy must not modify the Allow header field even if it does not understand all the methods specified, since the user agent may have other means of communicating with the origin server. The Allow header field does not indicate what methods are implemented by the server. 10.2 Authorization A user agent that wishes to authenticate itself with a server-- usually, but not necessarily, after receiving a 401 response--may do so by including an Authorization request-header field with the request. The Authorization field value consists of credentials containing the authentication information of the user agent for the realm of the resource being requested. Authorization = "Authorization" ":" credentials HTTP access authentication is described in Section 11. If a request is authenticated and a realm specified, the same credentials should be valid for all other requests within this realm. Responses to requests containing an Authorization field are not cachable. Berners-Lee, et al Informational [Page 38] RFC 1945 HTTP/1.0 May 1996 10.3 Content-Encoding The Content-Encoding entity-header field is used as a modifier to the media-type. When present, its value indicates what additional content coding has been applied to the resource, and thus what decoding mechanism must be applied in order to obtain the media-type referenced by the Content-Type header field. The Content-Encoding is primarily used to allow a document to be compressed without losing the identity of its underlying media type. Content-Encoding = "Content-Encoding" ":" content-coding Content codings are defined in Section 3.5. An example of its use is Content-Encoding: x-gzip The Content-Encoding is a characteristic of the resource identified by the Request-URI. Typically, the resource is stored with this encoding and is only decoded before rendering or analogous usage. 10.4 Content-Length The Content-Length entity-header field indicates the size of the Entity-Body, in decimal number of octets, sent to the recipient or, in the case of the HEAD method, the size of the Entity-Body that would have been sent had the request been a GET. Content-Length = "Content-Length" ":" 1*DIGIT An example is Content-Length: 3495 Applications should use this field to indicate the size of the Entity-Body to be transferred, regardless of the media type of the entity. A valid Content-Length field value is required on all HTTP/1.0 request messages containing an entity body. Any Content-Length greater than or equal to zero is a valid value. Section 7.2.2 describes how to determine the length of a response entity body if a Content-Length is not given. Note: The meaning of this field is significantly different from the corresponding definition in MIME, where it is an optional field used within the "message/external-body" content-type. In HTTP, it should be used whenever the entity's length can be determined prior to being transferred. Berners-Lee, et al Informational [Page 39] RFC 1945 HTTP/1.0 May 1996 10.5 Content-Type The Content-Type entity-header field indicates the media type of the Entity-Body sent to the recipient or, in the case of the HEAD method, the media type that would have been sent had the request been a GET. Content-Type = "Content-Type" ":" media-type Media types are defined in Section 3.6. An example of the field is Content-Type: text/html Further discussion of methods for identifying the media type of an entity is provided in Section 7.2.1. 10.6 Date The Date general-header field represents the date and time at which the message was originated, having the same semantics as orig-date in RFC 822. The field value is an HTTP-date, as described in Section 3.3. Date = "Date" ":" HTTP-date An example is Date: Tue, 15 Nov 1994 08:12:31 GMT If a message is received via direct connection with the user agent (in the case of requests) or the origin server (in the case of responses), then the date can be assumed to be the current date at the receiving end. However, since the date--as it is believed by the origin--is important for evaluating cached responses, origin servers should always include a Date header. Clients should only send a Date header field in messages that include an entity body, as in the case of the POST request, and even then it is optional. A received message which does not have a Date header field should be assigned one by the recipient if the message will be cached by that recipient or gatewayed via a protocol which requires a Date. In theory, the date should represent the moment just before the entity is generated. In practice, the date can be generated at any time during the message origination without affecting its semantic value. Note: An earlier version of this document incorrectly specified that this field should contain the creation date of the enclosed Entity-Body. This has been changed to reflect actual (and proper) Berners-Lee, et al Informational [Page 40] RFC 1945 HTTP/1.0 May 1996 usage. 10.7 Expires The Expires entity-header field gives the date/time after which the entity should be considered stale. This allows information providers to suggest the volatility of the resource, or a date after which the information may no longer be valid. Applications must not cache this entity beyond the date given. The presence of an Expires field does not imply that the original resource will change or cease to exist at, before, or after that time. However, information providers that know or even suspect that a resource will change by a certain date should include an Expires header with that date. The format is an absolute date and time as defined by HTTP-date in Section 3.3. Expires = "Expires" ":" HTTP-date An example of its use is Expires: Thu, 01 Dec 1994 16:00:00 GMT If the date given is equal to or earlier than the value of the Date header, the recipient must not cache the enclosed entity. If a resource is dynamic by nature, as is the case with many data- producing processes, entities from that resource should be given an appropriate Expires value which reflects that dynamism. The Expires field cannot be used to force a user agent to refresh its display or reload a resource; its semantics apply only to caching mechanisms, and such mechanisms need only check a resource's expiration status when a new request for that resource is initiated. User agents often have history mechanisms, such as "Back" buttons and history lists, which can be used to redisplay an entity retrieved earlier in a session. By default, the Expires field does not apply to history mechanisms. If the entity is still in storage, a history mechanism should display it even if the entity has expired, unless the user has specifically configured the agent to refresh expired history documents. Note: Applications are encouraged to be tolerant of bad or misinformed implementations of the Expires header. A value of zero (0) or an invalid date format should be considered equivalent to an "expires immediately." Although these values are not legitimate for HTTP/1.0, a robust implementation is always desirable. Berners-Lee, et al Informational [Page 41] RFC 1945 HTTP/1.0 May 1996 10.8 From The From request-header field, if given, should contain an Internet e-mail address for the human user who controls the requesting user agent. The address should be machine-usable, as defined by mailbox in RFC 822 [7] (as updated by RFC 1123 [6]): From = "From" ":" mailbox An example is: From: webmaster@w3.org This header field may be used for logging purposes and as a means for identifying the source of invalid or unwanted requests. It should not be used as an insecure form of access protection. The interpretation of this field is that the request is being performed on behalf of the person given, who accepts responsibility for the method performed. In particular, robot agents should include this header so that the person responsible for running the robot can be contacted if problems occur on the receiving end. The Internet e-mail address in this field may be separate from the Internet host which issued the request. For example, when a request is passed through a proxy, the original issuer's address should be used. Note: The client should not send the From header field without the user's approval, as it may conflict with the user's privacy interests or their site's security policy. It is strongly recommended that the user be able to disable, enable, and modify the value of this field at any time prior to a request. 10.9 If-Modified-Since The If-Modified-Since request-header field is used with the GET method to make it conditional: if the requested resource has not been modified since the time specified in this field, a copy of the resource will not be returned from the server; instead, a 304 (not modified) response will be returned without any Entity-Body. If-Modified-Since = "If-Modified-Since" ":" HTTP-date An example of the field is: If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT Berners-Lee, et al Informational [Page 42] RFC 1945 HTTP/1.0 May 1996 A conditional GET method requests that the identified resource be transferred only if it has been modified since the date given by the If-Modified-Since header. The algorithm for determining this includes the following cases: a) If the request would normally result in anything other than a 200 (ok) status, or if the passed If-Modified-Since date is invalid, the response is exactly the same as for a normal GET. A date which is later than the server's current time is invalid. b) If the resource has been modified since the If-Modified-Since date, the response is exactly the same as for a normal GET. c) If the resource has not been modified since a valid If-Modified-Since date, the server shall return a 304 (not modified) response. The purpose of this feature is to allow efficient updates of cached information with a minimum amount of transaction overhead. 10.10 Last-Modified The Last-Modified entity-header field indicates the date and time at which the sender believes the resource was last modified. The exact semantics of this field are defined in terms of how the recipient should interpret it: if the recipient has a copy of this resource which is older than the date given by the Last-Modified field, that copy should be considered stale. Last-Modified = "Last-Modified" ":" HTTP-date An example of its use is Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT The exact meaning of this header field depends on the implementation of the sender and the nature of the original resource. For files, it may be just the file system last-modified time. For entities with dynamically included parts, it may be the most recent of the set of last-modify times for its component parts. For database gateways, it may be the last-update timestamp of the record. For virtual objects, it may be the last time the internal state changed. An origin server must not send a Last-Modified date which is later than the server's time of message origination. In such cases, where the resource's last modification would indicate some time in the Berners-Lee, et al Informational [Page 43] RFC 1945 HTTP/1.0 May 1996 future, the server must replace that date with the message origination date. 10.11 Location The Location response-header field defines the exact location of the resource that was identified by the Request-URI. For 3xx responses, the location must indicate the server's preferred URL for automatic redirection to the resource. Only one absolute URL is allowed. Location = "Location" ":" absoluteURI An example is Location: http://www.w3.org/hypertext/WWW/NewLocation.html 10.12 Pragma The Pragma general-header field is used to include implementation- specific directives that may apply to any recipient along the request/response chain. All pragma directives specify optional behavior from the viewpoint of the protocol; however, some systems may require that behavior be consistent with the directives. Pragma = "Pragma" ":" 1#pragma-directive pragma-directive = "no-cache" | extension-pragma extension-pragma = token [ "=" word ] When the "no-cache" directive is present in a request message, an application should forward the request toward the origin server even if it has a cached copy of what is being requested. This allows a client to insist upon receiving an authoritative response to its request. It also allows a client to refresh a cached copy which is known to be corrupted or stale. Pragma directives must be passed through by a proxy or gateway application, regardless of their significance to that application, since the directives may be applicable to all recipients along the request/response chain. It is not possible to specify a pragma for a specific recipient; however, any pragma directive not relevant to a recipient should be ignored by that recipient. 10.13 Referer The Referer request-header field allows the client to specify, for the server's benefit, the address (URI) of the resource from which the Request-URI was obtained. This allows a server to generate lists Berners-Lee, et al Informational [Page 44] RFC 1945 HTTP/1.0 May 1996 of back-links to resources for interest, logging, optimized caching, etc. It also allows obsolete or mistyped links to be traced for maintenance. The Referer field must not be sent if the Request-URI was obtained from a source that does not have its own URI, such as input from the user keyboard. Referer = "Referer" ":" ( absoluteURI | relativeURI ) Example: Referer: http://www.w3.org/hypertext/DataSources/Overview.html If a partial URI is given, it should be interpreted relative to the Request-URI. The URI must not include a fragment. Note: Because the source of a link may be private information or may reveal an otherwise private information source, it is strongly recommended that the user be able to select whether or not the Referer field is sent. For example, a browser client could have a toggle switch for browsing openly/anonymously, which would respectively enable/disable the sending of Referer and From information. 10.14 Server The Server response-header field contains information about the software used by the origin server to handle the request. The field can contain multiple product tokens (Section 3.7) and comments identifying the server and any significant subproducts. By convention, the product tokens are listed in order of their significance for identifying the application. Server = "Server" ":" 1*( product | comment ) Example: Server: CERN/3.0 libwww/2.17 If the response is being forwarded through a proxy, the proxy application must not add its data to the product list. Note: Revealing the specific software version of the server may allow the server machine to become more vulnerable to attacks against software that is known to contain security holes. Server implementors are encouraged to make this field a configurable option. Berners-Lee, et al Informational [Page 45] RFC 1945 HTTP/1.0 May 1996 Note: Some existing servers fail to restrict themselves to the product token syntax within the Server field. 10.15 User-Agent The User-Agent request-header field contains information about the user agent originating the request. This is for statistical purposes, the tracing of protocol violations, and automated recognition of user agents for the sake of tailoring responses to avoid particular user agent limitations. Although it is not required, user agents should include this field with requests. The field can contain multiple product tokens (Section 3.7) and comments identifying the agent and any subproducts which form a significant part of the user agent. By convention, the product tokens are listed in order of their significance for identifying the application. User-Agent = "User-Agent" ":" 1*( product | comment ) Example: User-Agent: CERN-LineMode/2.15 libwww/2.17b3 Note: Some current proxy applications append their product information to the list in the User-Agent field. This is not recommended, since it makes machine interpretation of these fields ambiguous. Note: Some existing clients fail to restrict themselves to the product token syntax within the User-Agent field. 10.16 WWW-Authenticate The WWW-Authenticate response-header field must be included in 401 (unauthorized) response messages. The field value consists of at least one challenge that indicates the authentication scheme(s) and parameters applicable to the Request-URI. WWW-Authenticate = "WWW-Authenticate" ":" 1#challenge The HTTP access authentication process is described in Section 11. User agents must take special care in parsing the WWW-Authenticate field value if it contains more than one challenge, or if more than one WWW-Authenticate header field is provided, since the contents of a challenge may itself contain a comma-separated list of authentication parameters. Berners-Lee, et al Informational [Page 46] RFC 1945 HTTP/1.0 May 1996 11. Access Authentication HTTP provides a simple challenge-response authentication mechanism which may be used by a server to challenge a client request and by a client to provide authentication information. It uses an extensible, case-insensitive token to identify the authentication scheme, followed by a comma-separated list of attribute-value pairs which carry the parameters necessary for achieving authentication via that scheme. auth-scheme = token auth-param = token "=" quoted-string The 401 (unauthorized) response message is used by an origin server to challenge the authorization of a user agent. This response must include a WWW-Authenticate header field containing at least one challenge applicable to the requested resource. challenge = auth-scheme 1*SP realm *( "," auth-param ) realm = "realm" "=" realm-value realm-value = quoted-string The realm attribute (case-insensitive) is required for all authentication schemes which issue a challenge. The realm value (case-sensitive), in combination with the canonical root URL of the server being accessed, defines the protection space. These realms allow the protected resources on a server to be partitioned into a set of protection spaces, each with its own authentication scheme and/or authorization database. The realm value is a string, generally assigned by the origin server, which may have additional semantics specific to the authentication scheme. A user agent that wishes to authenticate itself with a server-- usually, but not necessarily, after receiving a 401 response--may do so by including an Authorization header field with the request. The Authorization field value consists of credentials containing the authentication information of the user agent for the realm of the resource being requested. credentials = basic-credentials | ( auth-scheme #auth-param ) The domain over which credentials can be automatically applied by a user agent is determined by the protection space. If a prior request has been authorized, the same credentials may be reused for all other requests within that protection space for a period of time determined Berners-Lee, et al Informational [Page 47] RFC 1945 HTTP/1.0 May 1996 by the authentication scheme, parameters, and/or user preference. Unless otherwise defined by the authentication scheme, a single protection space cannot extend outside the scope of its server. If the server does not wish to accept the credentials sent with a request, it should return a 403 (forbidden) response. The HTTP protocol does not restrict applications to this simple challenge-response mechanism for access authentication. Additional mechanisms may be used, such as encryption at the transport level or via message encapsulation, and with additional header fields specifying authentication information. However, these additional mechanisms are not defined by this specification. Proxies must be completely transparent regarding user agent authentication. That is, they must forward the WWW-Authenticate and Authorization headers untouched, and must not cache the response to a request containing Authorization. HTTP/1.0 does not provide a means for a client to be authenticated with a proxy. 11.1 Basic Authentication Scheme The "basic" authentication scheme is based on the model that the user agent must authenticate itself with a user-ID and a password for each realm. The realm value should be considered an opaque string which can only be compared for equality with other realms on that server. The server will authorize the request only if it can validate the user-ID and password for the protection space of the Request-URI. There are no optional authentication parameters. Upon receipt of an unauthorized request for a URI within the protection space, the server should respond with a challenge like the following: WWW-Authenticate: Basic realm="WallyWorld" where "WallyWorld" is the string assigned by the server to identify the protection space of the Request-URI. To receive authorization, the client sends the user-ID and password, separated by a single colon (":") character, within a base64 [5] encoded string in the credentials. basic-credentials = "Basic" SP basic-cookie basic-cookie = <base64 [5] encoding of userid-password, except not limited to 76 char/line> Berners-Lee, et al Informational [Page 48] RFC 1945 HTTP/1.0 May 1996 userid-password = [ token ] ":" *TEXT If the user agent wishes to send the user-ID "Aladdin" and password "open sesame", it would use the following header field: Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== The basic authentication scheme is a non-secure method of filtering unauthorized access to resources on an HTTP server. It is based on the assumption that the connection between the client and the server can be regarded as a trusted carrier. As this is not generally true on an open network, the basic authentication scheme should be used accordingly. In spite of this, clients should implement the scheme in order to communicate with servers that use it. 12. Security Considerations This section is meant to inform application developers, information providers, and users of the security limitations in HTTP/1.0 as described by this document. The discussion does not include definitive solutions to the problems revealed, though it does make some suggestions for reducing security risks. 12.1 Authentication of Clients As mentioned in Section 11.1, the Basic authentication scheme is not a secure method of user authentication, nor does it prevent the Entity-Body from being transmitted in clear text across the physical network used as the carrier. HTTP/1.0 does not prevent additional authentication schemes and encryption mechanisms from being employed to increase security. 12.2 Safe Methods The writers of client software should be aware that the software represents the user in their interactions over the Internet, and should be careful to allow the user to be aware of any actions they may take which may have an unexpected significance to themselves or others. In particular, the convention has been established that the GET and HEAD methods should never have the significance of taking an action other than retrieval. These methods should be considered "safe." This allows user agents to represent other methods, such as POST, in a special way, so that the user is made aware of the fact that a possibly unsafe action is being requested. Berners-Lee, et al Informational [Page 49] RFC 1945 HTTP/1.0 May 1996 Naturally, it is not possible to ensure that the server does not generate side-effects as a result of performing a GET request; in fact, some dynamic resources consider that a feature. The important distinction here is that the user did not request the side-effects, so therefore cannot be held accountable for them. 12.3 Abuse of Server Log Information A server is in the position to save personal data about a user's requests which may identify their reading patterns or subjects of interest. This information is clearly confidential in nature and its handling may be constrained by law in certain countries. People using the HTTP protocol to provide data are responsible for ensuring that such material is not distributed without the permission of any individuals that are identifiable by the published results. 12.4 Transfer of Sensitive Information Like any generic data transfer protocol, HTTP cannot regulate the content of the data that is transferred, nor is there any a priori method of determining the sensitivity of any particular piece of information within the context of any given request. Therefore, applications should supply as much control over this information as possible to the provider of that information. Three header fields are worth special mention in this context: Server, Referer and From. Revealing the specific software version of the server may allow the server machine to become more vulnerable to attacks against software that is known to contain security holes. Implementors should make the Server header field a configurable option. The Referer field allows reading patterns to be studied and reverse links drawn. Although it can be very useful, its power can be abused if user details are not separated from the information contained in the Referer. Even when the personal information has been removed, the Referer field may indicate a private document's URI whose publication would be inappropriate. The information sent in the From field might conflict with the user's privacy interests or their site's security policy, and hence it should not be transmitted without the user being able to disable, enable, and modify the contents of the field. The user must be able to set the contents of this field within a user preference or application defaults configuration. We suggest, though do not require, that a convenient toggle interface be provided for the user to enable or disable the sending of From and Referer information. Berners-Lee, et al Informational [Page 50] RFC 1945 HTTP/1.0 May 1996 12.5 Attacks Based On File and Path Names Implementations of HTTP origin servers should be careful to restrict the documents returned by HTTP requests to be only those that were intended by the server administrators. If an HTTP server translates HTTP URIs directly into file system calls, the server must take special care not to serve files that were not intended to be delivered to HTTP clients. For example, Unix, Microsoft Windows, and other operating systems use ".." as a path component to indicate a directory level above the current one. On such a system, an HTTP server must disallow any such construct in the Request-URI if it would otherwise allow access to a resource outside those intended to be accessible via the HTTP server. Similarly, files intended for reference only internally to the server (such as access control files, configuration files, and script code) must be protected from inappropriate retrieval, since they might contain sensitive information. Experience has shown that minor bugs in such HTTP server implementations have turned into security risks. 13. Acknowledgments This specification makes heavy use of the augmented BNF and generic constructs defined by David H. Crocker for RFC 822 [7]. Similarly, it reuses many of the definitions provided by Nathaniel Borenstein and Ned Freed for MIME [5]. We hope that their inclusion in this specification will help reduce past confusion over the relationship between HTTP/1.0 and Internet mail message formats. The HTTP protocol has evolved considerably over the past four years. It has benefited from a large and active developer community--the many people who have participated on the www-talk mailing list--and it is that community which has been most responsible for the success of HTTP and of the World-Wide Web in general. Marc Andreessen, Robert Cailliau, Daniel W. Connolly, Bob Denny, Jean-Francois Groff, Phillip M. Hallam-Baker, Hakon W. Lie, Ari Luotonen, Rob McCool, Lou Montulli, Dave Raggett, Tony Sanders, and Marc VanHeyningen deserve special recognition for their efforts in defining aspects of the protocol for early versions of this specification. Paul Hoffman contributed sections regarding the informational status of this document and Appendices C and D. Berners-Lee, et al Informational [Page 51] RFC 1945 HTTP/1.0 May 1996 This document has benefited greatly from the comments of all those participating in the HTTP-WG. In addition to those already mentioned, the following individuals have contributed to this specification: Gary Adams Harald Tveit Alvestrand Keith Ball Brian Behlendorf Paul Burchard Maurizio Codogno Mike Cowlishaw Roman Czyborra Michael A. Dolan John Franks Jim Gettys Marc Hedlund Koen Holtman Alex Hopmann Bob Jernigan Shel Kaphan Martijn Koster Dave Kristol Daniel LaLiberte Paul Leach Albert Lunde John C. Mallery Larry Masinter Mitra Jeffrey Mogul Gavin Nicol Bill Perry Jeffrey Perry Owen Rees Luigi Rizzo David Robinson Marc Salomon Rich Salz Jim Seidman Chuck Shotton Eric W. Sink Simon E. Spero Robert S. Thau Francois Yergeau Mary Ellen Zurko Jean-Philippe Martin-Flatin 14. References [1] Anklesaria, F., McCahill, M., Lindner, P., Johnson, D., Torrey, D., and B. Alberti, "The Internet Gopher Protocol: A Distributed Document Search and Retrieval Protocol", RFC 1436, University of Minnesota, March 1993. [2] Berners-Lee, T., "Universal Resource Identifiers in WWW: A Unifying Syntax for the Expression of Names and Addresses of Objects on the Network as used in the World-Wide Web", RFC 1630, CERN, June 1994. [3] Berners-Lee, T., and D. Connolly, "Hypertext Markup Language - 2.0", RFC 1866, MIT/W3C, November 1995. [4] Berners-Lee, T., Masinter, L., and M. McCahill, "Uniform Resource Locators (URL)", RFC 1738, CERN, Xerox PARC, University of Minnesota, December 1994. Berners-Lee, et al Informational [Page 52] RFC 1945 HTTP/1.0 May 1996 [5] Borenstein, N., and N. Freed, "MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies", RFC 1521, Bellcore, Innosoft, September 1993. [6] Braden, R., "Requirements for Internet hosts - Application and Support", STD 3, RFC 1123, IETF, October 1989. [7] Crocker, D., "Standard for the Format of ARPA Internet Text Messages", STD 11, RFC 822, UDEL, August 1982. [8] F. Davis, B. Kahle, H. Morris, J. Salem, T. Shen, R. Wang, J. Sui, and M. Grinbaum. "WAIS Interface Protocol Prototype Functional Specification." (v1.5), Thinking Machines Corporation, April 1990. [9] Fielding, R., "Relative Uniform Resource Locators", RFC 1808, UC Irvine, June 1995. [10] Horton, M., and R. Adams, "Standard for interchange of USENET Messages", RFC 1036 (Obsoletes RFC 850), AT&T Bell Laboratories, Center for Seismic Studies, December 1987. [11] Kantor, B., and P. Lapsley, "Network News Transfer Protocol: A Proposed Standard for the Stream-Based Transmission of News", RFC 977, UC San Diego, UC Berkeley, February 1986. [12] Postel, J., "Simple Mail Transfer Protocol." STD 10, RFC 821, USC/ISI, August 1982. [13] Postel, J., "Media Type Registration Procedure." RFC 1590, USC/ISI, March 1994. [14] Postel, J., and J. Reynolds, "File Transfer Protocol (FTP)", STD 9, RFC 959, USC/ISI, October 1985. [15] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1700, USC/ISI, October 1994. [16] Sollins, K., and L. Masinter, "Functional Requirements for Uniform Resource Names", RFC 1737, MIT/LCS, Xerox Corporation, December 1994. [17] US-ASCII. Coded Character Set - 7-Bit American Standard Code for Information Interchange. Standard ANSI X3.4-1986, ANSI, 1986. Berners-Lee, et al Informational [Page 53] RFC 1945 HTTP/1.0 May 1996 [18] ISO-8859. International Standard -- Information Processing -- 8-bit Single-Byte Coded Graphic Character Sets -- Part 1: Latin alphabet No. 1, ISO 8859-1:1987. Part 2: Latin alphabet No. 2, ISO 8859-2, 1987. Part 3: Latin alphabet No. 3, ISO 8859-3, 1988. Part 4: Latin alphabet No. 4, ISO 8859-4, 1988. Part 5: Latin/Cyrillic alphabet, ISO 8859-5, 1988. Part 6: Latin/Arabic alphabet, ISO 8859-6, 1987. Part 7: Latin/Greek alphabet, ISO 8859-7, 1987. Part 8: Latin/Hebrew alphabet, ISO 8859-8, 1988. Part 9: Latin alphabet No. 5, ISO 8859-9, 1990. 15. Authors' Addresses Tim Berners-Lee Director, W3 Consortium MIT Laboratory for Computer Science 545 Technology Square Cambridge, MA 02139, U.S.A. Fax: +1 (617) 258 8682 EMail: timbl@w3.org Roy T. Fielding Department of Information and Computer Science University of California Irvine, CA 92717-3425, U.S.A. Fax: +1 (714) 824-4056 EMail: fielding@ics.uci.edu Henrik Frystyk Nielsen W3 Consortium MIT Laboratory for Computer Science 545 Technology Square Cambridge, MA 02139, U.S.A. Fax: +1 (617) 258 8682 EMail: frystyk@w3.org Berners-Lee, et al Informational [Page 54] RFC 1945 HTTP/1.0 May 1996 Appendices These appendices are provided for informational reasons only -- they do not form a part of the HTTP/1.0 specification. A. Internet Media Type message/http In addition to defining the HTTP/1.0 protocol, this document serves as the specification for the Internet media type "message/http". The following is to be registered with IANA [13]. Media Type name: message Media subtype name: http Required parameters: none Optional parameters: version, msgtype version: The HTTP-Version number of the enclosed message (e.g., "1.0"). If not present, the version can be determined from the first line of the body. msgtype: The message type -- "request" or "response". If not present, the type can be determined from the first line of the body. Encoding considerations: only "7bit", "8bit", or "binary" are permitted Security considerations: none B. Tolerant Applications Although this document specifies the requirements for the generation of HTTP/1.0 messages, not all applications will be correct in their implementation. We therefore recommend that operational applications be tolerant of deviations whenever those deviations can be interpreted unambiguously. Clients should be tolerant in parsing the Status-Line and servers tolerant when parsing the Request-Line. In particular, they should accept any amount of SP or HT characters between fields, even though only a single SP is required. The line terminator for HTTP-header fields is the sequence CRLF. However, we recommend that applications, when parsing such headers, recognize a single LF as a line terminator and ignore the leading CR. Berners-Lee, et al Informational [Page 55] RFC 1945 HTTP/1.0 May 1996 C. Relationship to MIME HTTP/1.0 uses many of the constructs defined for Internet Mail (RFC 822 [7]) and the Multipurpose Internet Mail Extensions (MIME [5]) to allow entities to be transmitted in an open variety of representations and with extensible mechanisms. However, RFC 1521 discusses mail, and HTTP has a few features that are different than those described in RFC 1521. These differences were carefully chosen to optimize performance over binary connections, to allow greater freedom in the use of new media types, to make date comparisons easier, and to acknowledge the practice of some early HTTP servers and clients. At the time of this writing, it is expected that RFC 1521 will be revised. The revisions may include some of the practices found in HTTP/1.0 but not in RFC 1521. This appendix describes specific areas where HTTP differs from RFC 1521. Proxies and gateways to strict MIME environments should be aware of these differences and provide the appropriate conversions where necessary. Proxies and gateways from MIME environments to HTTP also need to be aware of the differences because some conversions may be required. C.1 Conversion to Canonical Form RFC 1521 requires that an Internet mail entity be converted to canonical form prior to being transferred, as described in Appendix G of RFC 1521 [5]. Section 3.6.1 of this document describes the forms allowed for subtypes of the "text" media type when transmitted over HTTP. RFC 1521 requires that content with a Content-Type of "text" represent line breaks as CRLF and forbids the use of CR or LF outside of line break sequences. HTTP allows CRLF, bare CR, and bare LF to indicate a line break within text content when a message is transmitted over HTTP. Where it is possible, a proxy or gateway from HTTP to a strict RFC 1521 environment should translate all line breaks within the text media types described in Section 3.6.1 of this document to the RFC 1521 canonical form of CRLF. Note, however, that this may be complicated by the presence of a Content-Encoding and by the fact that HTTP allows the use of some character sets which do not use octets 13 and 10 to represent CR and LF, as is the case for some multi-byte character sets. Berners-Lee, et al Informational [Page 56] RFC 1945 HTTP/1.0 May 1996 C.2 Conversion of Date Formats HTTP/1.0 uses a restricted set of date formats (Section 3.3) to simplify the process of date comparison. Proxies and gateways from other protocols should ensure that any Date header field present in a message conforms to one of the HTTP/1.0 formats and rewrite the date if necessary. C.3 Introduction of Content-Encoding RFC 1521 does not include any concept equivalent to HTTP/1.0's Content-Encoding header field. Since this acts as a modifier on the media type, proxies and gateways from HTTP to MIME-compliant protocols must either change the value of the Content-Type header field or decode the Entity-Body before forwarding the message. (Some experimental applications of Content-Type for Internet mail have used a media-type parameter of ";conversions=<content-coding>" to perform an equivalent function as Content-Encoding. However, this parameter is not part of RFC 1521.) C.4 No Content-Transfer-Encoding HTTP does not use the Content-Transfer-Encoding (CTE) field of RFC 1521. Proxies and gateways from MIME-compliant protocols to HTTP must remove any non-identity CTE ("quoted-printable" or "base64") encoding prior to delivering the response message to an HTTP client. Proxies and gateways from HTTP to MIME-compliant protocols are responsible for ensuring that the message is in the correct format and encoding for safe transport on that protocol, where "safe transport" is defined by the limitations of the protocol being used. Such a proxy or gateway should label the data with an appropriate Content-Transfer-Encoding if doing so will improve the likelihood of safe transport over the destination protocol. C.5 HTTP Header Fields in Multipart Body-Parts In RFC 1521, most header fields in multipart body-parts are generally ignored unless the field name begins with "Content-". In HTTP/1.0, multipart body-parts may contain any HTTP header fields which are significant to the meaning of that part. D. Additional Features This appendix documents protocol elements used by some existing HTTP implementations, but not consistently and correctly across most HTTP/1.0 applications. Implementors should be aware of these features, but cannot rely upon their presence in, or interoperability Berners-Lee, et al Informational [Page 57] RFC 1945 HTTP/1.0 May 1996 with, other HTTP/1.0 applications. D.1 Additional Request Methods D.1.1 PUT The PUT method requests that the enclosed entity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosed entity should be considered as a modified version of the one residing on the origin server. If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new resource by the requesting user agent, the origin server can create the resource with that URI. The fundamental difference between the POST and PUT requests is reflected in the different meaning of the Request-URI. The URI in a POST request identifies the resource that will handle the enclosed entity as data to be processed. That resource may be a data-accepting process, a gateway to some other protocol, or a separate entity that accepts annotations. In contrast, the URI in a PUT request identifies the entity enclosed with the request -- the user agent knows what URI is intended and the server should not apply the request to some other resource. D.1.2 DELETE The DELETE method requests that the origin server delete the resource identified by the Request-URI. D.1.3 LINK The LINK method establishes one or more Link relationships between the existing resource identified by the Request-URI and other existing resources. D.1.4 UNLINK The UNLINK method removes one or more Link relationships from the existing resource identified by the Request-URI. D.2 Additional Header Field Definitions D.2.1 Accept The Accept request-header field can be used to indicate a list of media ranges which are acceptable as a response to the request. The asterisk "*" character is used to group media types into ranges, with "*/*" indicating all media types and "type/*" indicating all subtypes Berners-Lee, et al Informational [Page 58] RFC 1945 HTTP/1.0 May 1996 of that type. The set of ranges given by the client should represent what types are acceptable given the context of the request. D.2.2 Accept-Charset The Accept-Charset request-header field can be used to indicate a list of preferred character sets other than the default US-ASCII and ISO-8859-1. This field allows clients capable of understanding more comprehensive or special-purpose character sets to signal that capability to a server which is capable of representing documents in those character sets. D.2.3 Accept-Encoding The Accept-Encoding request-header field is similar to Accept, but restricts the content-coding values which are acceptable in the response. D.2.4 Accept-Language The Accept-Language request-header field is similar to Accept, but restricts the set of natural languages that are preferred as a response to the request. D.2.5 Content-Language The Content-Language entity-header field describes the natural language(s) of the intended audience for the enclosed entity. Note that this may not be equivalent to all the languages used within the entity. D.2.6 Link The Link entity-header field provides a means for describing a relationship between the entity and some other resource. An entity may include multiple Link values. Links at the metainformation level typically indicate relationships like hierarchical structure and navigation paths. D.2.7 MIME-Version HTTP messages may include a single MIME-Version general-header field to indicate what version of the MIME protocol was used to construct the message. Use of the MIME-Version header field, as defined by RFC 1521 [5], should indicate that the message is MIME-conformant. Unfortunately, some older HTTP/1.0 servers send it indiscriminately, and thus this field should be ignored. Berners-Lee, et al Informational [Page 59] RFC 1945 HTTP/1.0 May 1996 D.2.8 Retry-After The Retry-After response-header field can be used with a 503 (service unavailable) response to indicate how long the service is expected to be unavailable to the requesting client. The value of this field can be either an HTTP-date or an integer number of seconds (in decimal) after the time of the response. D.2.9 Title The Title entity-header field indicates the title of the entity. D.2.10 URI The URI entity-header field may contain some or all of the Uniform Resource Identifiers (Section 3.2) by which the Request-URI resource can be identified. There is no guarantee that the resource can be accessed using the URI(s) specified. Berners-Lee, et al Informational [Page 60] |
Added doc/rfc2145.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 | Network Working Group J. C. Mogul Request for Comments: 2145 DEC Category: Informational R. Fielding UC Irvine J. Gettys DEC H. Frystyk MIT/LCS May 1997 Use and Interpretation of HTTP Version Numbers Status of this Memo This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind. Distribution of this memo is unlimited. Distribution of this document is unlimited. Please send comments to the HTTP working group at <http-wg@cuckoo.hpl.hp.com>. Discussions of the working group are archived at <URL:http://www.ics.uci.edu/pub/ietf/http/>. General discussions about HTTP and the applications which use HTTP should take place on the <www-talk@w3.org> mailing list. Abstract HTTP request and response messages include an HTTP protocol version number. Some confusion exists concerning the proper use and interpretation of HTTP version numbers, and concerning interoperability of HTTP implementations of different protocol versions. This document is an attempt to clarify the situation. It is not a modification of the intended meaning of the existing HTTP/1.0 and HTTP/1.1 documents, but it does describe the intention of the authors of those documents, and can be considered definitive when there is any ambiguity in those documents concerning HTTP version numbers, for all versions of HTTP. Mogul, et. al. Informational [Page 1] RFC 2145 HTTP Version Numbers May 1997 TABLE OF CONTENTS 1 Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1 Robustness Principle . . . . . . . . . . . . . . . . . . 3 2 HTTP version numbers. . . . . . . . . . . . . . . . . . . . . . 3 2.1 Proxy behavior. . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 Compatibility between minor versions of the same major version. . . . . . . . . . . . . . . . . . . . . . . . 4 2.3 Which version number to send in a message. . . . . . . . 5 3 Security Considerations . . . . . . . . . . . . . . . . . . . . 6 4 References. . . . . . . . . . . . . . . . . . . . . . . . . . . 6 5 Authors' addresses. . . . . . . . . . . . . . . . . . . . . . . 6 1 Introduction HTTP request and response messages include an HTTP protocol version number. According to section 3.1 of the HTTP/1.1 specification [2], HTTP uses a "<major>.<minor>" numbering scheme to indicate versions of the protocol. The protocol versioning policy is intended to allow the sender to indicate the format of a message and its capacity for understanding further HTTP communication, rather than the features obtained via that communication. No change is made to the version number for the addition of message components which do not affect communication behavior or which only add to extensible field values. The <minor> number is incremented when the changes made to the protocol add features which do not change the general message parsing algorithm, but which may add to the message semantics and imply additional capabilities of the sender. The <major> number is incremented when the format of a message within the protocol is changed. The same language appears in the description of HTTP/1.0 [1]. Many readers of these documents have expressed some confusion about the intended meaning of this policy. Also, some people who wrote HTTP implementations before RFC1945 [1] was issued were not aware of the intentions behind the introduction of version numbers in HTTP/1.0. This has led to debate and inconsistency regarding the use and interpretation of HTTP version numbers, and has led to interoperability problems in certain cases. Mogul, et. al. Informational [Page 2] RFC 2145 HTTP Version Numbers May 1997 This document is an attempt to clarify the situation. It is not a modification of the intended meaning of the existing HTTP/1.0 and HTTP/1.1 documents, but it does describe the intention of the authors of those documents. In any case where either of those two documents is ambiguous regarding the use and interpretation of HTTP version numbers, this document should be considered the definitive as to the intentions of the designers of HTTP. The specification described in this document is not part of the specification of any individual version of HTTP, such as HTTP/1.0 or HTTP/1.1. Rather, this document describes the use of HTTP version numbers in any version of HTTP (except for HTTP/0.9, which did not include version numbers). No vendor or other provider of an HTTP implementation should claim any compliance with any IETF HTTP specification unless the implementation conditionally complies with the rules in this document. 1.1 Robustness Principle RFC791 [4] defines the "robustness principle" in section 3.2: an implementation must be conservative in its sending behavior, and liberal in its receiving behavior. This principle applies to HTTP, as well. It is the fundamental basis for interpreting any part of the HTTP specification that might still be ambiguous. In particular, implementations of HTTP SHOULD NOT reject messages or generate errors unnecessarily. 2 HTTP version numbers We start by restating the language quoted above from section 3.1 of the HTTP/1.1 specification [2]: It is, and has always been, the explicit intent of the HTTP specification that the interpretation of an HTTP message header does not change between minor versions of the same major version. It is, and has always been, the explicit intent of the HTTP specification that an implementation receiving a message header that it does not understand MUST ignore that header. (The word "ignore" has a special meaning for proxies; see section 2.1 below.) Mogul, et. al. Informational [Page 3] RFC 2145 HTTP Version Numbers May 1997 To make this as clear as possible: The major version sent in a message MAY indicate the interpretation of other header fields. The minor version sent in a message MUST NOT indicate the interpretation of other header fields. This reflects the principle that the minor version labels the capability of the sender, not the interpretation of the message. Note: In a future version of HTTP, we may introduce a mechanism that explicitly requires a receiving implementation to reject a message if it does not understand certain headers. For example, this might be implemented by means of a header that lists a set of other message headers that must be understood by the recipient. Any implementation claiming at least conditional compliance with this future version of HTTP would have to implement this mechanism. However, no implementation claiming compliance with a lower HTTP version (in particular, HTTP/1.1) will have to implement this mechanism. This future change may be required to support the Protocol Extension Protocol (PEP) [3]. One consequence of these rules is that an HTTP/1.1 message sent to an HTTP/1.0 recipient (or a recipient whose version is unknown) MUST be constructed so that it remains a valid HTTP/1.0 message when all headers not defined in the HTTP/1.0 specification [1] are removed. 2.1 Proxy behavior A proxy MUST forward an unknown header, unless it is protected by a Connection header. A proxy implementing an HTTP version >= 1.1 MUST NOT forward unknown headers that are protected by a Connection header, as described in section 14.10 of the HTTP/1.1 specification [2]. We remind the reader that that HTTP version numbers are hop-by-hop components of HTTP messages, and are not end-to-end. That is, an HTTP proxy never "forwards" an HTTP version number in either a request or response. 2.2 Compatibility between minor versions of the same major version An implementation of HTTP/x.b sending a message to a recipient whose version is known to be HTTP/x.a, a < b, MAY send a header that is not defined in the specification for HTTP/x.a. For example, an HTTP/1.1 server may send a "Cache-control" header to an HTTP/1.0 client; this may be useful if the immediate recipient is an HTTP/1.0 proxy, but the ultimate recipient is an HTTP/1.1 client. Mogul, et. al. Informational [Page 4] RFC 2145 HTTP Version Numbers May 1997 An implementation of HTTP/x.b sending a message to a recipient whose version is known to be HTTP/x.a, a < b, MUST NOT depend on the recipient understanding a header not defined in the specification for HTTP/x.a. For example, HTTP/1.0 clients cannot be expected to understand chunked encodings, and so an HTTP/1.1 server must never send "Transfer-Encoding: chunked" in response to an HTTP/1.0 request. 2.3 Which version number to send in a message The most strenuous debate over the use of HTTP version numbers has centered on the problem of implementations that do not follow the robustness principle, and which fail to produce useful results when they receive a message with an HTTP minor version higher than the minor version they implement. We consider these implementations buggy, but we recognize that the robustness principle also implies that message senders should make concessions to buggy implementations when this is truly necessary for interoperation. An HTTP client SHOULD send a request version equal to the highest version for which the client is at least conditionally compliant, and whose major version is no higher than the highest version supported by the server, if this is known. An HTTP client MUST NOT send a version for which it is not at least conditionally compliant. An HTTP client MAY send a lower request version, if it is known that the server incorrectly implements the HTTP specification, but only after the client has determined that the server is actually buggy. An HTTP server SHOULD send a response version equal to the highest version for which the server is at least conditionally compliant, and whose major version is less than or equal to the one received in the request. An HTTP server MUST NOT send a version for which it is not at least conditionally compliant. A server MAY send a 505 (HTTP Version Not Supported) response if cannot send a response using the major version used in the client's request. An HTTP server MAY send a lower response version, if it is known or suspected that the client incorrectly implements the HTTP specification, but this should not be the default, and this SHOULD NOT be done if the request version is HTTP/1.1 or greater. Mogul, et. al. Informational [Page 5] RFC 2145 HTTP Version Numbers May 1997 3 Security Considerations None, except to the extent that security mechanisms introduced in one version of HTTP might depend on the proper interpretation of HTTP version numbers in older implementations. 4 References 1. Berners-Lee, T., R. Fielding, and H. Frystyk. Hypertext Transfer Protocol -- HTTP/1.0. RFC 1945, HTTP Working Group, May, 1996. 2. Fielding, Roy T., Jim Gettys, Jeffrey C. Mogul, Henrik Frystyk Nielsen, and Tim Berners-Lee. Hypertext Transfer Protocol -- HTTP/1.1. RFC 2068, HTTP Working Group, January, 1997. 3. Khare, Rohit. HTTP/1.2 Extension Protocol (PEP). HTTP Working Group, Work in Progress. 4. Postel, Jon. Internet Protocol. RFC 791, NIC, September, 1981. 5 Authors' addresses Jeffrey C. Mogul Western Research Laboratory Digital Equipment Corporation 250 University Avenue Palo Alto, California, 94305, USA Email: mogul@wrl.dec.com Roy T. Fielding Department of Information and Computer Science University of California Irvine, CA 92717-3425, USA Fax: +1 (714) 824-4056 Email: fielding@ics.uci.edu Jim Gettys MIT Laboratory for Computer Science 545 Technology Square Cambridge, MA 02139, USA Fax: +1 (617) 258 8682 Email: jg@w3.org Mogul, et. al. Informational [Page 6] RFC 2145 HTTP Version Numbers May 1997 Henrik Frystyk Nielsen W3 Consortium MIT Laboratory for Computer Science 545 Technology Square Cambridge, MA 02139, USA Fax: +1 (617) 258 8682 Email: frystyk@w3.org Mogul, et. al. Informational [Page 7] |
Added doc/rfc2295.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 | Network Working Group K. Holtman Request for Comments: 2295 TUE Category: Experimental A. Mutz Hewlett-Packard March 1998 Transparent Content Negotiation in HTTP Status of this Memo This memo defines an Experimental Protocol for the Internet community. It does not specify an Internet standard of any kind. Discussion and suggestions for improvement are requested. Distribution of this memo is unlimited. Copyright Notice Copyright (C) The Internet Society (1998). All Rights Reserved. ABSTRACT HTTP allows web site authors to put multiple versions of the same information under a single URL. Transparent content negotiation is an extensible negotiation mechanism, layered on top of HTTP, for automatically selecting the best version when the URL is accessed. This enables the smooth deployment of new web data formats and markup tags. TABLE OF CONTENTS 1 Introduction................................................4 1.1 Background................................................4 2 Terminology.................................................5 2.1 Terms from HTTP/1.1.......................................5 2.2 New terms.................................................6 3 Notation....................................................8 4 Overview....................................................9 4.1 Content negotiation.......................................9 4.2 HTTP/1.0 style negotiation scheme.........................9 4.3 Transparent content negotiation scheme...................10 4.4 Optimizing the negotiation process.......................12 4.5 Downwards compatibility with non-negotiating user agents.14 4.6 Retrieving a variant by hand.............................15 4.7 Dimensions of negotiation................................15 Holtman & Mutz Experimental [Page 1] RFC 2295 Transparent Content Negotiation March 1998 4.8 Feature negotiation......................................15 4.9 Length of variant lists..................................16 4.10 Relation with other negotiation schemes.................16 5 Variant descriptions.......................................17 5.1 Syntax...................................................17 5.2 URI......................................................17 5.3 Source-quality...........................................18 5.4 Type, charset, language, and length......................19 5.5 Features.................................................19 5.6 Description..............................................19 5.7 Extension-attribute......................................20 6 Feature negotiation........................................20 6.1 Feature tags.............................................20 6.1.1 Feature tag values.....................................21 6.2 Feature sets.............................................21 6.3 Feature predicates.......................................22 6.4 Features attribute.......................................24 7 Remote variant selection algorithms........................25 7.1 Version numbers..........................................25 8 Content negotiation status codes and headers...............25 8.1 506 Variant Also Negotiates..............................25 8.2 Accept-Features..........................................26 8.3 Alternates...............................................27 8.4 Negotiate................................................28 8.5 TCN......................................................30 8.6 Variant-Vary.............................................30 9 Cache validators...........................................31 9.1 Variant list validators..................................31 9.2 Structured entity tags...................................31 9.3 Assigning entity tags to variants........................32 10 Content negotiation responses..............................32 10.1 List response...........................................33 10.2 Choice response.........................................34 10.3 Adhoc response..........................................37 10.4 Reusing the Alternates header...........................38 10.5 Extracting a normal response from a choice response.....39 10.6 Elaborate Vary headers..................................39 10.6.1 Construction of an elaborate Vary header..............40 10.6.2 Caching of an elaborate Vary header...................41 10.7 Adding an Expires header for HTTP/1.0 compatibility.....41 10.8 Negotiation on content encoding.........................41 Holtman & Mutz Experimental [Page 2] RFC 2295 Transparent Content Negotiation March 1998 11 User agent support for transparent negotiation.............42 11.1 Handling of responses...................................42 11.2 Presentation of a transparently negotiated resource.....42 12 Origin server support for transparent negotiation..........43 12.1 Requirements............................................43 12.2 Negotiation on transactions other than GET and HEAD.....45 13 Proxy support for transparent negotiation..................45 14 Security and privacy considerations........................46 14.1 Accept- headers revealing personal information..........46 14.2 Spoofing of responses from variant resources............47 14.3 Security holes revealed by negotiation..................47 15 Internationalization considerations........................47 16 Acknowledgments............................................47 17 References.................................................48 18 Authors' Addresses.........................................48 19 Appendix: Example of a local variant selection algorithm...49 19.1 Computing overall quality values........................49 19.2 Determining the result..................................51 19.3 Ranking dimensions......................................51 20 Appendix: feature negotiation examples.....................52 20.1 Use of feature tags.....................................52 20.2 Use of numeric feature tags.............................53 20.3 Feature tag design......................................53 21 Appendix: origin server implementation considerations......54 21.1 Implementation with a CGI script........................54 21.2 Direct support by HTTP servers..........................55 21.3 Web publishing tools....................................55 22 Appendix: Example of choice response construction..........55 23 Full Copyright Statement...................................58 Holtman & Mutz Experimental [Page 3] RFC 2295 Transparent Content Negotiation March 1998 1 Introduction HTTP allows web site authors to put multiple versions of the same information under a single URI. Each of these versions is called a `variant'. Transparent content negotiation is an extensible negotiation mechanism for automatically and efficiently retrieving the best variant when a GET or HEAD request is made. This enables the smooth deployment of new web data formats and markup tags. This specification defines transparent content negotiation as an extension on top of the HTTP/1.1 protocol [1]. However, use of this extension does not require use of HTTP/1.1: transparent content negotiation can also be done if some or all of the parties are HTTP/1.0 [2] systems. Transparent content negotiation is called `transparent' because it makes all variants which exist inside the origin server visible to outside parties. Note: Some members of the IETF are currently undertaking a number of activities which are loosely related to this experimental protocol. First, there is an effort to define a protocol- independent registry for feature tags. The intention is that this experimental protocol will be one of the clients of the registry. Second, some research is being done on content negotiation systems for other transport protocols (like internet mail and internet fax) and on generalized negotiation systems for multiple transport protocols. At the time of writing, it is unclear if or when this research will lead to results in the form of complete negotiation system specifications. It is also unclear to which extent possible future specifications can or will re-use elements of this experimental protocol. 1.1 Background The addition of content negotiation to the web infrastructure has been considered important since the early days of the web. Among the expected benefits of a sufficiently powerful system for content negotiation are * smooth deployment of new data formats and markup tags will allow graceful evolution of the web * eliminating the need to choose between a `state of the art multimedia homepage' and one which can be viewed by all web users * enabling good service to a wider range of browsing platforms (from low-end PDA's to high-end VR setups) Holtman & Mutz Experimental [Page 4] RFC 2295 Transparent Content Negotiation March 1998 * eliminating error-prone and cache-unfriendly User-Agent based negotiation * enabling construction of sites without `click here for the X version' links * internationalization, and the ability to offer multi-lingual content without a bias towards one language. 2 Terminology The words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY" in this document are to be interpreted as described in RFC 2119 [4]. This specification uses the term `header' as an abbreviation for for `header field in a request or response message'. 2.1 Terms from HTTP/1.1 This specification mostly uses the terminology of the HTTP/1.1 specification [1]. For the convenience of the reader, this section reproduces some key terminology definition from [1]. request An HTTP request message. response An HTTP response message. resource A network data object or service that can be identified by a URI. Resources may be available in multiple representations (e.g. multiple languages, data formats, size, resolutions) or vary in other ways. content negotiation The mechanism for selecting the appropriate representation when servicing a request. client A program that establishes connections for the purpose of sending requests. user agent The client which initiates a request. These are often browsers, editors, spiders (web-traversing robots), or other end user tools. Holtman & Mutz Experimental [Page 5] RFC 2295 Transparent Content Negotiation March 1998 server An application program that accepts connections in order to service requests by sending back responses. Any given program may be capable of being both a client and a server; our use of these terms refers only to the role being performed by the program for a particular connection, rather than to the program's capabilities in general. Likewise, any server may act as an origin server, proxy, gateway, or tunnel, switching behavior based on the nature of each request. origin server The server on which a given resource resides or is to be created. proxy An intermediary program which acts as both a server and a client for the purpose of making requests on behalf of other clients. Requests are serviced internally or by passing them on, with possible translation, to other servers. A proxy must implement both the client and server requirements of this specification. age The age of a response is the time since it was sent by, or successfully validated with, the origin server. fresh A response is fresh if its age has not yet exceeded its freshness lifetime. 2.2 New terms transparently negotiable resource A resource, identified by a single URI, which has multiple representations (variants) associated with it. When servicing a request on its URI, it allows selection of the best representation using the transparent content negotiation mechanism. A transparently negotiable resource always has a variant list bound to it, which can be represented as an Alternates header (defined in section 8.3). variant list A list containing variant descriptions, which can be bound to a transparently negotiable resource. Holtman & Mutz Experimental [Page 6] RFC 2295 Transparent Content Negotiation March 1998 variant description A machine-readable description of a variant resource, usually found in a variant list. A variant description contains the variant resource URI and various attributes which describe properties of the variant. Variant descriptions are defined in section 5. variant resource A resource from which a variant of a negotiable resource can be retrieved with a normal HTTP/1.x GET request, i.e. a GET request which does not use transparent content negotiation. neighboring variant A variant resource is called a neighboring variant resource of some transparently negotiable HTTP resource if the variant resource has a HTTP URL, and if the absolute URL of the variant resource up to its last slash equals the absolute URL of the negotiable resource up to its last slash, where equality is determined with the URI comparison rules in section 3.2.3 of [1]. The property of being a neighboring variant is important because of security considerations (section 14.2). Not all variants of a negotiable resource need to be neighboring variants. However, access to neighboring variants can be more highly optimized by the use of remote variant selection algorithms (section 7) and choice responses (section 10.2). remote variant selection algorithm A standardized algorithm by which a server can sometimes choose a best variant on behalf of a negotiating user agent. The algorithm typically computes whether the Accept- headers in the request contain sufficient information to allow a choice, and if so, which variant is the best variant. The use of a remote algorithm can speed up the negotiation process. list response A list response returns the variant list of the negotiable resource, but no variant data. It can be generated when the server does not want to, or is not allowed to, return a particular best variant for the request. List responses are defined in section 10.1. choice response A choice response returns a representation of the best variant for the request, and may also return the variant list of the negotiable resource. It can be generated when the server has sufficient information to be able to choose the best variant on behalf the user agent, but may only be generated if this best variant is a neighboring variant. Choice responses are defined in section 10.2. Holtman & Mutz Experimental [Page 7] RFC 2295 Transparent Content Negotiation March 1998 adhoc response An adhoc response can be sent by an origin server as an extreme measure, to achieve compatibility with a non-negotiating or buggy client if this compatibility cannot be achieved by sending a list or choice response. There are very little requirements on the contents of an adhoc response. Adhoc responses are defined in section 10.3. Accept- headers The request headers: Accept, Accept-Charset, Accept-Language, and Accept-Features. supports transparent content negotiation From the viewpoint of an origin server or proxy, a user agent supports transparent content negotiation if and only if it sends a Negotiate header (section 8.4) which indicates such support. server-side override If a request on a transparently negotiated resource is made by a client which supports transparent content negotiation, an origin server is said to perform a server-side override if the server ignores the directives in the Negotiate request header, and instead uses a custom algorithm to choose an appropriate response. A server-side override can sometimes be used to work around known client bugs. It could also be used by protocol extensions on top of transparent content negotiation. 3 Notation The version of BNF used in this document is taken from [1], and many of the nonterminals used are defined in [1]. Note that the underlying charset is US-ASCII. One new BNF construct is added: 1%rule stands for one or more instances of "rule", separated by whitespace: 1%rule = rule *( 1*LWS rule ) This specification also introduces number = 1*DIGIT short-float = 1*3DIGIT [ "." 0*3DIGIT ] Holtman & Mutz Experimental [Page 8] RFC 2295 Transparent Content Negotiation March 1998 This specification uses the same conventions as in [1] (see section 1.2 of [1]) for defining the significance of each particular requirement. 4 Overview This section gives an overview of transparent content negotiation. It starts with a more general discussion of negotiation as provided by HTTP. 4.1 Content negotiation HTTP/1.1 allows web site authors to put multiple versions of the same information under a single resource URI. Each of these versions is called a `variant'. For example, a resource http://x.org/paper could bind to three different variants of a paper: 1. HTML, English 2. HTML, French 3. Postscript, English Content negotiation is the process by which the best variant is selected if the resource is accessed. The selection is done by matching the properties of the available variants to the capabilities of the user agent and the preferences of the user. It has always been possible under HTTP to have multiple representations available for one resource, and to return the most appropriate representation for each subsequent request. However, HTTP/1.1 is the first version of HTTP which has provisions for doing this in a cache-friendly way. These provisions include the Vary response header, entity tags, and the If-None-Match request header. 4.2 HTTP/1.0 style negotiation scheme The HTTP/1.0 protocol elements allow for a negotiation scheme as follows: Server _____ proxy _____ proxy _____ user x.org cache cache agent < ---------------------------------- | GET http://x.org/paper | Accept- headers choose | ---------------------------------- > Best variant Holtman & Mutz Experimental [Page 9] RFC 2295 Transparent Content Negotiation March 1998 When the resource is accessed, the user agent sends (along with its request) various Accept- headers which express the user agent capabilities and the user preferences. Then the origin server uses these Accept- headers to choose the best variant, which is returned in the response. The biggest problem with this scheme is that it does not scale well. For all but the most minimal user agents, Accept- headers expressing all capabilities and preferences would be very large, and sending them in every request would be hugely inefficient, in particular because only a small fraction of the resources on the web have multiple variants. 4.3 Transparent content negotiation scheme The transparent content negotiation scheme eliminates the need to send huge Accept- headers, and nevertheless allows for a selection process that always yields either the best variant, or an error message indicating that user agent is not capable of displaying any of the available variants. Under the transparent content negotiation scheme, the server sends a list with the available variants and their properties to the user agent. An example of a list with three variants is {"paper.1" 0.9 {type text/html} {language en}}, {"paper.2" 0.7 {type text/html} {language fr}}, {"paper.3" 1.0 {type application/postscript} {language en}} The syntax and semantics of the variant descriptions in this list are covered in section 5. When the list is received, the user agent can choose the best variant and retrieve it. Graphically, the communication can be represented as follows: Holtman & Mutz Experimental [Page 10] RFC 2295 Transparent Content Negotiation March 1998 Server _____ proxy _____ proxy _____ user x.org cache cache agent < ---------------------------------- | GET http://x.org/paper | ----------------------------------- > [list response] return of list | choose | < ---------------------------------- | GET http://x.org/paper.1 | ---------------------------------- > [normal response] return of paper.1 The first response returning the list of variants is called a `list response'. The second response is a normal HTTP response: it does not contain special content negotiation related information. Only the user agent needs to know that the second request actually retrieves a variant. For the other parties in the communication, the second transaction is indistinguishable from a normal HTTP transaction. With this scheme, information about capabilities and preferences is only used by the user agent itself. Therefore, sending such information in large Accept- headers is unnecessary. Accept- headers do have a limited use in transparent content negotiation however; the sending of small Accept- headers can often speed up the negotiation process. This is covered in section 4.4. List responses are covered in section 10.1. As an example, the list response in the above picture could be: HTTP/1.1 300 Multiple Choices Date: Tue, 11 Jun 1996 20:02:21 GMT TCN: list Alternates: {"paper.1" 0.9 {type text/html} {language en}}, {"paper.2" 0.7 {type text/html} {language fr}}, {"paper.3" 1.0 {type application/postscript} {language en}} Vary: negotiate, accept, accept-language ETag: "blah;1234" Cache-control: max-age=86400 Content-Type: text/html Content-Length: 227 <h2>Multiple Choices:</h2> <ul> Holtman & Mutz Experimental [Page 11] RFC 2295 Transparent Content Negotiation March 1998 <li><a href=paper.1>HTML, English version</a> <li><a href=paper.2>HTML, French version</a> <li><a href=paper.3>Postscript, English version</a> </ul> The Alternates header in the response contains the variant list. The Vary header is included to ensure correct caching by plain HTTP/1.1 caches (see section 10.6). The ETag header allows the response to be revalidated by caches, the Cache-Control header controls this revalidation. The HTML entity included in the response allows the user to select the best variant by hand if desired. 4.4 Optimizing the negotiation process The basic transparent negotiation scheme involves two HTTP transactions: one to retrieve the list, and a second one to retrieve the chosen variant. There are however several ways to `cut corners' in the data flow path of the basic scheme. First, caching proxies can cache both variant lists and variants. Such caching can reduce the communication overhead, as shown in the following example: Server _____ proxy _____ proxy __________ user x.org cache cache agent < -------------- | GET ../paper | has the list in cache | ------------- > [list response] list | | choose | < -------------------------- | GET ../paper.1 | has the variant in cache | -------------------------- > [normal response] return of paper.1 Holtman & Mutz Experimental [Page 12] RFC 2295 Transparent Content Negotiation March 1998 Second, the user agent can send small Accept- headers, which may contain enough information to allow the server to choose the best variant and return it directly. Server _____ proxy _____ proxy _____ user x.org cache cache agent < ---------------------------------- | GET http://x.org/paper | small Accept- headers | able to choose on behalf of user agent | ---------------------------------- > [choice response] return of paper.1 and list This choosing based on small Accept- headers is done with a `remote variant selection algorithm'. Such an algorithm takes the variant list and the Accept- headers as input. It then computes whether the Accept- headers contain sufficient information to choose on behalf of the user agent, and if so, which variant is the best variant. If the best variant is a neighboring variant, it may be returned, together with the variant list, in a choice response. A server may only choose on behalf of a user agent supporting transparent content negotiation if the user agent explicitly allows the use of a particular remote variant selection algorithm in the Negotiate request header. User agents with sophisticated internal variant selection algorithms may want to disallow a remote choice, or may want to allow it only when retrieving inline images. If the local algorithm of the user agent is superior in only some difficult areas of negotiation, it is possible to enable the remote algorithm for the easy areas only. More information about the use of a remote variant selection algorithm can be found in [3]. Choice responses are covered in section 10.2. For example, the choice response in the above picture could be: HTTP/1.1 200 OK Date: Tue, 11 Jun 1996 20:05:31 GMT TCN: choice Content-Type: text/html Last-Modified: Mon, 10 Jun 1996 10:01:14 GMT Content-Length: 5327 Cache-control: max-age=604800 Content-Location: paper.1 Alternates: {"paper.1" 0.9 {type text/html} {language en}}, Holtman & Mutz Experimental [Page 13] RFC 2295 Transparent Content Negotiation March 1998 {"paper.2" 0.7 {type text/html} {language fr}}, {"paper.3" 1.0 {type application/postscript} {language en}} Etag: "gonkyyyy;1234" Vary: negotiate, accept, accept-language Expires: Thu, 01 Jan 1980 00:00:00 GMT <title>A paper about .... Finally, the above two kinds of optimization can be combined; a caching proxy which has the list will sometimes be able to choose on behalf of the user agent. This could lead to the following communication pattern: Server _____ proxy _____ proxy __________ user x.org cache cache agent < --------------- | GET ../paper | small Accept | able to choose on behalf | < ---------- | GET ../paper.1 | ---------- > [normal response] paper.1 | ---------------- > [choice response] paper.1 and list Note that this cutting of corners not only saves bandwidth, it also eliminates delays due to packet round trip times, and reduces the load on the origin server. 4.5 Downwards compatibility with non-negotiating user agents To handle requests from user agents which do not support transparent content negotiation, this specification allows the origin server to revert to a HTTP/1.0 style negotiation scheme. The specification of heuristics for such schemes is beyond the scope of this document. Holtman & Mutz Experimental [Page 14] RFC 2295 Transparent Content Negotiation March 1998 4.6 Retrieving a variant by hand It is always possible for a user agent to retrieve the variant list which is bound to a negotiable resource. The user agent can use this list to make available a menu of all variants and their characteristics to the user. Such a menu allows the user to randomly browse other variants, and makes it possible to manually correct any sub-optimal choice made by the automatic negotiation process. 4.7 Dimensions of negotiation Transparent content negotiation defines four dimensions of negotiation: 1. Media type (MIME type) 2. Charset 3. Language 4. Features The first three dimensions have traditionally been present in HTTP. The fourth dimension is added by this specification. Additional dimensions, beyond the four mentioned above, could be added by future specifications. Negotiation on the content encoding of a response (gzipped, compressed, etc.) is left outside of the realm of transparent negotiation. See section 10.8 for more information. 4.8 Feature negotiation Feature negotiation intends to provide for all areas of negotiation not covered by the type, charset, and language dimensions. Examples are negotiation on * HTML extensions * Extensions of other media types * Color capabilities of the user agent * Screen size * Output medium (screen, paper, ...) * Preference for speed vs. preference for graphical detail The feature negotiation framework (section 6) is the principal means by which transparent negotiation offers extensibility; a new dimension of negotiation (really a sub-dimension of the feature dimension) can be added without the need for a new standards effort by the simple registration of a `feature tag'. Holtman & Mutz Experimental [Page 15] RFC 2295 Transparent Content Negotiation March 1998 4.9 Length of variant lists As a general rule, variant lists should be short: it is expected that a typical transparently negotiable resource will have 2 to 10 variants, depending on its purpose. Variant lists should be short for a number of reasons: 1. The user must be able to pick a variant by hand to correct a bad automatic choice, and this is more difficult with a long variant list. 2. A large number of variants will decrease the efficiency of internet proxy caches. 3. Long variant lists will make some transparently negotiated responses longer. In general, it is not desirable to create a transparently negotiable resource with hundreds of variants in order to fine-tune the graphical presentation of a resource. Any graphical fine-tuning should be done, as much as possible, by using constructs which act at the user agent side, for example <center><img src=titlebanner.gif width=100% alt="MegaBozo Corp"></center> In order to promote user agent side fine tuning, which is more scalable than fine tuning over the network, user agents which implement a scripting language for content rendering are encouraged to make the availability of this language visible for transparent content negotiation, and to allow rendering scripts to access the capabilities and preferences data used for content negotiation, as far as privacy considerations permit this. 4.10 Relation with other negotiation schemes The HTTP/1.x protocol suite allows for many different negotiation mechanisms. Transparent content negotiation specializes in scalable, interoperable negotiation of content representations at the HTTP level. It is intended that transparent negotiation can co-exist with other negotiation schemes, both open and proprietary, which cover different application domains or work at different points in the author-to-user chain. Ultimately, it will be up to the resource author to decide which negotiation mechanism, or combination of negotiation mechanisms, is most appropriate for the task at hand. Holtman & Mutz Experimental [Page 16] RFC 2295 Transparent Content Negotiation March 1998 5 Variant descriptions 5.1 Syntax A variant can be described in a machine-readable way with a variant description. variant-description = "{" <"> URI <"> source-quality *variant-attribute"}" source-quality = qvalue variant-attribute = "{" "type" media-type "}" | "{" "charset" charset "}" | "{" "language" 1#language-tag "}" | "{" "length" 1*DIGIT "}" | "{" "features" feature-list "}" | "{" "description" quoted-string [ language-tag ] "}" | extension-attribute extension-attribute = "{" extension-name extension-value "}" extension-name = token extension-value = *( token | quoted-string | LWS | extension-specials ) extension-specials = <any element of tspecials except <"> and "}"> The feature-list syntax is defined in section 6.4. Examples are {"paper.2" 0.7 {type text/html} {language fr}} {"paper.5" 0.9 {type text/html} {features tables}} {"paper.1" 0.001} The various attributes which can be present in a variant description are covered in the subsections below. Each attribute may appear only once in a variant description. 5.2 URI The URI attribute gives the URI of the resource from which the variant can be retrieved with a GET request. It can be absolute or relative to the Request-URI. The variant resource may vary (on the Holtman & Mutz Experimental [Page 17] RFC 2295 Transparent Content Negotiation March 1998 Cookie request header, for example), but MUST NOT engage in transparent content negotiation itself. 5.3 Source-quality The source-quality attribute gives the quality of the variant, as a representation of the negotiable resource, when this variant is rendered with a perfect rendering engine on the best possible output medium. If the source-quality is less than 1, it often expresses a quality degradation caused by a lossy conversion to a particular data format. For example, a picture originally in JPEG form would have a lower source quality when translated to the XBM format, and a much lower source quality when translated to an ASCII-art variant. Note however, that degradation is a function of the source; an original piece of ASCII-art may degrade in quality if it is captured in JPEG form. The source-quality could also represent a level of quality caused by skill of language translation, or ability of the used media type to capture the intended artistic expression. Servers should use the following table a guide when assigning source quality values: 1.000 perfect representation 0.900 threshold of noticeable loss of quality 0.800 noticeable, but acceptable quality reduction 0.500 barely acceptable quality 0.300 severely degraded quality 0.000 completely degraded quality The same table can be used by local variant selection algorithms (see appendix 19) when assigning degradation factors for different content rendering mechanisms. Note that most meaningful values in this table are close to 1. This is due to the fact that quality factors are generally combined by multiplying them, not by adding them. When assigning source-quality values, servers should not account for the size of the variant and its impact on transmission and rendering delays; the size of the variant should be stated in the length attribute and any size-dependent calculations should be done by the variant selection algorithm. Any constant rendering delay for a particular media type (for example due to the startup time of a helper application) should be accounted for by the user agent, when assigning a quality factor to that media type. Holtman & Mutz Experimental [Page 18] RFC 2295 Transparent Content Negotiation March 1998 5.4 Type, charset, language, and length The type attribute of a variant description carries the same information as its Content-Type response header counterpart defined in [1], except for any charset information, which MUST be carried in the charset attribute. For, example, the header Content-Type: text/html; charset=ISO-8859-4 has the counterpart attributes {type text/html} {charset ISO-8859-4} The language and length attributes carry the same information as their Content-* response header counterparts in [1]. The length attribute, if present, MUST thus reflect the length of the variant alone, and not the total size of the variant and any objects inlined or embedded by the variant. Though all of these attributes are optional, it is often desirable to include as many attributes as possible, as this will increase the quality of the negotiation process. Note: A server is not required to maintain a one-to-one correspondence between the attributes in the variant description and the Content-* headers in the variant response. For example, if the variant description contains a language attribute, the response does not necessarily have to contain a Content-Language header. If a Content-Language header is present, it does not have to contain an exact copy of the information in the language attribute. 5.5 Features The features attribute specifies how the presence or absence of particular feature tags in the user agent affects the overall quality of the variant. This attribute is covered in section 6.4. 5.6 Description The description attribute gives a textual description of the variant. It can be included if the URI and normal attributes of a variant are considered too opaque to allow interpretation by the user. If a user agent is showing a menu of available variants compiled from a variant list, and if a variant has a description attribute, the user agent SHOULD show the description attribute of the variant instead of showing the normal attributes of the variant. The description field uses the UTF-8 character encoding scheme [5], which is a superset of Holtman & Mutz Experimental [Page 19] RFC 2295 Transparent Content Negotiation March 1998 US-ASCII, with ""%" HEX HEX" encoding. The optional language tag MAY be used to specify the language used in the description text. 5.7 Extension-attribute The extension-attribute allows future specifications to incrementally define dimensions of negotiation which cannot be created by using the feature negotiation framework, and eases content negotiation experiments. In experimental situations, servers MUST ONLY generate extension-attributes whose names start with "x-". User agents SHOULD ignore all extension attributes they do not recognize. Proxies MUST NOT run a remote variant selection algorithm if an unknown extension attribute is present in the variant list. 6 Feature negotiation This section defines the feature negotiation mechanism. Feature negotiation has been introduced in section 4.8. Appendix 19 contains examples of feature negotiation. 6.1 Feature tags A feature tag (ftag) identifies something which can be negotiated on, for example a property (feature) of a representation, a capability (feature) of a user agent, or the preference of a user for a particular type of representation. The use of feature tags need not be limited to transparent content negotiation, and not every feature tag needs to be usable in the HTTP transparent content negotiation framework. ftag = token | quoted-string Note: A protocol-independent system for feature tag registration is currently being developed in the IETF. This specification does not define any feature tags. In experimental situations, the use of tags which start with "x." is encouraged. Feature tags are used in feature sets (section 6.2) and in feature predicates (section 6.3). Feature predicates are in turn used in features attributes (section 6.4), which are used in variant descriptions (section 5). Variant descriptions can be transmitted in Alternates headers (section 8.3). The US-ASCII charset is used for feature tags. Feature tag comparison is case-insensitive. A token tag XYZ is equal to a quoted-string tag "XYZ". Examples are tables, fonts, blebber, wolx, screenwidth, colordepth Holtman & Mutz Experimental [Page 20] RFC 2295 Transparent Content Negotiation March 1998 An example of the use of feature tags in a variant description is: {"index.html" 1.0 {type text/html} {features tables frames}} This specification follows general computing practice in that it places no restrictions on what may be called a feature. At the protocol level, this specification does not distinguish between different uses of feature tags: a tag will be processed in the same way, no matter whether it identifies a property, capability, or preference. For some tags, it may be fluid whether the tag represents a property, preference, or capability. For example, in content negotiation on web pages, a "textonly" tag would identify a capability of a text-only user agent, but the user of a graphical user agent may use this tag to specify that text-only content is preferred over graphical content. 6.1.1 Feature tag values The definition of a feature tag may state that a feature tag can have zero, one, or more values associated with it. These values specialize the meaning of the tag. For example, a feature tag `paper' could be associated with the values `A4' and `A5'. tag-value = token | quoted-string The US-ASCII charset is used for feature tag values. Equality comparison for tag values MUST be done with a case-sensitive, octet- by-octet comparison, where any ""%" HEX HEX" encodings MUST be processed as in [1]. A token value XYZ is equal to a quoted-string value "XYZ". 6.2 Feature sets The feature set of a user agent is a data structure which records the capabilities of the user agent and the preferences of the user. Feature sets are used by local variant selection algorithms (see appendix 19 for an example). A user agent can use the Accept- Features header (section 8.2) to make some of the contents of its feature set known to remote variant selection algorithms. Structurally, a feature set is a possibly empty set, containing records of the form ( feature tag , set of feature tag values ) Holtman & Mutz Experimental [Page 21] RFC 2295 Transparent Content Negotiation March 1998 If a record with a feature tag is present in the set, this means that the user agent implements the corresponding capability, or that the user has expressed the corresponding preference. Each record in a feature set has a, possibly empty, set of tag values. For feature tags which cannot have values associated with it, this set is always empty. For feature tags which can have zero, one, or more values associated with it, this set contains those values currently associated with the tag. If the set of a feature tag T has the value V in it, it is said that `the tag T is present with the value V'. This specification does not define a standard notation for feature sets. An example of a very small feature set, in a mathematical notation, is { ( "frames" , { } ) , ( "paper" , { "A4" , "A5" } ) } As feature registration is expected to be an ongoing process, it is generally not possible for a user agent to know the meaning of all feature tags it can possibly encounter in a variant description. A user agent SHOULD treat all features tags unknown to it as absent from its feature set. A user agent may change the contents of its feature set depending on the type of request, and may also update it to reflect changing conditions, for example a change in the window size. Therefore, when considering feature negotiation, one usually talks about `the feature set of the current request'. 6.3 Feature predicates Feature predicates are predicates on the contents of feature sets. They appear in the features attribute of a variant description. fpred = [ "!" ] ftag | ftag ( "=" | "!=" ) tag-value | ftag "=" "[" numeric-range "]" numeric-range = [ number ] "-" [ number ] Feature predicates are used in features attributes (section 6.4), which are used in variant descriptions (section 5). Variant descriptions can be transmitted in Alternates headers (section 8.3). Holtman & Mutz Experimental [Page 22] RFC 2295 Transparent Content Negotiation March 1998 Examples of feature predicates are blebber, !blebber, paper=a4, colordepth=5, blex!=54, dpi=[300-599], colordepth=[24-] Using the feature set of the current request, a user agent SHOULD compute the truth value of the different feature predicates as follows. ftag true if the feature is present, false otherwise !ftag true if the feature is absent, false otherwise ftag=V true if the feature is present with the value V, false otherwise, ftag!=V true if the feature is not present with the value V, false otherwise, ftag=[N-M] true if the feature is present with at least one numeric value, while the highest value with which it is present in the range N-M, false otherwise. If N is missing, the lower bound is 0. If M is missing, the upper bound is infinity. As an example, with the feature set { ( "blex" , { } ), ( "colordepth" , { "5" } ), ( "UA-media" , { "stationary" } ), ( "paper" , { "A4", "A3" } ) , ( "x-version" , { "104", "200" } ) } the following predicates are true: blex, colordepth=[4-], colordepth!=6, colordepth, !screenwidth, UA- media=stationary, UA-media!=screen, paper=A4, paper =!A0, colordepth=[ 4 - 6 ], x-version=[100-300], x-version=[200-300] and the following predicates are false: !blex, blebber, colordepth=6, colordepth=foo, !colordepth, screenwidth, screenwidth=640, screenwidth!=640, x-version=99, UA- media=screen, paper=A0, paper=a4, x-version=[100-199], wuxta Holtman & Mutz Experimental [Page 23] RFC 2295 Transparent Content Negotiation March 1998 6.4 Features attribute The features attribute, for which section 5.1 defines the syntax "{" "features" feature-list "}" is used in a variant description to specify how the presence or absence of particular feature tags in the user agent affects the overall quality of the variant. feature-list = 1%feature-list-element feature-list-element = ( fpred | fpred-bag ) [ ";" [ "+" true-improvement ] [ "-" false-degradation ] ] fpred-bag = "[" 1%fpred "]" true-improvement = short-float false-degradation = short-float Features attributes are used in variant descriptions (section 5). Variant descriptions can be transmitted in Alternates headers (section 8.3). Examples are: {features !textonly [blebber !wolx] colordepth=3;+0.7} {features !blink;-0.5 background;+1.5 [blebber !wolx];+1.4-0.8} The default value for the true-improvement is 1. The default value for the false-degradation is 0, or 1 if a true-improvement value is given. A user agent SHOULD, and a remote variant selection algorithm MUST compute the quality degradation factor associated with the features attribute by multiplying all quality degradation factors of the elements of the feature-list. Note that the result can be a factor greater than 1. A feature list element yields its true-improvement factor if the corresponding feature predicate is true, or if at least one element of the corresponding fpred-bag is true. The element yields its false-degradation factor otherwise. Holtman & Mutz Experimental [Page 24] RFC 2295 Transparent Content Negotiation March 1998 7 Remote variant selection algorithms A remote variant selection algorithm is a standardized algorithm by which a server can choose a best variant on behalf of a negotiating user agent. The use of a remote algorithm can speed up the negotiation process by eliminating a request-response round trip. A remote algorithm typically computes whether the Accept- headers in the request contain sufficient information to allow a choice, and if so, which variant is the best variant. This specification does not define any remote algorithms, but does define a mechanism to negotiate on the use of such algorithms. 7.1 Version numbers A version numbering scheme is used to distinguish between different remote variant selection algorithms. rvsa-version = major "." minor major = 1*4DIGIT minor = 1*4DIGIT An algorithm with the version number X.Y, with Y>0, MUST be downwards compatible with all algorithms from X.0 up to X.Y. Downwards compatibility means that, if supplied with the same information, the newer algorithm MUST make the same choice, or a better choice, as the old algorithm. There are no compatibility requirements between algorithms with different major version numbers. 8 Content negotiation status codes and headers This specification adds one new HTTP status code, and introduces six new HTTP headers. It also extends the semantics of an existing HTTP/1.1 header. 8.1 506 Variant Also Negotiates The 506 status code indicates that the server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process. Holtman & Mutz Experimental [Page 25] RFC 2295 Transparent Content Negotiation March 1998 8.2 Accept-Features The Accept-Features request header can be used by a user agent to give information about the presence or absence of certain features in the feature set of the current request. Servers can use this information when running a remote variant selection algorithm. Note: the name `Accept-Features' for this header was chosen because of symmetry considerations with other Accept- headers, even though the Accept-Features header will generally not contain an exhaustive list of features which are somehow `accepted'. A more accurate name of this header would have been `Feature-Set- Info'. Accept-Features = "Accept-Features" ":" #( feature-expr *( ";" feature-extension ) ) feature-expr = [ "!" ] ftag | ftag ( "=" | "!=" ) tag-value | ftag "=" "{" tag-value "}" | "*" feature-extension = token [ "=" ( token | quoted-string ) ] No feature extensions are defined in this specification. An example is: Accept-Features: blex, !blebber, colordepth={5}, !screenwidth, paper = A4, paper!="A2", x-version=104, * The different feature expressions have the following meaning: ftag ftag is present !ftag ftag is absent ftag=V ftag is present with the value V ftag!=V ftag is present, but not with the value V ftag={V} ftag is present with the value V, and not with any other values * the expressions in this header do not fully describe the feature set: feature tags not mentioned in this header may also be present, and, except for the case ftag={V}, tags may be present with more values than mentioned. Holtman & Mutz Experimental [Page 26] RFC 2295 Transparent Content Negotiation March 1998 Absence of the Accept-Features header in a request is equivalent to the inclusion of Accept-Features: * By using the Accept-Features header, a remote variant selection algorithm can sometimes determine the truth value of a feature predicate on behalf of the user agent. For example, with the header Accept-Features: blex, !blebber, colordepth={5}, !screenwidth, paper = A4, paper!="A2", x-version=104, * the algorithm can determine that the following predicates are true: blex, colordepth=[4-], colordepth!=6, colordepth, !screenwidth, paper=A4, colordepth=[4-6] and that the following predicates are false: !blex, blebber, colordepth=6, colordepth=foo, !colordepth, screenwidth, screenwidth=640, screenwidth!=640, but the truth value of the following predicates cannot be determined: UA-media=stationary, UA-media!=screen, paper!=a0, x-version=[100-300], x-version=[200-300], x-version=99, UA-media=screen, paper=A0, paper=a4, x-version=[100-199], wuxta 8.3 Alternates The Alternates response header is used to convey the list of variants bound to a negotiable resource. This list can also include directives for any content negotiation process. If a response from a transparently negotiable resource includes an Alternates header, this header MUST contain the complete variant list bound to the negotiable resource. Responses from resources which do not support transparent content negotiation MAY also use Alternates headers. Alternates = "Alternates" ":" variant-list variant-list = 1#( variant-description | fallback-variant | list-directive ) fallback-variant = "{" <"> URI <"> "}" list-directive = ( "proxy-rvsa" "=" <"> 0#rvsa-version <"> ) Holtman & Mutz Experimental [Page 27] RFC 2295 Transparent Content Negotiation March 1998 | extension-list-directive extension-list-directive = token [ "=" ( token | quoted-string ) ] An example is Alternates: {"paper.1" 0.9 {type text/html} {language en}}, {"paper.2" 0.7 {type text/html} {language fr}}, {"paper.3" 1.0 {type application/postscript} {language en}}, proxy-rvsa="1.0, 2.5" Any relative URI specified in a variant-description or fallback- variant field is relative to the request-URI. Only one fallback- variant field may be present. If the variant selection algorithm of the user agent finds that all described variants are unacceptable, then it SHOULD choose the fallback variant, if present, as the best variant. If the user agent computes the overall quality values of the described variants, and finds that several variants share the highest value, then the first variant with this value in the list SHOULD be chosen as the best variant. The proxy-rvsa directive restricts the use of remote variant selection algorithms by proxies. If present, a proxy MUST ONLY use algorithms which have one of the version numbers listed, or have the same major version number and a higher minor version number as one of the versions listed. Any restrictions set by proxy-rvsa come on top of the restrictions set by the user agent in the Negotiate request header. The directive proxy-rvsa="" will disable variant selection by proxies entirely. Clients SHOULD ignore all extension-list- directives they do not understand. A variant list may contain multiple differing descriptions of the same variant. This can be convenient if the variant uses conditional rendering constructs, or if the variant resource returns multiple representations using a multipart media type. 8.4 Negotiate The Negotiate request header can contain directives for any content negotiation process initiated by the request. Negotiate = "Negotiate" ":" 1#negotiate-directive negotiate-directive = "trans" | "vlist" | "guess-small" Holtman & Mutz Experimental [Page 28] RFC 2295 Transparent Content Negotiation March 1998 | rvsa-version | "*" | negotiate-extension negotiate-extension = token [ "=" token ] Examples are Negotiate: 1.0, 2.5 Negotiate: * The negotiate directives have the following meaning "trans" The user agent supports transparent content negotiation for the current request. "vlist" The user agent requests that any transparently negotiated response for the current request includes an Alternates header with the variant list bound to the negotiable resource. Implies "trans". "guess-small" The user agent allows origin servers to run a custom algorithm which guesses the best variant for the request, and to return this variant in a choice response, if the resulting choice response is smaller than or not much larger than a list response. The definition of `not much larger' is left to origin server heuristics. Implies "vlist" and "trans". rvsa-version The user agent allows origin servers and proxies to run the remote variant selection algorithm with the indicated version number, or with the same major version number and a higher minor version number. If the algorithm has sufficient information to choose a best, neighboring variant, the origin server or proxy MAY return a choice response with this variant. Implies "trans". "*" The user agent allows origin servers and proxies to run any remote variant selection algorithm. The origin server may even run algorithms which have not been standardized. If the algorithm has sufficient information to choose a best, neighboring variant, the origin server or proxy MAY return a choice response with this variant. Implies "trans". Holtman & Mutz Experimental [Page 29] RFC 2295 Transparent Content Negotiation March 1998 Servers SHOULD ignore all negotiate-directives they do not understand. If the Negotiate header allows a choice between multiple remote variant selection algorithms which are all supported by the server, the server SHOULD use some internal precedence heuristics to select the best algorithm. 8.5 TCN The TCN response header is used by a server to signal that the resource is transparently negotiated. TCN = "TCN" ":" #( response-type | server-side-override-directive | tcn-extension ) response-type = "list" | "choice" | "adhoc" server-side-override-directive = "re-choose" | "keep" tcn-extension = token [ "=" ( token | quoted-string ) ] If the resource is not transparently negotiated, a TCN header MUST NOT be included in any response. If the resource is transparently negotiated, a TCN header, which includes the response-type value of the response, MUST be included in every response with a 2xx status code or any 3xx status code, except 304, in which it MAY be included. A TCN header MAY also be included, without a response-type value, in other responses from transparently negotiated resources. A server-side override directive MUST be included if the origin server performed a server-side override when choosing the response. If the directive is "re-choose", the server MUST include an Alternates header with the variant bound to the negotiable resource in the response, and user agent SHOULD use its internal variant selection algorithm to choose, retrieve, and display the best variant from this list. If the directive is "keep" the user agent SHOULD NOT renegotiate on the response, but display it directly, or act on it directly if it is a redirection response. Clients SHOULD ignore all tcn-extensions they do not understand. 8.6 Variant-Vary The Variant-Vary response header can be used in a choice response to record any vary information which applies to the variant data (the entity body combined with some of the entity headers) contained in the response, rather than to the response as a whole. Holtman & Mutz Experimental [Page 30] RFC 2295 Transparent Content Negotiation March 1998 Variant-Vary = "Variant-Vary" ":" ( "*" | 1#field-name ) Use of the Variant-Vary header is discussed in section 10.2. 9 Cache validators To allow for correct and efficient caching and revalidation of negotiated responses, this specification extends the caching model of HTTP/1.1 [1] in various ways. This specification does not introduce a `variant-list-max-age' directive which explicitly bounds the freshness lifetime of a cached variant list, like the `max-age' Cache-Control directive bounds the freshness lifetime of a cached response. However, this specification does ensure that a variant list which is sent at a time T by the origin server will never be re-used without revalidation by semantically transparent caches after the time T+M. This M is the maximum of all freshness lifetimes assigned (using max-age directives or Expires headers) by the origin server to a. the responses from the negotiable resource itself, and b. the responses from its neighboring variant resources If no freshness lifetimes are assigned by the origin server, M is the maximum of the freshness lifetimes which were heuristically assigned by all caches which can re-use the variant list. 9.1 Variant list validators A variant list validator is an opaque value which acts as the cache validator of a variant list bound to a negotiable resource. variant-list-validator = <quoted-string not containing any ";"> If two responses contain the same variant list validator, a cache can treat the Alternates headers in these responses as equivalent (though the headers themselves need not be identical). 9.2 Structured entity tags A structured entity tag consists of a normal entity tag of which the opaque string is extended with a semicolon followed by the text (without the surrounding quotes) of a variant list validator: Holtman & Mutz Experimental [Page 31] RFC 2295 Transparent Content Negotiation March 1998 normal | variant list | structured entity tag | validator | entity tag -------------+----------------+----------------- "etag" | "vlv" | "etag;vlv" W/"etag" | "vlv" | W/"etag;vlv" Note that a structured entity tag is itself also an entity tag. The structured nature of the tag allows caching proxies capable of transparent content negotiation to perform some optimizations defined in section 10. When not performing such optimizations, a structured tag SHOULD be treated as a single opaque value, according to the general rules in HTTP/1.1. Examples of structured entity tags are: "xyzzy;1234" W/"xyzzy;1234" "gonkxxxx;1234" "a;b;c;;1234" In the last example, the normal entity tag is "a;b;c;" and the variant list validator is "1234". If a transparently negotiated response includes an entity tag, it MUST be a structured entity tag. The variant list validator in the structured tag MUST act as a validator for the variant list contained in the Alternates header. The normal entity tag in the structured tag MUST act as a validator of the entity body in the response and of all entity headers except Alternates. 9.3 Assigning entity tags to variants To allow for correct revalidation of transparently negotiated responses by clients, origin servers SHOULD generate all normal entity tags for the neighboring variant resources of the negotiable resource in such a way that 1. the same tag is never used by two different variants, unless this tag labels exactly the same entity on all occasions, 2. if one normal tag "X" is a prefix of another normal tag "XY", then "Y" must never be a semicolon followed by a variant list validator. 10 Content negotiation responses If a request on a transparently negotiated resource yields a response with a 2xx status code or any 3xx status code except 304, this response MUST always be either a list response, a choice response, or an adhoc response. These responses MUST always include a TCN header which specifies their type. Transparently negotiated responses with other status codes MAY also include a TCN header. Holtman & Mutz Experimental [Page 32] RFC 2295 Transparent Content Negotiation March 1998 The conditions under which the different content negotiation responses may be sent are defined in section 12.1 for origin servers and in section 13 for proxies. After having constructed a list, choice, or adhoc response, a server MAY process any If-No-Match or If-Range headers in the request message and shorten the response to a 304 (Not Modified) or 206 (Partial Content) response, following the rules in the HTTP/1.1 specification [1]. In this case, the entity tag of the shortened response will identify it indirectly as a list, choice, or adhoc response. 10.1 List response A list response returns the variant list of the negotiable resource, but no variant data. It can be generated when the server does not want to, or is not allowed to, return a particular best variant for the request. If the user agent supports transparent content negotiation, the list response will cause it to select a best variant and retrieve it. A list response MUST contain (besides the normal headers required by HTTP) a TCN header which specifies the "list" response-type, the Alternates header bound to the negotiable resource, a Vary header and (unless it was a HEAD request) an entity body which allows the user to manually select the best variant. An example of a list response is HTTP/1.1 300 Multiple Choices Date: Tue, 11 Jun 1996 20:02:21 GMT TCN: list Alternates: {"paper.1" 0.9 {type text/html} {language en}}, {"paper.2" 0.7 {type text/html} {language fr}}, {"paper.3" 1.0 {type application/postscript} {language en}} Vary: negotiate, accept, accept-language ETag: "blah;1234" Cache-control: max-age=86400 Content-Type: text/html Content-Length: 227 <h2>Multiple Choices:</h2> <ul> <li><a href=paper.1>HTML, English version</a> <li><a href=paper.2>HTML, French version</a> <li><a href=paper.3>Postscript, English version</a> </ul> Holtman & Mutz Experimental [Page 33] RFC 2295 Transparent Content Negotiation March 1998 Note: A list response can have any status code, but the 300 (Multiple Choices) code is the most appropriate one for HTTP/1.1 clients. Some existing versions of HTTP/1.0 clients are known to silently ignore 300 responses, instead of handling them according to the HTTP/1.0 specification [2]. Servers should therefore be careful in sending 300 responses to non-negotiating HTTP/1.0 user agents, and in making these responses cacheable. The 200 (OK) status code can be used instead. The Vary header in the response SHOULD ensure correct handling by plain HTTP/1.1 caching proxies. This header can either be Vary: * or a more elaborate header; see section 10.6.1. Only the origin server may construct list responses. Depending on the status code, a list response is cacheable unless indicated otherwise. According to the HTTP/1.1 specification [1], a user agent which does not support transparent content negotiation will, when receiving a list response with the 300 status code, display the entity body included in the response. If the response contains a Location header, however, the user agent MAY automatically redirect to this location. The handling of list responses by clients supporting transparent content negotiation is described in sections 11.1 and 13. 10.2 Choice response A choice response returns a representation of the best variant for the request, and may also return the variant list of the negotiable resource. It can be generated when the server has sufficient information to be able to choose the best variant on behalf the user agent, but may only be generated if this best variant is a neighboring variant. For request from user agents which do not support transparent content negotiation, a server may always generate a choice response, provided that the variant returned is a neighboring variant. The variant returned in a choice response need not necessarily be listed in the variant list bound to the negotiable resource. Holtman & Mutz Experimental [Page 34] RFC 2295 Transparent Content Negotiation March 1998 A choice response merges a normal HTTP response from the chosen variant, a TCN header which specifies the "choice" response-type, and a Content-Location header giving the location of the variant. Depending on the status code, a choice response is cacheable unless indicated otherwise. Origin servers and proxy caches MUST construct choice responses with the following algorithm (or any other algorithm which gives equal end results for the client). In this algorithm, `the current Alternates header' refers to the Alternates header containing the variant list which was used to choose the best variant, and `the current variant list validator' refers to the validator of this list. Section 10.4 specifies how these two items can be obtained by a proxy cache. The algorithm consists of four steps. 1. Construct a HTTP request message on the best variant resource by rewriting the request-URI and Host header (if appropriate) of the received request message on the negotiable resource. 2. Generate a valid HTTP response message, but not one with the 304 (Not Modified) code, for the request message constructed in step 1. In a proxy cache, the response can be obtained from cache memory, or by passing the constructed HTTP request towards the origin server. If the request is passed on, the proxy MAY add, modify, or delete If-None-Match and If-Range headers to optimize the transaction with the upstream server. Note: the proxy should be careful not to add entity tags of non-neighboring variants to If-* (conditional) headers of the request, as there are no global uniqueness requirements for these tags. 3. Only in origin servers: check for an origin server configuration error. If the HTTP response message generated in step 2 contains a TCN header, then the best variant resource is not a proper end point in the transparent negotiation process, and a 506 (Variant Also Negotiates) error response message SHOULD be generated instead of going to step 4. 4. Add a number of headers to the HTTP response message generated in step 2. Holtman & Mutz Experimental [Page 35] RFC 2295 Transparent Content Negotiation March 1998 a. Add a TCN header which specifies the "choice" response-type. b. Add a Content-Location header giving the location of the chosen variant. Delete any Content-Location header which was already present. Note: According to the HTTP/1.1 specification [1], if the Content-Location header contains a relative URI, this URI is relative to the URI in the Content-Base header, if present, and relative to the request-URI if no Content- Base header is present. c. If any Vary headers are present in the response message from step 2, add, for every Vary header, a Variant-Vary header with a copy of the contents of this Vary header. d. Delete any Alternates headers which are present in in the response. Now, the current Alternates header MUST be added if this is required by the Negotiate request header, or if the server returns "re-choose" in the TCN response header. Otherwise, the current Alternates header MAY be added. Note: It is usually a good strategy to always add the current Alternates header, unless it is very large compared to the rest of the response. e. Add a Vary header to ensure correct handling by plain HTTP/1.1 caching proxies. This header can either be Vary: * or a more elaborate header, see section 10.6. f. To ensure compatibility with HTTP/1.0 caching proxies which do not recognize the Vary header, an Expires header with a date in the past MAY be added. See section 10.7 for more information. g. If an ETag header is present in the response message from step 2, then extend the entity tag in that header with the current variant list validator, as specified in section 9.2. Note: Step g. is required even if the variant list itself is not added in step d. h. Only in proxy caches: set the Age header of the response to max( variant_age , alternates_age ) Holtman & Mutz Experimental [Page 36] RFC 2295 Transparent Content Negotiation March 1998 where variant_age is the age of the variant response obtained in step 2, calculated according to the rules in the HTTP/1.1 specification [1], and alternates_age is the age of the Alternates header added in step d, calculated according to the rules in section 10.4. Note that a server can shorten the response produced by the above algorithm to a 304 (Not Modified) response if an If-None-Match header in the original request allows it. If this is the case, an implementation of the above algorithm can avoid the unnecessary internal construction of full response message in step 2, it need only construct the parts which end up in the final 304 response. A proxy cache which implements this optimization can sometimes generate a legal 304 response even if it has not cached the variant data itself. An example of a choice response is: HTTP/1.1 200 OK Date: Tue, 11 Jun 1996 20:05:31 GMT TCN: choice Content-Type: text/html Last-Modified: Mon, 10 Jun 1996 10:01:14 GMT Content-Length: 5327 Cache-control: max-age=604800 Content-Location: paper.1 Alternates: {"paper.1" 0.9 {type text/html} {language en}}, {"paper.2" 0.7 {type text/html} {language fr}}, {"paper.3" 1.0 {type application/postscript} {language en}} Etag: "gonkyyyy;1234" Vary: negotiate, accept, accept-language Expires: Thu, 01 Jan 1980 00:00:00 GMT <title>A paper about .... 10.3 Adhoc response An adhoc response can be sent by an origin server as an extreme measure, to achieve compatibility with a non-negotiating or buggy client if this compatibility cannot be achieved by sending a list or choice response. There are very little requirements on the contents of an adhoc response. An adhoc response MUST have a TCN header which specifies the "adhoc" response-type, and a Vary header if the response is cacheable. It MAY contain the Alternates header bound to the negotiable resource. Holtman & Mutz Experimental [Page 37] RFC 2295 Transparent Content Negotiation March 1998 Any Vary header in the response SHOULD ensure correct handling by plain HTTP/1.1 caching proxies. This header can either be Vary: * or a more elaborate header, see section 10.6.1. Depending on the status code, an adhoc response is cacheable unless indicated otherwise. As an example of the use of an adhoc response, suppose that the variant resource "redirect-to-blah" yields redirection (302) responses. A choice response with this variant could look as follows: HTTP/1.1 302 Moved Temporarily Date: Tue, 11 Jun 1996 20:02:28 GMT TCN: choice Content-location: redirect-to-blah Location: http://blah.org/ Content-Type: text/html Content-Length: 62 This document is available <a href=http://blah.org/>here</a>. Suppose that the server knows that the receiving user agent has a bug, which causes it to crash on responses which contain both a Content-Location and a Location header. The server could then work around this bug by performing a server-side override and sending the following adhoc response instead: HTTP/1.1 302 Moved Temporarily Date: Tue, 11 Jun 1996 20:02:28 GMT TCN: adhoc, keep Location: http://blah.org/ Content-Type: text/html Content-Length: 62 This document is available <a href=http://blah.org/>here</a>. 10.4 Reusing the Alternates header If a proxy cache has available a negotiated response which is cacheable, fresh, and has ETag and Alternates headers, then it MAY extract the Alternates header and associated variant list validator from the response, and reuse them (without unnecessary delay) to Holtman & Mutz Experimental [Page 38] RFC 2295 Transparent Content Negotiation March 1998 negotiate on behalf of the user agent (section 13) or to construct a choice response (section 10.2). The age of the extracted Alternates header is the age of the response from which it is extracted, calculated according to the rules in the HTTP/1.1 specification [1]. 10.5 Extracting a normal response from a choice response If a proxy receives a choice response, it MAY extract and cache the normal HTTP response contained therein. The normal response can be extracted by taking a copy of the choice response and then deleting any Content-Location, Alternates, and Vary headers, renaming any Variant-Vary headers to Vary headers, and shortening the structured entity tag in any ETag header to a normal entity tag. This normal response MAY be cached (as a HTTP response to the variant request as constructed in step 1. of section 10.2) and reused to answer future direct requests on the variant resource, according to the rules in the HTTP/1.1 specification [1]. Note: The caching of extracted responses can decrease the upstream bandwidth usage with up to a factor 2, because two independent HTTP/1.1 cache entries, one associated with the negotiable resource URI and one with the variant URI, are created in the same transaction. Without this optimization, both HTTP/1.1 cache entries can only be created by transmitting the variant data twice. For security reasons (see section 14.2), an extracted normal response MUST NEVER be cached if belongs to a non-neighboring variant resource. If the choice response claims to contain data for a non- neighboring variant resource, the proxy SHOULD reject the choice response as a probable spoofing attempt. 10.6 Elaborate Vary headers If a HTTP/1.1 [1] server can generate varying responses for a request on some resource, then the server MUST include a Vary header in these responses if they are cacheable. This Vary header is a signal to HTTP/1.1 caches that something special is going on. It prevents the caches from returning the currently chosen response for every future request on the resource. Servers engaging in transparent content negotiation will generate varying responses. Therefore, cacheable list, choice, and adhoc responses MUST always include a Vary header. Holtman & Mutz Experimental [Page 39] RFC 2295 Transparent Content Negotiation March 1998 The most simple Vary header which can be included is Vary: * This header leaves the way in which the response is selected by the server completely unspecified. A more elaborate Vary header MAY be used to allow for certain optimizations in HTTP/1.1 caches which do not have specific optimizations for transparent content negotiation, but which do cache multiple variant responses for one resource. Such a more elaborate Vary header lists all request headers which can be used by the server when selecting a response for a request on the resource. 10.6.1 Construction of an elaborate Vary header Origin servers can construct a more elaborate Vary header in the following way. First, start with the header Vary: negotiate `negotiate' is always included because servers use the information in the Negotiate header when choosing between a list, choice, or adhoc response. Then, if any of the following attributes is present in any variant description in the Alternates header, add the corresponding header name to the Vary header attribute | header name to add -----------+--------------------- type | accept charset | accept-charset language | accept-language features | accept-features The Vary header constructed in this way specifies the response variation which can be caused by the use of a variant selection algorithm in proxies. If the origin server will in some cases, for example if contacted by a non-negotiating user agent, use a custom negotiation algorithm which takes additional headers into account, these names of these headers SHOULD also be added to the Vary header. Holtman & Mutz Experimental [Page 40] RFC 2295 Transparent Content Negotiation March 1998 10.6.2 Caching of an elaborate Vary header A proxy cache cannot construct an elaborate vary header using the method above, because this method requires exact knowledge of any custom algorithms present in the origin server. However, when extracting an Alternates header from a response (section 10.4) caches MAY also extract the Vary header in the response, and reuse it along with the Alternates header. A clean Vary header can however only be extracted if the variant does not vary itself, i.e. if a Variant-Vary header is absent. 10.7 Adding an Expires header for HTTP/1.0 compatibility To ensure compatibility with HTTP/1.0 caching proxies which do not recognize the Vary header, an Expires header with a date in the past can be added to the response, for example Expires: Thu, 01 Jan 1980 00:00:00 GMT If this is done by an origin server, the server SHOULD usually also include a Cache-Control header for the benefit of HTTP/1.1 caches, for example Cache-Control: max-age=604800 which overrides the freshness lifetime of zero seconds specified by the included Expires header. Note: This specification only claims downwards compatibility with the HTTP/1.0 proxy caches which implement the HTTP/1.0 specification [2]. Some legacy proxy caches which return the HTTP/1.0 protocol version number do not honor the HTTP/1.0 Expires header as specified in [2]. Methods for achieving compatibility with such proxy caches are beyond the scope of this specification. 10.8 Negotiation on content encoding Negotiation on the content encoding of a response is orthogonal to transparent content negotiation. The rules for when a content encoding may be applied are the same as in HTTP/1.1: servers MAY content-encode responses that are the result of transparent content negotiation whenever an Accept-Encoding header in the request allows it. When negotiating on the content encoding of a cacheable response, servers MUST add the accept-encoding header name to the Vary header of the response, or add `Vary: *'. Holtman & Mutz Experimental [Page 41] RFC 2295 Transparent Content Negotiation March 1998 Servers SHOULD always be able to provide unencoded versions of every transparently negotiated response. This means in particular that every variant in the variant list SHOULD at least be available in an unencoded form. Like HTTP/1.1, this specification allows proxies to encode or decode relayed or cached responses on the fly, unless explicitly forbidden by a Cache-Control directive. The encoded or decoded response still contains the same variant as far as transparent content negotiation is concerned. Note that HTTP/1.1 requires proxies to add a Warning header if the encoding of a response is changed. 11 User agent support for transparent negotiation This section specifies the requirements a user agent needs to satisfy in order to support transparent negotiation. If the user agent contains an internal cache, this cache MUST conform to the rules for proxy caches in section 13. 11.1 Handling of responses If a list response is received when a resource is accessed, the user agent MUST be able to automatically choose, retrieve, and display the best variant, or display an error message if none of the variants are acceptable. If a choice response is received when a resource is accessed, the usual action is to automatically display the enclosed entity. However, if a remote variant selection algorithm which was enabled could have made a choice different from the choice the local algorithm would make, the user agent MAY apply its local algorithm to any variant list in the response, and automatically retrieve and display another variant if the local algorithm makes an other choice. When receiving a choice response, a user agent SHOULD check if variant resource is a neighboring variant resource of the negotiable resource. If this is not the case, the user agent SHOULD reject the choice response as a probable spoofing attempt and display an error message, for example by internally replacing the choice response with a 502 (bad gateway) response. 11.2 Presentation of a transparently negotiated resource If the user agent is displaying a variant which is not an embedded or inlined object and which is the result of transparent content negotiation, the following requirements apply. Holtman & Mutz Experimental [Page 42] RFC 2295 Transparent Content Negotiation March 1998 1. The user agent SHOULD allow the user to review a list of all variants bound to the negotiable resource, and to manually retrieve another variant if desired. There are two general ways of providing such a list. First, the information in the Alternates header of the negotiable resource could be used to make an annotated menu of variants. Second, the entity included in a list response of the negotiable resource could be displayed. Note that a list response can be obtained by doing a GET request which only has the "trans" directive in the Negotiate header. 2. The user agent SHOULD make available though its user interface some indication that the resource being displayed is a negotiated resource instead of a plain resource. It SHOULD also allow the user to examine the variant list included in the Alternates header. Such a notification and review mechanism is needed because of privacy considerations, see section 14.1. 3. If the user agent shows the URI of the displayed information to the user, it SHOULD be the negotiable resource URI, not the variant URI that is shown. This encourages third parties, who want to refer to the displayed information in their own documents, to make a hyperlink to the negotiable resource as a whole, rather than to the variant resource which happens to be shown. Such correct linking is vital for the interoperability of content across sites. The user agent SHOULD however also provide a means for reviewing the URI of the particular variant which is currently being displayed. 4. Similarly, if the user agent stores a reference to the displayed information for future use, for example in a hotlist, it SHOULD store the negotiable resource URI, not the variant URI. It is encouraged, but not required, that some of the above functionality is also made available for inlined or embedded objects, and when a variant which was selected manually is being displayed. 12 Origin server support for transparent negotiation 12.1 Requirements To implement transparent negotiation on a resource, the origin server MUST be able to send a list response when getting a GET request on the resource. It SHOULD also be able to send appropriate list responses for HEAD requests. When getting a request on a transparently negotiable resource, the origin server MUST NEVER return a response with a 2xx status code or any 3xx status code, except 304, which is not a list, choice, or adhoc response. Holtman & Mutz Experimental [Page 43] RFC 2295 Transparent Content Negotiation March 1998 If the request includes a Negotiate header with a "vlist" or "trans" directive, but without any directive which allows the server to select a best variant, a list response MUST ALWAYS be sent, except when the server is performing a server-side override for bug compatibility. If the request includes a Negotiate header with a "vlist" or "guess-small" directive, an Alternates header with the variant list bound to the negotiable resource MUST ALWAYS be sent in any list, choice, or adhoc response, except when the server is performing a server-side override for bug compatibility. If the Negotiate header allows it, the origin server MAY run a remote variant selection algorithm. If the algorithm has sufficient information to choose a best variant, and if the best variant is a neighboring variant, the origin server MAY return a choice response with this variant. When getting a request on a transparently negotiable resource from a user agent which does not support transparent content negotiation, the origin server MAY use a custom algorithm to select between sending a list, choice, or adhoc response. The following table summarizes the rules above. |Req on |Usr agnt|server- | Response may be: | |trans neg|capable |side +------+------+------+------+------+ |resource?|of TCN? |override?|list |choice|adhoc |normal|error | +---------+--------+---------+------+------+------+------+------+ | Yes | Yes | No |always|smt(*)|never |never |always| +---------+--------+---------+------+------+------+------+------+ | Yes | Yes | Yes |always|always|always|never |always| +---------+--------+---------+------+------+------+------+------+ | Yes | No | - |always|always|always|never |always| +---------+--------+---------+------+------+------+------+------+ | No | - | - |never |never |never |always|always| +---------+--------+---------+------+------+------+------+------+ (*) sometimes, when allowed by the Negotiate request header Negotiability is a binary property: a resource is either transparently negotiated, or it is not. Origin servers SHOULD NOT vary the negotiability of a resource, or the variant list bound to that resource, based on the request headers which are received. The variant list and the property of being negotiated MAY however change through time. The Cache-Control header can be used to control the propagation of such time-dependent changes through caches. It is the responsibility of the author of the negotiable resource to ensure that all resources in the variant list serve the intended content, and that the variant resources do not engage in transparent Holtman & Mutz Experimental [Page 44] RFC 2295 Transparent Content Negotiation March 1998 content negotiation themselves. 12.2 Negotiation on transactions other than GET and HEAD If a resource is transparently negotiable, this only has an impact on the GET and HEAD transactions on the resource. It is not possible (under this specification) to do transparent content negotiation on the direct result of a POST request. However, a POST request can return an unnegotiated 303 (See Other) response which causes the user agent to do a GET request on a second resource. This second resource could then use transparent content negotiation to return an appropriate final response. The figure below illustrates this. Server ______ proxy ______ proxy ______ user x.org cache cache agent < ------------------------------------- | POST http://x.org/cgi/submit | <form contents in request body> | -------------------------------------- > 303 See Other | Location: http://x.org/result/OK | | < ------------------------------------- | GET http://x.org/result/OK | small Accept- headers | able to choose on behalf of user agent | ------------------------------------- > choice response with | ..result/OK.nl variant | displays OK.nl See the HTTP/1.1 specification [1] for details on the 303 (See Other) status code. Note that this status code is not understood by some HTTP/1.0 clients. 13 Proxy support for transparent negotiation Transparent content negotiation is an extension on top of HTTP/1.x. It is designed to work through any proxy which only implements the HTTP/1.1 specification [1]. If Expires headers are added as discussed in section 10.7, negotiation will also work though proxies Holtman & Mutz Experimental [Page 45] RFC 2295 Transparent Content Negotiation March 1998 which implement HTTP/1.0 [2]. Thus, every HTTP/1.0 or HTTP/1.1 proxy provides support for transparent content negotiation. However, if it is to be claimed that a HTTP/1.x proxy offers transparent content negotiation services, at least one of the specific optimizations below MUST be implemented. An HTTP/1.x proxy MUST ONLY optimize (change) the HTTP traffic flowing through it in ways which are explicitly allowed by the specification(s) it conforms to. A proxy which supports transparent content negotiation on top of HTTP/1.x MAY perform the optimizations allowed for by HTTP/1.x. In addition, it MAY perform three additional optimizations, defined below, on the HTTP traffic for transparently negotiated resources and their neighboring variant resources. First, when getting a request on a transparently negotiable resource from a user agent which supports transparent content negotiation, the proxy MAY return any cached, fresh list response from that resource, even if the selecting request headers, as specified by the Vary header, do not match. Second, when allowed by the user agent and origin server, a proxy MAY reuse an Alternates header taken from a previous response (section 10.4) to run a remote variant selection algorithm. If the algorithm has sufficient information to choose a best variant, and if the best variant is a neighboring variant, the proxy MAY return a choice response with this variant. Third, if a proxy receives a choice response, it MAY extract and cache the normal response embedded therein, as described in section 10.5. 14 Security and privacy considerations 14.1 Accept- headers revealing personal information Accept- headers, in particular Accept-Language headers, may reveal information which the user would rather keep private unless it will directly improve the quality of service. For example, a user may not want to send language preferences to sites which do not offer multi- lingual content. The transparent content negotiation mechanism allows user agents to omit sending of the Accept-Language header by default, without adversely affecting the outcome of the negotiation process if transparently negotiated multi-lingual content is accessed. Holtman & Mutz Experimental [Page 46] RFC 2295 Transparent Content Negotiation March 1998 However, even if Accept- headers are never sent, the automatic selection and retrieval of a variant by a user agent will reveal a preference for this variant to the server. A malicious service author could provide a page with `fake' negotiability on (ethnicity- correlated) languages, with all variants actually being the same English document, as a means of obtaining privacy-sensitive information. Such a plot would however be visible to an alert victim if the list of available variants and their properties is reviewed. Some additional privacy considerations connected to Accept- headers are discussed in [1]. 14.2 Spoofing of responses from variant resources The caching optimization in section 10.5 gives the implementer of a negotiable resource control over the responses cached for all neighboring variant resources. This is a security problem if a neighboring variant resource belongs to another author. To provide security in this case, the HTTP server will have to filter the Content-Location headers in the choice responses generated by the negotiable resource implementation. 14.3 Security holes revealed by negotiation Malicious servers could use transparent content negotiation as a means of obtaining information about security holes which may be present in user agents. This is a risk in particular for negotiation on the availability of scripting languages and libraries. 15 Internationalization considerations This protocol defines negotiation facilities which can be used for the internationalization of web content. For the internationalization of list response bodies (section 10.1), HTTP/1.0 style negotiation (section 4.2) can be used. 16 Acknowledgments Work on HTTP content negotiation has been done since at least 1993. The authors are unable to trace the origin of many of the ideas incorporated in this document. Many members of the HTTP working group have contributed to the negotiation model in this specification. The authors wish to thank the individuals who have commented on earlier versions of this document, including Brian Behlendorf, Daniel DuBois, Martin J. Duerst, Roy T. Fielding, Jim Gettys, Yaron Goland, Dirk van Gulik, Ted Hardie, Graham Klyne, Scott Lawrence, Larry Masinter, Jeffrey Mogul, Henrik Frystyk Nielsen, Frederick G.M. Roeber, Paul Sutton, and Klaus Weide and Mark Wood. Holtman & Mutz Experimental [Page 47] RFC 2295 Transparent Content Negotiation March 1998 17 References [1] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2068, January 1997. [2] Berners-Lee, T., Fielding, R., and H. Frystyk, "Hypertext Transfer Protocol -- HTTP/1.0", RFC 1945, May 1996. [3] Holtman, K., and A. Mutz, "HTTP Remote Variant Selection Algorithm -- RVSA/1.0", RFC 2296, March 1998. [4] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [5] Yergeau, F., "UTF-8, a transformation format of Unicode and ISO 10646", RFC 2044, October 1996. 18 Authors' Addresses Koen Holtman Technische Universiteit Eindhoven Postbus 513 Kamer HG 6.57 5600 MB Eindhoven (The Netherlands) EMail: koen@win.tue.nl Andrew H. Mutz Hewlett-Packard Company 1501 Page Mill Road 3U-3 Palo Alto CA 94304, USA Fax +1 415 857 4691 EMail: mutz@hpl.hp.com Holtman & Mutz Experimental [Page 48] RFC 2295 Transparent Content Negotiation March 1998 19 Appendix: Example of a local variant selection algorithm A negotiating user agent will choose the best variant from a variant list with a local variant selection algorithm. This appendix contains an example of such an algorithm. The inputs of the algorithm are a variant list from an Alternates header, and an agent-side configuration database, which contains - the feature set of the current request, - a collection of quality values assigned to media types, languages, and charsets for the current request, following the model of the corresponding HTTP/1.1 [1] Accept- headers, - a table which lists `forbidden' combinations of media types and charsets, i.e. combinations which cannot be displayed because of some internal user agent limitation. The output of the algorithm is either the best variant, or the conclusion that none of the variants are acceptable. 19.1 Computing overall quality values As a first step in the local variant selection algorithm, the overall qualities associated with all variant descriptions in the list are computed. The overall quality Q of a variant description is the value Q = round5( qs * qt * qc * ql * qf * qa ) where rounds5 is a function which rounds a floating point value to 5 decimal places after the point. It is assumed that the user agent can run on multiple platforms: the rounding function makes the algorithm independent of the exact characteristics of the underlying floating point hardware. The factors qs, qt, qc, ql, qf, and qa are determined as follows. qs Is the source quality factor in the variant description. qt The media type quality factor is 1 if there is no type attribute in the variant description. Otherwise, it is the quality value assigned to this type by the configuration database. If the database does not assign a value, then the factor is 0. Holtman & Mutz Experimental [Page 49] RFC 2295 Transparent Content Negotiation March 1998 qc The charset quality factor is 1 if there is no charset attribute in the variant description. Otherwise, it is the quality value assigned to this charset by the configuration database. If the database does not assign a value, then the factor is 0. ql The language quality factor is 1 if there is no language attribute in the variant description. Otherwise, it is the highest quality value the configuration database assigns to any of the languages listed in the language attribute. If the database does not assign a value to any of the languages listed, then the factor is 0. qf The features quality factor is 1 if there is no features attribute in the variant description. Otherwise, it is the quality degradation factor computed for the features attribute using the feature set of the current request. qa The quality adjustment factor is 0 if the variant description lists a media type - charset combination which is `forbidden' by the table, and 1 otherwise. As an example, if a variant list contains the variant description {"paper.2" 0.7 {type text/html} {language fr}} and if the configuration database contains the quality value assignments types: text/html;q=1.0, type application/postscript;q=0.8 languages: en;q=1.0, fr;q=0.5 then the local variant selection algorithm will compute the overall quality for the variant description as follows: {"paper.2" 0.7 {type text/html} {language fr}} | | | | | | V V V round5 ( 0.7 * 1.0 * 0.5 ) = 0.35000 With same configuration database, the variant list {"paper.1" 0.9 {type text/html} {language en}}, {"paper.2" 0.7 {type text/html} {language fr}}, {"paper.3" 1.0 {type application/postscript} {language en}} would yield the following computations: Holtman & Mutz Experimental [Page 50] RFC 2295 Transparent Content Negotiation March 1998 round5 ( qs * qt * qc * ql * qf * qa ) = Q --- --- --- --- --- --- paper.1: 0.9 * 1.0 * 1.0 * 1.0 * 1.0 * 1.0 = 0.90000 paper.1: 0.7 * 1.0 * 1.0 * 0.5 * 1.0 * 1.0 = 0.35000 paper.3: 1.0 * 0.8 * 1.0 * 1.0 * 1.0 * 1.0 = 0.80000 19.2 Determining the result Using all computed overall quality values, the end result of the local variant selection algorithm is determined as follows. If all overall quality values are 0, then the best variant is the fallback variant, if there is one in the list, else the result is the conclusion that none of the variants are acceptable. If at least one overall quality value is greater than 0, then the best variant is the variant which has the description with the highest overall quality value, or, if there are multiple variant descriptions which share the highest overall quality value, the variant of the first variant description in the list which has this highest overall quality value. 19.3 Ranking dimensions Consider the following variant list: {"paper.greek" 1.0 {language el} {charset ISO-8859-7}}, {"paper.english" 1.0 {language en} {charset ISO-8859-1}} It could be the case that the user prefers the language "el" over "en", while the user agent can render "ISO-8859-1" better than "ISO- 8859-7". The result is that in the language dimension, the first variant is best, while the second variant is best in the charset dimension. In this situation, it would be preferable to choose the first variant as the best variant: the user settings in the language dimension should take precedence over the hard-coded values in the charset dimension. To express this ranking between dimensions, the user agent configuration database should have a higher spread in the quality values for the language dimension than for the charset dimension. For example, with languages: el;q=1.0, en-gb;q=0.7, en;q=0.6, da;q=0, ... charsets: ISO-8859-1;q=1.0, ISO-8859-7;q=0.95, ISO-8859-5;q=0.97, unicode-1-1;q=0, ... Holtman & Mutz Experimental [Page 51] RFC 2295 Transparent Content Negotiation March 1998 the first variant will have an overall quality of 0.95000, while the second variant will have an overall quality 0.70000. This makes the first variant the best variant. 20 Appendix: feature negotiation examples This appendix contains examples of the use of feature tags in variant descriptions. The tag names used here are examples only, they do not in general reflect the tag naming scheme proposed in [4]. 20.1 Use of feature tags Feature tags can be used in variant lists to express the quality degradation associated with the presence or absence of certain features. One example is {"index.html.plain" 0.7 }, {"index.html" 1.0 {features tables frames}} Here, the "{features tables frames}" part expresses that index.html uses the features tagged as tables and frames. If these features are absent, the overall quality of index.html degrades to 0. Another example is {"home.graphics" 1.0 {features !textonly}}, {"home.textonly" 0.7 } where the "{features !textonly}" part expresses that home.graphics requires the absence of the textonly feature. If the feature is present, the overall quality of home.graphics degrades to 0. The absence of a feature need not always degrade the overall quality to 0. In the example {"x.html.1" 1.0 {features fonts;-0.7}} the absence of the fonts feature degrades the quality with a factor of 0.7. Finally, in the example {"y.html" 1.0 {features [blebber wolx] }} The "[blebber wolx]" expresses that y.html requires the presence of the blebber feature or the wolx feature. This construct can be used in a number of cases: 1. blebber and wolx actually tag the same feature, but they were registered by different people, and some user agents say they support blebber while others say they support wolx. Holtman & Mutz Experimental [Page 52] RFC 2295 Transparent Content Negotiation March 1998 2. blebber and wolx are HTML tags of different vendors which implement the same functionality, and which are used together in y.html without interference. 3. blebber and wolx are HTML tags of different vendors which implement the same functionality, and y.html uses the tags in a conditional HTML construct. 4. blebber is a complicated HTML tag with only a sketchy definition, implemented by one user agent vendor, and wolx indicates implementation of a well-defined subset of the blebber tag by some other vendor(s). y.html uses only this well-defined subset. 20.2 Use of numeric feature tags As an example of negotiation in a numeric area, the following variant list describes four variants with title graphics designed for increasing screen widths: {"home.pda" 1.0 {features screenwidth=[-199] }}, {"home.narrow" 1.0 {features screenwidth=[200-599] }}, {"home.normal" 1.0 {features screenwidth=[600-999] }}, {"home.wide" 1.0 {features screenwidth=[1000-] }}, {"home.normal"} The last element of the list specifies a safe default for user agents which do not implement screen width negotiation. Such user agents will reject the first four variants as unusable, as they seem to rely on a feature which they do not understand. 20.3 Feature tag design When designing a new feature tag, it is important to take into account that existing user agents, which do not recognize the new tag will treat the feature as absent. In general, a new feature tag needs to be designed in such a way that absence of the tag is the default case which reflects current practice. If this design principle is ignored, the resulting feature tag will generally be unusable. As an example, one could try to support negotiation between monochrome and color content by introducing a `color' feature tag, the presence of which would indicate the capability to display color graphics. However, if this new tag is used in a variant list, for example {"rainbow.gif" 1.0 {features color} } Holtman & Mutz Experimental [Page 53] RFC 2295 Transparent Content Negotiation March 1998 {"rainbow.mono.gif" 0.6 {features !color}} then existing user agents, which would not recognize the color tag, would all display the monochrome rainbow. The color tag is therefore unusable in situations where optimal results for existing user agents are desired. To provide for negotiation in this area, one must introduce a `monochrome' feature tag; its presence indicates that the user agent can only render (or the user prefers to view) monochrome graphics. 21 Appendix: origin server implementation considerations 21.1 Implementation with a CGI script Transparent content negotiation has been designed to allow a broad range of implementation options at the origin server side. A very minimal implementation can be done using the CGI interface. The CGI script below is an example. #!/bin/sh cat - <<'blex' TCN: list Alternates: {"stats.tables.html" 1.0 {type text/html} {features tables}}, {"stats.html" 0.8 {type text/html}}, {"stats.ps" 0.95 {type application/postscript}} Vary: * Content-Type: text/html <title>Multiple Choices for Web Statistics</title> <h2>Multiple Choices for Web Statistics:</h2> <ul> <li><a href=stats.tables.html>Version with HTML tables</a> <p> <li><a href=stats.html>Version without HTML tables</a> <p> <li><a href=stats.ps>Postscript version</a> </ul> blex The Alternates header in the above script must be read as a single line. The script always generates a list response with the 200 (OK) code, which ensures compatibility with non-negotiating HTTP/1.0 agents. Holtman & Mutz Experimental [Page 54] RFC 2295 Transparent Content Negotiation March 1998 21.2 Direct support by HTTP servers Sophisticated HTTP servers could make a transparent negotiation module available to content authors. Such a module could incorporate a remote variant selection algorithm and an implementation of the algorithm for generating choice responses (section 10.2). The definition of interfaces to such modules is beyond the scope of this specification. 21.3 Web publishing tools Web publishing tools could automatically generate several variants of a document (for example the original TeX version, a HTML version with tables, a HTML version without tables, and a Postscript version), together with an appropriate variant list in the interface format of a HTTP server transparent negotiation module. This would allow documents to be published as transparently negotiable resources. 22 Appendix: Example of choice response construction The following is an example of the construction of a choice response by a proxy cache which supports HTTP/1.1 and transparent content negotiation. The use of the HTTP/1.1 conditional request mechanisms is also shown. Assume that a user agent has cached a variant list with the validator "1234" for the negotiable resource http://x.org/paper. Also assume that it has cached responses from two neighboring variants, with the entity tags "gonkyyyy" and W/"a;b". Assume that all three user agent cache entries are stale: they would need to be revalidated before the user agent can use them. If http://x.org/paper accessed in this situation, the user agent could send the following request to its proxy cache: GET /paper HTTP/1.1 Host: x.org User-Agent: WuxtaWeb/2.4 Negotiate: 1.0 Accept: text/html, application/postscript;q=0.4, */* Accept-Language: en If-None-Match: "gonkyyyy;1234", W/"a;b;1234" Assume that the proxy cache has cached the same three items as the user agent, but that it has revalidated the variant list 8000 seconds ago, so that the list is still fresh for the proxy. This means that the proxy can run a remote variant selection algorithm on the list and the incoming request. Holtman & Mutz Experimental [Page 55] RFC 2295 Transparent Content Negotiation March 1998 Assume that the remote algorithm is able to choose paper.html.en as the best variant. The proxy can now construct a choice response, using the algorithm in section 10.2. In steps 1 and 2 of the algorithm, the proxy can construct the following conditional request on the best variant, and send it to the origin server: GET /paper.html.en HTTP/1.1 Host: x.org User-Agent: WuxtaWeb/2.4 Negotiate: 1.0 Accept: text/html, application/postscript;q=0.4, */* Accept-Language: en If-None-Match: "gonkyyyy", W/"a;b" Via: 1.1 fred On receipt of the response HTTP/1.1 304 Not Modified Date: Tue, 11 Jun 1996 20:05:31 GMT Etag: "gonkyyyy" from the origin server, the proxy can use its freshly revalidated paper.html.en cache entry to expand the response to a non-304 response: HTTP/1.1 200 OK Date: Tue, 11 Jun 1996 20:05:31 GMT Content-Type: text/html Last-Modified: Mon, 10 Jun 1996 10:01:14 GMT Content-Length: 5327 Cache-control: max-age=604800 Etag: "gonkyyyy" Via: 1.1 fred Age: 0 <title>A paper about .... Using this 200 response, the proxy can construct a choice response in step 4 of the algorithm: HTTP/1.1 200 OK Date: Tue, 11 Jun 1996 20:05:31 GMT TCN: choice Content-Type: text/html Last-Modified: Mon, 10 Jun 1996 10:01:14 GMT Content-Length: 5327 Cache-control: max-age=604800 Content-Location: paper.html.en Holtman & Mutz Experimental [Page 56] RFC 2295 Transparent Content Negotiation March 1998 Alternates: {"paper.html.en" 0.9 {type text/html} {language en}}, {"paper.html.fr" 0.7 {type text/html} {language fr}}, {"paper.ps.en" 1.0 {type application/postscript} {language en}} Etag: "gonkyyyy;1234" Vary: negotiate, accept, accept-language Expires: Thu, 01 Jan 1980 00:00:00 GMT Via: 1.1 fred Age: 8000 <title>A paper about .... The choice response can subsequently be shortened to a 304 response, because of the If-None-Match header in the original request from the user agent. Thus, the proxy can finally return HTTP/1.1 304 Not Modified Date: Tue, 11 Jun 1996 20:05:31 GMT Etag: "gonkyyyy;1234" Content-Location: paper.html.en Vary: negotiate, accept, accept-language Expires: Thu, 01 Jan 1980 00:00:00 GMT Via: 1.1 fred Age: 8000 to the user agent. Holtman & Mutz Experimental [Page 57] RFC 2295 Transparent Content Negotiation March 1998 23 Full Copyright Statement Copyright (C) The Internet Society (1998). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Holtman & Mutz Experimental [Page 58] |
Added doc/rfc2616.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 8975 8976 8977 8978 8979 8980 8981 8982 8983 8984 8985 8986 8987 8988 8989 8990 8991 8992 8993 8994 8995 8996 8997 8998 8999 9000 9001 9002 9003 9004 9005 9006 9007 9008 9009 9010 9011 9012 9013 9014 9015 9016 9017 9018 9019 9020 9021 9022 9023 9024 9025 9026 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039 9040 9041 9042 9043 9044 9045 9046 9047 9048 9049 9050 9051 9052 9053 9054 9055 9056 9057 9058 9059 9060 9061 9062 9063 9064 9065 9066 9067 9068 9069 9070 9071 9072 9073 9074 9075 9076 9077 9078 9079 9080 9081 9082 9083 9084 9085 9086 9087 9088 9089 9090 9091 9092 9093 9094 9095 9096 9097 9098 9099 9100 9101 9102 9103 9104 9105 9106 9107 9108 9109 9110 9111 9112 9113 9114 9115 9116 9117 9118 9119 9120 9121 9122 9123 9124 9125 9126 9127 9128 9129 9130 9131 9132 9133 9134 9135 9136 9137 9138 9139 9140 9141 9142 9143 9144 9145 9146 9147 9148 9149 9150 9151 9152 9153 9154 9155 9156 9157 9158 9159 9160 9161 9162 9163 9164 9165 9166 9167 9168 9169 9170 9171 9172 9173 9174 9175 9176 9177 9178 9179 9180 9181 9182 9183 9184 9185 9186 9187 9188 9189 9190 9191 9192 9193 9194 9195 9196 9197 9198 9199 9200 9201 9202 9203 9204 9205 9206 9207 9208 9209 9210 9211 9212 9213 9214 9215 9216 9217 9218 9219 9220 9221 9222 9223 9224 9225 9226 9227 9228 9229 9230 9231 9232 9233 9234 9235 9236 9237 9238 9239 9240 9241 9242 9243 9244 9245 9246 9247 9248 9249 9250 9251 9252 9253 9254 9255 9256 9257 9258 9259 9260 9261 9262 9263 9264 9265 9266 9267 9268 9269 9270 9271 9272 9273 9274 9275 9276 9277 9278 9279 9280 9281 9282 9283 9284 9285 9286 9287 9288 9289 9290 9291 9292 9293 9294 9295 9296 9297 9298 9299 9300 9301 9302 9303 9304 9305 9306 9307 9308 9309 9310 9311 9312 9313 9314 9315 9316 9317 9318 9319 9320 9321 9322 9323 9324 9325 9326 9327 9328 9329 9330 9331 9332 9333 9334 9335 9336 9337 9338 9339 9340 9341 9342 9343 9344 9345 9346 9347 9348 9349 9350 9351 9352 9353 9354 9355 9356 9357 9358 9359 9360 9361 9362 9363 9364 9365 9366 9367 9368 9369 9370 9371 9372 9373 9374 9375 9376 9377 9378 9379 9380 9381 9382 9383 9384 9385 9386 9387 9388 9389 9390 9391 9392 9393 9394 9395 9396 9397 9398 9399 9400 9401 9402 9403 9404 9405 9406 9407 9408 9409 9410 9411 9412 9413 9414 9415 9416 9417 9418 9419 9420 9421 9422 9423 9424 9425 9426 9427 9428 9429 9430 9431 9432 9433 9434 9435 9436 9437 9438 9439 9440 9441 9442 9443 9444 9445 9446 9447 9448 9449 9450 9451 9452 9453 9454 9455 9456 9457 9458 9459 9460 9461 9462 9463 9464 9465 9466 9467 9468 9469 9470 9471 9472 9473 9474 9475 9476 9477 9478 9479 9480 9481 9482 9483 9484 9485 9486 9487 9488 9489 9490 9491 9492 9493 9494 9495 9496 9497 9498 9499 9500 9501 9502 9503 9504 9505 9506 9507 9508 9509 9510 9511 9512 9513 9514 9515 9516 9517 9518 9519 9520 9521 9522 9523 9524 9525 9526 9527 9528 9529 9530 9531 9532 9533 9534 9535 9536 9537 9538 9539 9540 9541 9542 9543 9544 9545 9546 9547 9548 9549 9550 9551 9552 9553 9554 9555 9556 9557 9558 9559 9560 9561 9562 9563 9564 9565 9566 9567 9568 9569 9570 9571 9572 9573 9574 9575 9576 9577 9578 9579 9580 9581 9582 9583 9584 9585 9586 9587 9588 9589 9590 9591 9592 9593 9594 9595 9596 9597 9598 9599 9600 9601 9602 9603 9604 9605 9606 9607 9608 9609 9610 9611 9612 9613 9614 9615 9616 9617 9618 9619 9620 9621 9622 9623 9624 9625 9626 9627 9628 9629 9630 9631 9632 9633 9634 9635 9636 9637 9638 9639 9640 9641 9642 9643 9644 9645 9646 9647 9648 9649 9650 9651 9652 9653 9654 9655 9656 9657 9658 9659 9660 9661 9662 9663 9664 9665 9666 9667 9668 9669 9670 9671 9672 9673 9674 9675 9676 9677 9678 9679 9680 9681 9682 9683 9684 9685 9686 9687 9688 9689 9690 9691 9692 9693 9694 9695 9696 9697 9698 9699 9700 9701 9702 9703 9704 9705 9706 9707 9708 9709 9710 9711 9712 9713 9714 9715 9716 9717 9718 9719 9720 9721 9722 9723 9724 9725 9726 9727 9728 9729 9730 9731 9732 9733 9734 9735 9736 9737 9738 9739 9740 9741 9742 9743 9744 9745 9746 9747 9748 9749 9750 9751 9752 9753 9754 9755 9756 9757 9758 9759 9760 9761 9762 9763 9764 9765 9766 9767 9768 9769 9770 9771 9772 9773 9774 9775 9776 9777 9778 9779 9780 9781 9782 9783 9784 9785 9786 9787 9788 9789 9790 9791 9792 9793 9794 9795 9796 9797 9798 9799 9800 9801 9802 9803 9804 9805 9806 9807 9808 9809 9810 9811 9812 9813 9814 9815 9816 9817 9818 9819 9820 9821 9822 9823 9824 9825 9826 9827 9828 9829 9830 9831 9832 9833 9834 9835 9836 9837 9838 9839 9840 9841 9842 9843 9844 9845 9846 9847 9848 9849 9850 9851 9852 9853 9854 9855 9856 9857 9858 9859 | Network Working Group R. Fielding Request for Comments: 2616 UC Irvine Obsoletes: 2068 J. Gettys Category: Standards Track Compaq/W3C J. Mogul Compaq H. Frystyk W3C/MIT L. Masinter Xerox P. Leach Microsoft T. Berners-Lee W3C/MIT June 1999 Hypertext Transfer Protocol -- HTTP/1.1 Status of this Memo This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "Internet Official Protocol Standards" (STD 1) for the standardization state and status of this protocol. Distribution of this memo is unlimited. Copyright Notice Copyright (C) The Internet Society (1999). All Rights Reserved. Abstract The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems. It is a generic, stateless, protocol which can be used for many tasks beyond its use for hypertext, such as name servers and distributed object management systems, through extension of its request methods, error codes and headers [47]. A feature of HTTP is the typing and negotiation of data representation, allowing systems to be built independently of the data being transferred. HTTP has been in use by the World-Wide Web global information initiative since 1990. This specification defines the protocol referred to as "HTTP/1.1", and is an update to RFC 2068 [33]. Fielding, et al. Standards Track [Page 1] RFC 2616 HTTP/1.1 June 1999 Table of Contents 1 Introduction ...................................................7 1.1 Purpose......................................................7 1.2 Requirements .................................................8 1.3 Terminology ..................................................8 1.4 Overall Operation ...........................................12 2 Notational Conventions and Generic Grammar ....................14 2.1 Augmented BNF ...............................................14 2.2 Basic Rules .................................................15 3 Protocol Parameters ...........................................17 3.1 HTTP Version ................................................17 3.2 Uniform Resource Identifiers ................................18 3.2.1 General Syntax ...........................................19 3.2.2 http URL .................................................19 3.2.3 URI Comparison ...........................................20 3.3 Date/Time Formats ...........................................20 3.3.1 Full Date ................................................20 3.3.2 Delta Seconds ............................................21 3.4 Character Sets ..............................................21 3.4.1 Missing Charset ..........................................22 3.5 Content Codings .............................................23 3.6 Transfer Codings ............................................24 3.6.1 Chunked Transfer Coding ..................................25 3.7 Media Types .................................................26 3.7.1 Canonicalization and Text Defaults .......................27 3.7.2 Multipart Types ..........................................27 3.8 Product Tokens ..............................................28 3.9 Quality Values ..............................................29 3.10 Language Tags ...............................................29 3.11 Entity Tags .................................................30 3.12 Range Units .................................................30 4 HTTP Message ..................................................31 4.1 Message Types ...............................................31 4.2 Message Headers .............................................31 4.3 Message Body ................................................32 4.4 Message Length ..............................................33 4.5 General Header Fields .......................................34 5 Request .......................................................35 5.1 Request-Line ................................................35 5.1.1 Method ...................................................36 5.1.2 Request-URI ..............................................36 5.2 The Resource Identified by a Request ........................38 5.3 Request Header Fields .......................................38 6 Response ......................................................39 6.1 Status-Line .................................................39 6.1.1 Status Code and Reason Phrase ............................39 6.2 Response Header Fields ......................................41 Fielding, et al. Standards Track [Page 2] RFC 2616 HTTP/1.1 June 1999 7 Entity ........................................................42 7.1 Entity Header Fields ........................................42 7.2 Entity Body .................................................43 7.2.1 Type .....................................................43 7.2.2 Entity Length ............................................43 8 Connections ...................................................44 8.1 Persistent Connections ......................................44 8.1.1 Purpose ..................................................44 8.1.2 Overall Operation ........................................45 8.1.3 Proxy Servers ............................................46 8.1.4 Practical Considerations .................................46 8.2 Message Transmission Requirements ...........................47 8.2.1 Persistent Connections and Flow Control ..................47 8.2.2 Monitoring Connections for Error Status Messages .........48 8.2.3 Use of the 100 (Continue) Status .........................48 8.2.4 Client Behavior if Server Prematurely Closes Connection ..50 9 Method Definitions ............................................51 9.1 Safe and Idempotent Methods .................................51 9.1.1 Safe Methods .............................................51 9.1.2 Idempotent Methods .......................................51 9.2 OPTIONS .....................................................52 9.3 GET .........................................................53 9.4 HEAD ........................................................54 9.5 POST ........................................................54 9.6 PUT .........................................................55 9.7 DELETE ......................................................56 9.8 TRACE .......................................................56 9.9 CONNECT .....................................................57 10 Status Code Definitions ......................................57 10.1 Informational 1xx ...........................................57 10.1.1 100 Continue .............................................58 10.1.2 101 Switching Protocols ..................................58 10.2 Successful 2xx ..............................................58 10.2.1 200 OK ...................................................58 10.2.2 201 Created ..............................................59 10.2.3 202 Accepted .............................................59 10.2.4 203 Non-Authoritative Information ........................59 10.2.5 204 No Content ...........................................60 10.2.6 205 Reset Content ........................................60 10.2.7 206 Partial Content ......................................60 10.3 Redirection 3xx .............................................61 10.3.1 300 Multiple Choices .....................................61 10.3.2 301 Moved Permanently ....................................62 10.3.3 302 Found ................................................62 10.3.4 303 See Other ............................................63 10.3.5 304 Not Modified .........................................63 10.3.6 305 Use Proxy ............................................64 10.3.7 306 (Unused) .............................................64 Fielding, et al. Standards Track [Page 3] RFC 2616 HTTP/1.1 June 1999 10.3.8 307 Temporary Redirect ...................................65 10.4 Client Error 4xx ............................................65 10.4.1 400 Bad Request .........................................65 10.4.2 401 Unauthorized ........................................66 10.4.3 402 Payment Required ....................................66 10.4.4 403 Forbidden ...........................................66 10.4.5 404 Not Found ...........................................66 10.4.6 405 Method Not Allowed ..................................66 10.4.7 406 Not Acceptable ......................................67 10.4.8 407 Proxy Authentication Required .......................67 10.4.9 408 Request Timeout .....................................67 10.4.10 409 Conflict ............................................67 10.4.11 410 Gone ................................................68 10.4.12 411 Length Required .....................................68 10.4.13 412 Precondition Failed .................................68 10.4.14 413 Request Entity Too Large ............................69 10.4.15 414 Request-URI Too Long ................................69 10.4.16 415 Unsupported Media Type ..............................69 10.4.17 416 Requested Range Not Satisfiable .....................69 10.4.18 417 Expectation Failed ..................................70 10.5 Server Error 5xx ............................................70 10.5.1 500 Internal Server Error ................................70 10.5.2 501 Not Implemented ......................................70 10.5.3 502 Bad Gateway ..........................................70 10.5.4 503 Service Unavailable ..................................70 10.5.5 504 Gateway Timeout ......................................71 10.5.6 505 HTTP Version Not Supported ...........................71 11 Access Authentication ........................................71 12 Content Negotiation ..........................................71 12.1 Server-driven Negotiation ...................................72 12.2 Agent-driven Negotiation ....................................73 12.3 Transparent Negotiation .....................................74 13 Caching in HTTP ..............................................74 13.1.1 Cache Correctness ........................................75 13.1.2 Warnings .................................................76 13.1.3 Cache-control Mechanisms .................................77 13.1.4 Explicit User Agent Warnings .............................78 13.1.5 Exceptions to the Rules and Warnings .....................78 13.1.6 Client-controlled Behavior ...............................79 13.2 Expiration Model ............................................79 13.2.1 Server-Specified Expiration ..............................79 13.2.2 Heuristic Expiration .....................................80 13.2.3 Age Calculations .........................................80 13.2.4 Expiration Calculations ..................................83 13.2.5 Disambiguating Expiration Values .........................84 13.2.6 Disambiguating Multiple Responses ........................84 13.3 Validation Model ............................................85 13.3.1 Last-Modified Dates ......................................86 Fielding, et al. Standards Track [Page 4] RFC 2616 HTTP/1.1 June 1999 13.3.2 Entity Tag Cache Validators ..............................86 13.3.3 Weak and Strong Validators ...............................86 13.3.4 Rules for When to Use Entity Tags and Last-Modified Dates.89 13.3.5 Non-validating Conditionals ..............................90 13.4 Response Cacheability .......................................91 13.5 Constructing Responses From Caches ..........................92 13.5.1 End-to-end and Hop-by-hop Headers ........................92 13.5.2 Non-modifiable Headers ...................................92 13.5.3 Combining Headers ........................................94 13.5.4 Combining Byte Ranges ....................................95 13.6 Caching Negotiated Responses ................................95 13.7 Shared and Non-Shared Caches ................................96 13.8 Errors or Incomplete Response Cache Behavior ................97 13.9 Side Effects of GET and HEAD ................................97 13.10 Invalidation After Updates or Deletions ...................97 13.11 Write-Through Mandatory ...................................98 13.12 Cache Replacement .........................................99 13.13 History Lists .............................................99 14 Header Field Definitions ....................................100 14.1 Accept .....................................................100 14.2 Accept-Charset .............................................102 14.3 Accept-Encoding ............................................102 14.4 Accept-Language ............................................104 14.5 Accept-Ranges ..............................................105 14.6 Age ........................................................106 14.7 Allow ......................................................106 14.8 Authorization ..............................................107 14.9 Cache-Control ..............................................108 14.9.1 What is Cacheable .......................................109 14.9.2 What May be Stored by Caches ............................110 14.9.3 Modifications of the Basic Expiration Mechanism .........111 14.9.4 Cache Revalidation and Reload Controls ..................113 14.9.5 No-Transform Directive ..................................115 14.9.6 Cache Control Extensions ................................116 14.10 Connection ...............................................117 14.11 Content-Encoding .........................................118 14.12 Content-Language .........................................118 14.13 Content-Length ...........................................119 14.14 Content-Location .........................................120 14.15 Content-MD5 ..............................................121 14.16 Content-Range ............................................122 14.17 Content-Type .............................................124 14.18 Date .....................................................124 14.18.1 Clockless Origin Server Operation ......................125 14.19 ETag .....................................................126 14.20 Expect ...................................................126 14.21 Expires ..................................................127 14.22 From .....................................................128 Fielding, et al. Standards Track [Page 5] RFC 2616 HTTP/1.1 June 1999 14.23 Host .....................................................128 14.24 If-Match .................................................129 14.25 If-Modified-Since ........................................130 14.26 If-None-Match ............................................132 14.27 If-Range .................................................133 14.28 If-Unmodified-Since ......................................134 14.29 Last-Modified ............................................134 14.30 Location .................................................135 14.31 Max-Forwards .............................................136 14.32 Pragma ...................................................136 14.33 Proxy-Authenticate .......................................137 14.34 Proxy-Authorization ......................................137 14.35 Range ....................................................138 14.35.1 Byte Ranges ...........................................138 14.35.2 Range Retrieval Requests ..............................139 14.36 Referer ..................................................140 14.37 Retry-After ..............................................141 14.38 Server ...................................................141 14.39 TE .......................................................142 14.40 Trailer ..................................................143 14.41 Transfer-Encoding..........................................143 14.42 Upgrade ..................................................144 14.43 User-Agent ...............................................145 14.44 Vary .....................................................145 14.45 Via ......................................................146 14.46 Warning ..................................................148 14.47 WWW-Authenticate .........................................150 15 Security Considerations .......................................150 15.1 Personal Information....................................151 15.1.1 Abuse of Server Log Information .........................151 15.1.2 Transfer of Sensitive Information .......................151 15.1.3 Encoding Sensitive Information in URI's .................152 15.1.4 Privacy Issues Connected to Accept Headers ..............152 15.2 Attacks Based On File and Path Names .......................153 15.3 DNS Spoofing ...............................................154 15.4 Location Headers and Spoofing ..............................154 15.5 Content-Disposition Issues .................................154 15.6 Authentication Credentials and Idle Clients ................155 15.7 Proxies and Caching ........................................155 15.7.1 Denial of Service Attacks on Proxies....................156 16 Acknowledgments .............................................156 17 References ..................................................158 18 Authors' Addresses ..........................................162 19 Appendices ..................................................164 19.1 Internet Media Type message/http and application/http ......164 19.2 Internet Media Type multipart/byteranges ...................165 19.3 Tolerant Applications ......................................166 19.4 Differences Between HTTP Entities and RFC 2045 Entities ....167 Fielding, et al. Standards Track [Page 6] RFC 2616 HTTP/1.1 June 1999 19.4.1 MIME-Version ............................................167 19.4.2 Conversion to Canonical Form ............................167 19.4.3 Conversion of Date Formats ..............................168 19.4.4 Introduction of Content-Encoding ........................168 19.4.5 No Content-Transfer-Encoding ............................168 19.4.6 Introduction of Transfer-Encoding .......................169 19.4.7 MHTML and Line Length Limitations .......................169 19.5 Additional Features ........................................169 19.5.1 Content-Disposition .....................................170 19.6 Compatibility with Previous Versions .......................170 19.6.1 Changes from HTTP/1.0 ...................................171 19.6.2 Compatibility with HTTP/1.0 Persistent Connections ......172 19.6.3 Changes from RFC 2068 ...................................172 20 Index .......................................................175 21 Full Copyright Statement ....................................176 1 Introduction 1.1 Purpose The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems. HTTP has been in use by the World-Wide Web global information initiative since 1990. The first version of HTTP, referred to as HTTP/0.9, was a simple protocol for raw data transfer across the Internet. HTTP/1.0, as defined by RFC 1945 [6], improved the protocol by allowing messages to be in the format of MIME-like messages, containing metainformation about the data transferred and modifiers on the request/response semantics. However, HTTP/1.0 does not sufficiently take into consideration the effects of hierarchical proxies, caching, the need for persistent connections, or virtual hosts. In addition, the proliferation of incompletely-implemented applications calling themselves "HTTP/1.0" has necessitated a protocol version change in order for two communicating applications to determine each other's true capabilities. This specification defines the protocol referred to as "HTTP/1.1". This protocol includes more stringent requirements than HTTP/1.0 in order to ensure reliable implementation of its features. Practical information systems require more functionality than simple retrieval, including search, front-end update, and annotation. HTTP allows an open-ended set of methods and headers that indicate the purpose of a request [47]. It builds on the discipline of reference provided by the Uniform Resource Identifier (URI) [3], as a location (URL) [4] or name (URN) [20], for indicating the resource to which a Fielding, et al. Standards Track [Page 7] RFC 2616 HTTP/1.1 June 1999 method is to be applied. Messages are passed in a format similar to that used by Internet mail [9] as defined by the Multipurpose Internet Mail Extensions (MIME) [7]. HTTP is also used as a generic protocol for communication between user agents and proxies/gateways to other Internet systems, including those supported by the SMTP [16], NNTP [13], FTP [18], Gopher [2], and WAIS [10] protocols. In this way, HTTP allows basic hypermedia access to resources available from diverse applications. 1.2 Requirements The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [34]. An implementation is not compliant if it fails to satisfy one or more of the MUST or REQUIRED level requirements for the protocols it implements. An implementation that satisfies all the MUST or REQUIRED level and all the SHOULD level requirements for its protocols is said to be "unconditionally compliant"; one that satisfies all the MUST level requirements but not all the SHOULD level requirements for its protocols is said to be "conditionally compliant." 1.3 Terminology This specification uses a number of terms to refer to the roles played by participants in, and objects of, the HTTP communication. connection A transport layer virtual circuit established between two programs for the purpose of communication. message The basic unit of HTTP communication, consisting of a structured sequence of octets matching the syntax defined in section 4 and transmitted via the connection. request An HTTP request message, as defined in section 5. response An HTTP response message, as defined in section 6. Fielding, et al. Standards Track [Page 8] RFC 2616 HTTP/1.1 June 1999 resource A network data object or service that can be identified by a URI, as defined in section 3.2. Resources may be available in multiple representations (e.g. multiple languages, data formats, size, and resolutions) or vary in other ways. entity The information transferred as the payload of a request or response. An entity consists of metainformation in the form of entity-header fields and content in the form of an entity-body, as described in section 7. representation An entity included with a response that is subject to content negotiation, as described in section 12. There may exist multiple representations associated with a particular response status. content negotiation The mechanism for selecting the appropriate representation when servicing a request, as described in section 12. The representation of entities in any response can be negotiated (including error responses). variant A resource may have one, or more than one, representation(s) associated with it at any given instant. Each of these representations is termed a `varriant'. Use of the term `variant' does not necessarily imply that the resource is subject to content negotiation. client A program that establishes connections for the purpose of sending requests. user agent The client which initiates a request. These are often browsers, editors, spiders (web-traversing robots), or other end user tools. server An application program that accepts connections in order to service requests by sending back responses. Any given program may be capable of being both a client and a server; our use of these terms refers only to the role being performed by the program for a particular connection, rather than to the program's capabilities in general. Likewise, any server may act as an origin server, proxy, gateway, or tunnel, switching behavior based on the nature of each request. Fielding, et al. Standards Track [Page 9] RFC 2616 HTTP/1.1 June 1999 origin server The server on which a given resource resides or is to be created. proxy An intermediary program which acts as both a server and a client for the purpose of making requests on behalf of other clients. Requests are serviced internally or by passing them on, with possible translation, to other servers. A proxy MUST implement both the client and server requirements of this specification. A "transparent proxy" is a proxy that does not modify the request or response beyond what is required for proxy authentication and identification. A "non-transparent proxy" is a proxy that modifies the request or response in order to provide some added service to the user agent, such as group annotation services, media type transformation, protocol reduction, or anonymity filtering. Except where either transparent or non-transparent behavior is explicitly stated, the HTTP proxy requirements apply to both types of proxies. gateway A server which acts as an intermediary for some other server. Unlike a proxy, a gateway receives requests as if it were the origin server for the requested resource; the requesting client may not be aware that it is communicating with a gateway. tunnel An intermediary program which is acting as a blind relay between two connections. Once active, a tunnel is not considered a party to the HTTP communication, though the tunnel may have been initiated by an HTTP request. The tunnel ceases to exist when both ends of the relayed connections are closed. cache A program's local store of response messages and the subsystem that controls its message storage, retrieval, and deletion. A cache stores cacheable responses in order to reduce the response time and network bandwidth consumption on future, equivalent requests. Any client or server may include a cache, though a cache cannot be used by a server that is acting as a tunnel. cacheable A response is cacheable if a cache is allowed to store a copy of the response message for use in answering subsequent requests. The rules for determining the cacheability of HTTP responses are defined in section 13. Even if a resource is cacheable, there may be additional constraints on whether a cache can use the cached copy for a particular request. Fielding, et al. Standards Track [Page 10] RFC 2616 HTTP/1.1 June 1999 first-hand A response is first-hand if it comes directly and without unnecessary delay from the origin server, perhaps via one or more proxies. A response is also first-hand if its validity has just been checked directly with the origin server. explicit expiration time The time at which the origin server intends that an entity should no longer be returned by a cache without further validation. heuristic expiration time An expiration time assigned by a cache when no explicit expiration time is available. age The age of a response is the time since it was sent by, or successfully validated with, the origin server. freshness lifetime The length of time between the generation of a response and its expiration time. fresh A response is fresh if its age has not yet exceeded its freshness lifetime. stale A response is stale if its age has passed its freshness lifetime. semantically transparent A cache behaves in a "semantically transparent" manner, with respect to a particular response, when its use affects neither the requesting client nor the origin server, except to improve performance. When a cache is semantically transparent, the client receives exactly the same response (except for hop-by-hop headers) that it would have received had its request been handled directly by the origin server. validator A protocol element (e.g., an entity tag or a Last-Modified time) that is used to find out whether a cache entry is an equivalent copy of an entity. upstream/downstream Upstream and downstream describe the flow of a message: all messages flow from upstream to downstream. Fielding, et al. Standards Track [Page 11] RFC 2616 HTTP/1.1 June 1999 inbound/outbound Inbound and outbound refer to the request and response paths for messages: "inbound" means "traveling toward the origin server", and "outbound" means "traveling toward the user agent" 1.4 Overall Operation The HTTP protocol is a request/response protocol. A client sends a request to the server in the form of a request method, URI, and protocol version, followed by a MIME-like message containing request modifiers, client information, and possible body content over a connection with a server. The server responds with a status line, including the message's protocol version and a success or error code, followed by a MIME-like message containing server information, entity metainformation, and possible entity-body content. The relationship between HTTP and MIME is described in appendix 19.4. Most HTTP communication is initiated by a user agent and consists of a request to be applied to a resource on some origin server. In the simplest case, this may be accomplished via a single connection (v) between the user agent (UA) and the origin server (O). request chain ------------------------> UA -------------------v------------------- O <----------------------- response chain A more complicated situation occurs when one or more intermediaries are present in the request/response chain. There are three common forms of intermediary: proxy, gateway, and tunnel. A proxy is a forwarding agent, receiving requests for a URI in its absolute form, rewriting all or part of the message, and forwarding the reformatted request toward the server identified by the URI. A gateway is a receiving agent, acting as a layer above some other server(s) and, if necessary, translating the requests to the underlying server's protocol. A tunnel acts as a relay point between two connections without changing the messages; tunnels are used when the communication needs to pass through an intermediary (such as a firewall) even when the intermediary cannot understand the contents of the messages. request chain --------------------------------------> UA -----v----- A -----v----- B -----v----- C -----v----- O <------------------------------------- response chain The figure above shows three intermediaries (A, B, and C) between the user agent and origin server. A request or response message that travels the whole chain will pass through four separate connections. This distinction is important because some HTTP communication options Fielding, et al. Standards Track [Page 12] RFC 2616 HTTP/1.1 June 1999 may apply only to the connection with the nearest, non-tunnel neighbor, only to the end-points of the chain, or to all connections along the chain. Although the diagram is linear, each participant may be engaged in multiple, simultaneous communications. For example, B may be receiving requests from many clients other than A, and/or forwarding requests to servers other than C, at the same time that it is handling A's request. Any party to the communication which is not acting as a tunnel may employ an internal cache for handling requests. The effect of a cache is that the request/response chain is shortened if one of the participants along the chain has a cached response applicable to that request. The following illustrates the resulting chain if B has a cached copy of an earlier response from O (via C) for a request which has not been cached by UA or A. request chain ----------> UA -----v----- A -----v----- B - - - - - - C - - - - - - O <--------- response chain Not all responses are usefully cacheable, and some requests may contain modifiers which place special requirements on cache behavior. HTTP requirements for cache behavior and cacheable responses are defined in section 13. In fact, there are a wide variety of architectures and configurations of caches and proxies currently being experimented with or deployed across the World Wide Web. These systems include national hierarchies of proxy caches to save transoceanic bandwidth, systems that broadcast or multicast cache entries, organizations that distribute subsets of cached data via CD-ROM, and so on. HTTP systems are used in corporate intranets over high-bandwidth links, and for access via PDAs with low-power radio links and intermittent connectivity. The goal of HTTP/1.1 is to support the wide diversity of configurations already deployed while introducing protocol constructs that meet the needs of those who build web applications that require high reliability and, failing that, at least reliable indications of failure. HTTP communication usually takes place over TCP/IP connections. The default port is TCP 80 [19], but other ports can be used. This does not preclude HTTP from being implemented on top of any other protocol on the Internet, or on other networks. HTTP only presumes a reliable transport; any protocol that provides such guarantees can be used; the mapping of the HTTP/1.1 request and response structures onto the transport data units of the protocol in question is outside the scope of this specification. Fielding, et al. Standards Track [Page 13] RFC 2616 HTTP/1.1 June 1999 In HTTP/1.0, most implementations used a new connection for each request/response exchange. In HTTP/1.1, a connection may be used for one or more request/response exchanges, although connections may be closed for a variety of reasons (see section 8.1). 2 Notational Conventions and Generic Grammar 2.1 Augmented BNF All of the mechanisms specified in this document are described in both prose and an augmented Backus-Naur Form (BNF) similar to that used by RFC 822 [9]. Implementors will need to be familiar with the notation in order to understand this specification. The augmented BNF includes the following constructs: name = definition The name of a rule is simply the name itself (without any enclosing "<" and ">") and is separated from its definition by the equal "=" character. White space is only significant in that indentation of continuation lines is used to indicate a rule definition that spans more than one line. Certain basic rules are in uppercase, such as SP, LWS, HT, CRLF, DIGIT, ALPHA, etc. Angle brackets are used within definitions whenever their presence will facilitate discerning the use of rule names. "literal" Quotation marks surround literal text. Unless stated otherwise, the text is case-insensitive. rule1 | rule2 Elements separated by a bar ("|") are alternatives, e.g., "yes | no" will accept yes or no. (rule1 rule2) Elements enclosed in parentheses are treated as a single element. Thus, "(elem (foo | bar) elem)" allows the token sequences "elem foo elem" and "elem bar elem". *rule The character "*" preceding an element indicates repetition. The full form is "<n>*<m>element" indicating at least <n> and at most <m> occurrences of element. Default values are 0 and infinity so that "*(element)" allows any number, including zero; "1*element" requires at least one; and "1*2element" allows one or two. [rule] Square brackets enclose optional elements; "[foo bar]" is equivalent to "*1(foo bar)". Fielding, et al. Standards Track [Page 14] RFC 2616 HTTP/1.1 June 1999 N rule Specific repetition: "<n>(element)" is equivalent to "<n>*<n>(element)"; that is, exactly <n> occurrences of (element). Thus 2DIGIT is a 2-digit number, and 3ALPHA is a string of three alphabetic characters. #rule A construct "#" is defined, similar to "*", for defining lists of elements. The full form is "<n>#<m>element" indicating at least <n> and at most <m> elements, each separated by one or more commas (",") and OPTIONAL linear white space (LWS). This makes the usual form of lists very easy; a rule such as ( *LWS element *( *LWS "," *LWS element )) can be shown as 1#element Wherever this construct is used, null elements are allowed, but do not contribute to the count of elements present. That is, "(element), , (element) " is permitted, but counts as only two elements. Therefore, where at least one element is required, at least one non-null element MUST be present. Default values are 0 and infinity so that "#element" allows any number, including zero; "1#element" requires at least one; and "1#2element" allows one or two. ; comment A semi-colon, set off some distance to the right of rule text, starts a comment that continues to the end of line. This is a simple way of including useful notes in parallel with the specifications. implied *LWS The grammar described by this specification is word-based. Except where noted otherwise, linear white space (LWS) can be included between any two adjacent words (token or quoted-string), and between adjacent words and separators, without changing the interpretation of a field. At least one delimiter (LWS and/or separators) MUST exist between any two tokens (for the definition of "token" below), since they would otherwise be interpreted as a single token. 2.2 Basic Rules The following rules are used throughout this specification to describe basic parsing constructs. The US-ASCII coded character set is defined by ANSI X3.4-1986 [21]. Fielding, et al. Standards Track [Page 15] RFC 2616 HTTP/1.1 June 1999 OCTET = <any 8-bit sequence of data> CHAR = <any US-ASCII character (octets 0 - 127)> UPALPHA = <any US-ASCII uppercase letter "A".."Z"> LOALPHA = <any US-ASCII lowercase letter "a".."z"> ALPHA = UPALPHA | LOALPHA DIGIT = <any US-ASCII digit "0".."9"> CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)> CR = <US-ASCII CR, carriage return (13)> LF = <US-ASCII LF, linefeed (10)> SP = <US-ASCII SP, space (32)> HT = <US-ASCII HT, horizontal-tab (9)> <"> = <US-ASCII double-quote mark (34)> HTTP/1.1 defines the sequence CR LF as the end-of-line marker for all protocol elements except the entity-body (see appendix 19.3 for tolerant applications). The end-of-line marker within an entity-body is defined by its associated media type, as described in section 3.7. CRLF = CR LF HTTP/1.1 header field values can be folded onto multiple lines if the continuation line begins with a space or horizontal tab. All linear white space, including folding, has the same semantics as SP. A recipient MAY replace any linear white space with a single SP before interpreting the field value or forwarding the message downstream. LWS = [CRLF] 1*( SP | HT ) The TEXT rule is only used for descriptive field contents and values that are not intended to be interpreted by the message parser. Words of *TEXT MAY contain characters from character sets other than ISO- 8859-1 [22] only when encoded according to the rules of RFC 2047 [14]. TEXT = <any OCTET except CTLs, but including LWS> A CRLF is allowed in the definition of TEXT only as part of a header field continuation. It is expected that the folding LWS will be replaced with a single SP before interpretation of the TEXT value. Hexadecimal numeric characters are used in several protocol elements. HEX = "A" | "B" | "C" | "D" | "E" | "F" | "a" | "b" | "c" | "d" | "e" | "f" | DIGIT Fielding, et al. Standards Track [Page 16] RFC 2616 HTTP/1.1 June 1999 Many HTTP/1.1 header field values consist of words separated by LWS or special characters. These special characters MUST be in a quoted string to be used within a parameter value (as defined in section 3.6). token = 1*<any CHAR except CTLs or separators> separators = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT Comments can be included in some HTTP header fields by surrounding the comment text with parentheses. Comments are only allowed in fields containing "comment" as part of their field value definition. In all other fields, parentheses are considered part of the field value. comment = "(" *( ctext | quoted-pair | comment ) ")" ctext = <any TEXT excluding "(" and ")"> A string of text is parsed as a single word if it is quoted using double-quote marks. quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) qdtext = <any TEXT except <">> The backslash character ("\") MAY be used as a single-character quoting mechanism only within quoted-string and comment constructs. quoted-pair = "\" CHAR 3 Protocol Parameters 3.1 HTTP Version HTTP uses a "<major>.<minor>" numbering scheme to indicate versions of the protocol. The protocol versioning policy is intended to allow the sender to indicate the format of a message and its capacity for understanding further HTTP communication, rather than the features obtained via that communication. No change is made to the version number for the addition of message components which do not affect communication behavior or which only add to extensible field values. The <minor> number is incremented when the changes made to the protocol add features which do not change the general message parsing algorithm, but which may add to the message semantics and imply additional capabilities of the sender. The <major> number is incremented when the format of a message within the protocol is changed. See RFC 2145 [36] for a fuller explanation. Fielding, et al. Standards Track [Page 17] RFC 2616 HTTP/1.1 June 1999 The version of an HTTP message is indicated by an HTTP-Version field in the first line of the message. HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT Note that the major and minor numbers MUST be treated as separate integers and that each MAY be incremented higher than a single digit. Thus, HTTP/2.4 is a lower version than HTTP/2.13, which in turn is lower than HTTP/12.3. Leading zeros MUST be ignored by recipients and MUST NOT be sent. An application that sends a request or response message that includes HTTP-Version of "HTTP/1.1" MUST be at least conditionally compliant with this specification. Applications that are at least conditionally compliant with this specification SHOULD use an HTTP-Version of "HTTP/1.1" in their messages, and MUST do so for any message that is not compatible with HTTP/1.0. For more details on when to send specific HTTP-Version values, see RFC 2145 [36]. The HTTP version of an application is the highest HTTP version for which the application is at least conditionally compliant. Proxy and gateway applications need to be careful when forwarding messages in protocol versions different from that of the application. Since the protocol version indicates the protocol capability of the sender, a proxy/gateway MUST NOT send a message with a version indicator which is greater than its actual version. If a higher version request is received, the proxy/gateway MUST either downgrade the request version, or respond with an error, or switch to tunnel behavior. Due to interoperability problems with HTTP/1.0 proxies discovered since the publication of RFC 2068[33], caching proxies MUST, gateways MAY, and tunnels MUST NOT upgrade the request to the highest version they support. The proxy/gateway's response to that request MUST be in the same major version as the request. Note: Converting between versions of HTTP may involve modification of header fields required or forbidden by the versions involved. 3.2 Uniform Resource Identifiers URIs have been known by many names: WWW addresses, Universal Document Identifiers, Universal Resource Identifiers [3], and finally the combination of Uniform Resource Locators (URL) [4] and Names (URN) [20]. As far as HTTP is concerned, Uniform Resource Identifiers are simply formatted strings which identify--via name, location, or any other characteristic--a resource. Fielding, et al. Standards Track [Page 18] RFC 2616 HTTP/1.1 June 1999 3.2.1 General Syntax URIs in HTTP can be represented in absolute form or relative to some known base URI [11], depending upon the context of their use. The two forms are differentiated by the fact that absolute URIs always begin with a scheme name followed by a colon. For definitive information on URL syntax and semantics, see "Uniform Resource Identifiers (URI): Generic Syntax and Semantics," RFC 2396 [42] (which replaces RFCs 1738 [4] and RFC 1808 [11]). This specification adopts the definitions of "URI-reference", "absoluteURI", "relativeURI", "port", "host","abs_path", "rel_path", and "authority" from that specification. The HTTP protocol does not place any a priori limit on the length of a URI. Servers MUST be able to handle the URI of any resource they serve, and SHOULD be able to handle URIs of unbounded length if they provide GET-based forms that could generate such URIs. A server SHOULD return 414 (Request-URI Too Long) status if a URI is longer than the server can handle (see section 10.4.15). Note: Servers ought to be cautious about depending on URI lengths above 255 bytes, because some older client or proxy implementations might not properly support these lengths. 3.2.2 http URL The "http" scheme is used to locate network resources via the HTTP protocol. This section defines the scheme-specific syntax and semantics for http URLs. http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]] If the port is empty or not given, port 80 is assumed. The semantics are that the identified resource is located at the server listening for TCP connections on that port of that host, and the Request-URI for the resource is abs_path (section 5.1.2). The use of IP addresses in URLs SHOULD be avoided whenever possible (see RFC 1900 [24]). If the abs_path is not present in the URL, it MUST be given as "/" when used as a Request-URI for a resource (section 5.1.2). If a proxy receives a host name which is not a fully qualified domain name, it MAY add its domain to the host name it received. If a proxy receives a fully qualified domain name, the proxy MUST NOT change the host name. Fielding, et al. Standards Track [Page 19] RFC 2616 HTTP/1.1 June 1999 3.2.3 URI Comparison When comparing two URIs to decide if they match or not, a client SHOULD use a case-sensitive octet-by-octet comparison of the entire URIs, with these exceptions: - A port that is empty or not given is equivalent to the default port for that URI-reference; - Comparisons of host names MUST be case-insensitive; - Comparisons of scheme names MUST be case-insensitive; - An empty abs_path is equivalent to an abs_path of "/". Characters other than those in the "reserved" and "unsafe" sets (see RFC 2396 [42]) are equivalent to their ""%" HEX HEX" encoding. For example, the following three URIs are equivalent: http://abc.com:80/~smith/home.html http://ABC.com/%7Esmith/home.html http://ABC.com:/%7esmith/home.html 3.3 Date/Time Formats 3.3.1 Full Date HTTP applications have historically allowed three different formats for the representation of date/time stamps: Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format The first format is preferred as an Internet standard and represents a fixed-length subset of that defined by RFC 1123 [8] (an update to RFC 822 [9]). The second format is in common use, but is based on the obsolete RFC 850 [12] date format and lacks a four-digit year. HTTP/1.1 clients and servers that parse the date value MUST accept all three formats (for compatibility with HTTP/1.0), though they MUST only generate the RFC 1123 format for representing HTTP-date values in header fields. See section 19.3 for further information. Note: Recipients of date values are encouraged to be robust in accepting date values that may have been sent by non-HTTP applications, as is sometimes the case when retrieving or posting messages via proxies/gateways to SMTP or NNTP. Fielding, et al. Standards Track [Page 20] RFC 2616 HTTP/1.1 June 1999 All HTTP date/time stamps MUST be represented in Greenwich Mean Time (GMT), without exception. For the purposes of HTTP, GMT is exactly equal to UTC (Coordinated Universal Time). This is indicated in the first two formats by the inclusion of "GMT" as the three-letter abbreviation for time zone, and MUST be assumed when reading the asctime format. HTTP-date is case sensitive and MUST NOT include additional LWS beyond that specifically included as SP in the grammar. HTTP-date = rfc1123-date | rfc850-date | asctime-date rfc1123-date = wkday "," SP date1 SP time SP "GMT" rfc850-date = weekday "," SP date2 SP time SP "GMT" asctime-date = wkday SP date3 SP time SP 4DIGIT date1 = 2DIGIT SP month SP 4DIGIT ; day month year (e.g., 02 Jun 1982) date2 = 2DIGIT "-" month "-" 2DIGIT ; day-month-year (e.g., 02-Jun-82) date3 = month SP ( 2DIGIT | ( SP 1DIGIT )) ; month day (e.g., Jun 2) time = 2DIGIT ":" 2DIGIT ":" 2DIGIT ; 00:00:00 - 23:59:59 wkday = "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun" weekday = "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" | "Sunday" month = "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun" | "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec" Note: HTTP requirements for the date/time stamp format apply only to their usage within the protocol stream. Clients and servers are not required to use these formats for user presentation, request logging, etc. 3.3.2 Delta Seconds Some HTTP header fields allow a time value to be specified as an integer number of seconds, represented in decimal, after the time that the message was received. delta-seconds = 1*DIGIT 3.4 Character Sets HTTP uses the same definition of the term "character set" as that described for MIME: Fielding, et al. Standards Track [Page 21] RFC 2616 HTTP/1.1 June 1999 The term "character set" is used in this document to refer to a method used with one or more tables to convert a sequence of octets into a sequence of characters. Note that unconditional conversion in the other direction is not required, in that not all characters may be available in a given character set and a character set may provide more than one sequence of octets to represent a particular character. This definition is intended to allow various kinds of character encoding, from simple single-table mappings such as US-ASCII to complex table switching methods such as those that use ISO-2022's techniques. However, the definition associated with a MIME character set name MUST fully specify the mapping to be performed from octets to characters. In particular, use of external profiling information to determine the exact mapping is not permitted. Note: This use of the term "character set" is more commonly referred to as a "character encoding." However, since HTTP and MIME share the same registry, it is important that the terminology also be shared. HTTP character sets are identified by case-insensitive tokens. The complete set of tokens is defined by the IANA Character Set registry [19]. charset = token Although HTTP allows an arbitrary token to be used as a charset value, any token that has a predefined value within the IANA Character Set registry [19] MUST represent the character set defined by that registry. Applications SHOULD limit their use of character sets to those defined by the IANA registry. Implementors should be aware of IETF character set requirements [38] [41]. 3.4.1 Missing Charset Some HTTP/1.0 software has interpreted a Content-Type header without charset parameter incorrectly to mean "recipient should guess." Senders wishing to defeat this behavior MAY include a charset parameter even when the charset is ISO-8859-1 and SHOULD do so when it is known that it will not confuse the recipient. Unfortunately, some older HTTP/1.0 clients did not deal properly with an explicit charset parameter. HTTP/1.1 recipients MUST respect the charset label provided by the sender; and those user agents that have a provision to "guess" a charset MUST use the charset from the Fielding, et al. Standards Track [Page 22] RFC 2616 HTTP/1.1 June 1999 content-type field if they support that charset, rather than the recipient's preference, when initially displaying a document. See section 3.7.1. 3.5 Content Codings Content coding values indicate an encoding transformation that has been or can be applied to an entity. Content codings are primarily used to allow a document to be compressed or otherwise usefully transformed without losing the identity of its underlying media type and without loss of information. Frequently, the entity is stored in coded form, transmitted directly, and only decoded by the recipient. content-coding = token All content-coding values are case-insensitive. HTTP/1.1 uses content-coding values in the Accept-Encoding (section 14.3) and Content-Encoding (section 14.11) header fields. Although the value describes the content-coding, what is more important is that it indicates what decoding mechanism will be required to remove the encoding. The Internet Assigned Numbers Authority (IANA) acts as a registry for content-coding value tokens. Initially, the registry contains the following tokens: gzip An encoding format produced by the file compression program "gzip" (GNU zip) as described in RFC 1952 [25]. This format is a Lempel-Ziv coding (LZ77) with a 32 bit CRC. compress The encoding format produced by the common UNIX file compression program "compress". This format is an adaptive Lempel-Ziv-Welch coding (LZW). Use of program names for the identification of encoding formats is not desirable and is discouraged for future encodings. Their use here is representative of historical practice, not good design. For compatibility with previous implementations of HTTP, applications SHOULD consider "x-gzip" and "x-compress" to be equivalent to "gzip" and "compress" respectively. deflate The "zlib" format defined in RFC 1950 [31] in combination with the "deflate" compression mechanism described in RFC 1951 [29]. Fielding, et al. Standards Track [Page 23] RFC 2616 HTTP/1.1 June 1999 identity The default (identity) encoding; the use of no transformation whatsoever. This content-coding is used only in the Accept- Encoding header, and SHOULD NOT be used in the Content-Encoding header. New content-coding value tokens SHOULD be registered; to allow interoperability between clients and servers, specifications of the content coding algorithms needed to implement a new value SHOULD be publicly available and adequate for independent implementation, and conform to the purpose of content coding defined in this section. 3.6 Transfer Codings Transfer-coding values are used to indicate an encoding transformation that has been, can be, or may need to be applied to an entity-body in order to ensure "safe transport" through the network. This differs from a content coding in that the transfer-coding is a property of the message, not of the original entity. transfer-coding = "chunked" | transfer-extension transfer-extension = token *( ";" parameter ) Parameters are in the form of attribute/value pairs. parameter = attribute "=" value attribute = token value = token | quoted-string All transfer-coding values are case-insensitive. HTTP/1.1 uses transfer-coding values in the TE header field (section 14.39) and in the Transfer-Encoding header field (section 14.41). Whenever a transfer-coding is applied to a message-body, the set of transfer-codings MUST include "chunked", unless the message is terminated by closing the connection. When the "chunked" transfer- coding is used, it MUST be the last transfer-coding applied to the message-body. The "chunked" transfer-coding MUST NOT be applied more than once to a message-body. These rules allow the recipient to determine the transfer-length of the message (section 4.4). Transfer-codings are analogous to the Content-Transfer-Encoding values of MIME [7], which were designed to enable safe transport of binary data over a 7-bit transport service. However, safe transport has a different focus for an 8bit-clean transfer protocol. In HTTP, the only unsafe characteristic of message-bodies is the difficulty in determining the exact body length (section 7.2.2), or the desire to encrypt data over a shared transport. Fielding, et al. Standards Track [Page 24] RFC 2616 HTTP/1.1 June 1999 The Internet Assigned Numbers Authority (IANA) acts as a registry for transfer-coding value tokens. Initially, the registry contains the following tokens: "chunked" (section 3.6.1), "identity" (section 3.6.2), "gzip" (section 3.5), "compress" (section 3.5), and "deflate" (section 3.5). New transfer-coding value tokens SHOULD be registered in the same way as new content-coding value tokens (section 3.5). A server which receives an entity-body with a transfer-coding it does not understand SHOULD return 501 (Unimplemented), and close the connection. A server MUST NOT send transfer-codings to an HTTP/1.0 client. 3.6.1 Chunked Transfer Coding The chunked encoding modifies the body of a message in order to transfer it as a series of chunks, each with its own size indicator, followed by an OPTIONAL trailer containing entity-header fields. This allows dynamically produced content to be transferred along with the information necessary for the recipient to verify that it has received the full message. Chunked-Body = *chunk last-chunk trailer CRLF chunk = chunk-size [ chunk-extension ] CRLF chunk-data CRLF chunk-size = 1*HEX last-chunk = 1*("0") [ chunk-extension ] CRLF chunk-extension= *( ";" chunk-ext-name [ "=" chunk-ext-val ] ) chunk-ext-name = token chunk-ext-val = token | quoted-string chunk-data = chunk-size(OCTET) trailer = *(entity-header CRLF) The chunk-size field is a string of hex digits indicating the size of the chunk. The chunked encoding is ended by any chunk whose size is zero, followed by the trailer, which is terminated by an empty line. The trailer allows the sender to include additional HTTP header fields at the end of the message. The Trailer header field can be used to indicate which header fields are included in a trailer (see section 14.40). Fielding, et al. Standards Track [Page 25] RFC 2616 HTTP/1.1 June 1999 A server using chunked transfer-coding in a response MUST NOT use the trailer for any header fields unless at least one of the following is true: a)the request included a TE header field that indicates "trailers" is acceptable in the transfer-coding of the response, as described in section 14.39; or, b)the server is the origin server for the response, the trailer fields consist entirely of optional metadata, and the recipient could use the message (in a manner acceptable to the origin server) without receiving this metadata. In other words, the origin server is willing to accept the possibility that the trailer fields might be silently discarded along the path to the client. This requirement prevents an interoperability failure when the message is being received by an HTTP/1.1 (or later) proxy and forwarded to an HTTP/1.0 recipient. It avoids a situation where compliance with the protocol would have necessitated a possibly infinite buffer on the proxy. An example process for decoding a Chunked-Body is presented in appendix 19.4.6. All HTTP/1.1 applications MUST be able to receive and decode the "chunked" transfer-coding, and MUST ignore chunk-extension extensions they do not understand. 3.7 Media Types HTTP uses Internet Media Types [17] in the Content-Type (section 14.17) and Accept (section 14.1) header fields in order to provide open and extensible data typing and type negotiation. media-type = type "/" subtype *( ";" parameter ) type = token subtype = token Parameters MAY follow the type/subtype in the form of attribute/value pairs (as defined in section 3.6). The type, subtype, and parameter attribute names are case- insensitive. Parameter values might or might not be case-sensitive, depending on the semantics of the parameter name. Linear white space (LWS) MUST NOT be used between the type and subtype, nor between an attribute and its value. The presence or absence of a parameter might be significant to the processing of a media-type, depending on its definition within the media type registry. Fielding, et al. Standards Track [Page 26] RFC 2616 HTTP/1.1 June 1999 Note that some older HTTP applications do not recognize media type parameters. When sending data to older HTTP applications, implementations SHOULD only use media type parameters when they are required by that type/subtype definition. Media-type values are registered with the Internet Assigned Number Authority (IANA [19]). The media type registration process is outlined in RFC 1590 [17]. Use of non-registered media types is discouraged. 3.7.1 Canonicalization and Text Defaults Internet media types are registered with a canonical form. An entity-body transferred via HTTP messages MUST be represented in the appropriate canonical form prior to its transmission except for "text" types, as defined in the next paragraph. When in canonical form, media subtypes of the "text" type use CRLF as the text line break. HTTP relaxes this requirement and allows the transport of text media with plain CR or LF alone representing a line break when it is done consistently for an entire entity-body. HTTP applications MUST accept CRLF, bare CR, and bare LF as being representative of a line break in text media received via HTTP. In addition, if the text is represented in a character set that does not use octets 13 and 10 for CR and LF respectively, as is the case for some multi-byte character sets, HTTP allows the use of whatever octet sequences are defined by that character set to represent the equivalent of CR and LF for line breaks. This flexibility regarding line breaks applies only to text media in the entity-body; a bare CR or LF MUST NOT be substituted for CRLF within any of the HTTP control structures (such as header fields and multipart boundaries). If an entity-body is encoded with a content-coding, the underlying data MUST be in a form defined above prior to being encoded. The "charset" parameter is used with some media types to define the character set (section 3.4) of the data. When no explicit charset parameter is provided by the sender, media subtypes of the "text" type are defined to have a default charset value of "ISO-8859-1" when received via HTTP. Data in character sets other than "ISO-8859-1" or its subsets MUST be labeled with an appropriate charset value. See section 3.4.1 for compatibility problems. 3.7.2 Multipart Types MIME provides for a number of "multipart" types -- encapsulations of one or more entities within a single message-body. All multipart types share a common syntax, as defined in section 5.1.1 of RFC 2046 Fielding, et al. Standards Track [Page 27] RFC 2616 HTTP/1.1 June 1999 [40], and MUST include a boundary parameter as part of the media type value. The message body is itself a protocol element and MUST therefore use only CRLF to represent line breaks between body-parts. Unlike in RFC 2046, the epilogue of any multipart message MUST be empty; HTTP applications MUST NOT transmit the epilogue (even if the original multipart contains an epilogue). These restrictions exist in order to preserve the self-delimiting nature of a multipart message- body, wherein the "end" of the message-body is indicated by the ending multipart boundary. In general, HTTP treats a multipart message-body no differently than any other media type: strictly as payload. The one exception is the "multipart/byteranges" type (appendix 19.2) when it appears in a 206 (Partial Content) response, which will be interpreted by some HTTP caching mechanisms as described in sections 13.5.4 and 14.16. In all other cases, an HTTP user agent SHOULD follow the same or similar behavior as a MIME user agent would upon receipt of a multipart type. The MIME header fields within each body-part of a multipart message- body do not have any significance to HTTP beyond that defined by their MIME semantics. In general, an HTTP user agent SHOULD follow the same or similar behavior as a MIME user agent would upon receipt of a multipart type. If an application receives an unrecognized multipart subtype, the application MUST treat it as being equivalent to "multipart/mixed". Note: The "multipart/form-data" type has been specifically defined for carrying form data suitable for processing via the POST request method, as described in RFC 1867 [15]. 3.8 Product Tokens Product tokens are used to allow communicating applications to identify themselves by software name and version. Most fields using product tokens also allow sub-products which form a significant part of the application to be listed, separated by white space. By convention, the products are listed in order of their significance for identifying the application. product = token ["/" product-version] product-version = token Examples: User-Agent: CERN-LineMode/2.15 libwww/2.17b3 Server: Apache/0.8.4 Fielding, et al. Standards Track [Page 28] RFC 2616 HTTP/1.1 June 1999 Product tokens SHOULD be short and to the point. They MUST NOT be used for advertising or other non-essential information. Although any token character MAY appear in a product-version, this token SHOULD only be used for a version identifier (i.e., successive versions of the same product SHOULD only differ in the product-version portion of the product value). 3.9 Quality Values HTTP content negotiation (section 12) uses short "floating point" numbers to indicate the relative importance ("weight") of various negotiable parameters. A weight is normalized to a real number in the range 0 through 1, where 0 is the minimum and 1 the maximum value. If a parameter has a quality value of 0, then content with this parameter is `not acceptable' for the client. HTTP/1.1 applications MUST NOT generate more than three digits after the decimal point. User configuration of these values SHOULD also be limited in this fashion. qvalue = ( "0" [ "." 0*3DIGIT ] ) | ( "1" [ "." 0*3("0") ] ) "Quality values" is a misnomer, since these values merely represent relative degradation in desired quality. 3.10 Language Tags A language tag identifies a natural language spoken, written, or otherwise conveyed by human beings for communication of information to other human beings. Computer languages are explicitly excluded. HTTP uses language tags within the Accept-Language and Content- Language fields. The syntax and registry of HTTP language tags is the same as that defined by RFC 1766 [1]. In summary, a language tag is composed of 1 or more parts: A primary language tag and a possibly empty series of subtags: language-tag = primary-tag *( "-" subtag ) primary-tag = 1*8ALPHA subtag = 1*8ALPHA White space is not allowed within the tag and all tags are case- insensitive. The name space of language tags is administered by the IANA. Example tags include: en, en-US, en-cockney, i-cherokee, x-pig-latin Fielding, et al. Standards Track [Page 29] RFC 2616 HTTP/1.1 June 1999 where any two-letter primary-tag is an ISO-639 language abbreviation and any two-letter initial subtag is an ISO-3166 country code. (The last three tags above are not registered tags; all but the last are examples of tags which could be registered in future.) 3.11 Entity Tags Entity tags are used for comparing two or more entities from the same requested resource. HTTP/1.1 uses entity tags in the ETag (section 14.19), If-Match (section 14.24), If-None-Match (section 14.26), and If-Range (section 14.27) header fields. The definition of how they are used and compared as cache validators is in section 13.3.3. An entity tag consists of an opaque quoted string, possibly prefixed by a weakness indicator. entity-tag = [ weak ] opaque-tag weak = "W/" opaque-tag = quoted-string A "strong entity tag" MAY be shared by two entities of a resource only if they are equivalent by octet equality. A "weak entity tag," indicated by the "W/" prefix, MAY be shared by two entities of a resource only if the entities are equivalent and could be substituted for each other with no significant change in semantics. A weak entity tag can only be used for weak comparison. An entity tag MUST be unique across all versions of all entities associated with a particular resource. A given entity tag value MAY be used for entities obtained by requests on different URIs. The use of the same entity tag value in conjunction with entities obtained by requests on different URIs does not imply the equivalence of those entities. 3.12 Range Units HTTP/1.1 allows a client to request that only part (a range of) the response entity be included within the response. HTTP/1.1 uses range units in the Range (section 14.35) and Content-Range (section 14.16) header fields. An entity can be broken down into subranges according to various structural units. range-unit = bytes-unit | other-range-unit bytes-unit = "bytes" other-range-unit = token The only range unit defined by HTTP/1.1 is "bytes". HTTP/1.1 implementations MAY ignore ranges specified using other units. Fielding, et al. Standards Track [Page 30] RFC 2616 HTTP/1.1 June 1999 HTTP/1.1 has been designed to allow implementations of applications that do not depend on knowledge of ranges. 4 HTTP Message 4.1 Message Types HTTP messages consist of requests from client to server and responses from server to client. HTTP-message = Request | Response ; HTTP/1.1 messages Request (section 5) and Response (section 6) messages use the generic message format of RFC 822 [9] for transferring entities (the payload of the message). Both types of message consist of a start-line, zero or more header fields (also known as "headers"), an empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields, and possibly a message-body. generic-message = start-line *(message-header CRLF) CRLF [ message-body ] start-line = Request-Line | Status-Line In the interest of robustness, servers SHOULD ignore any empty line(s) received where a Request-Line is expected. In other words, if the server is reading the protocol stream at the beginning of a message and receives a CRLF first, it should ignore the CRLF. Certain buggy HTTP/1.0 client implementations generate extra CRLF's after a POST request. To restate what is explicitly forbidden by the BNF, an HTTP/1.1 client MUST NOT preface or follow a request with an extra CRLF. 4.2 Message Headers HTTP header fields, which include general-header (section 4.5), request-header (section 5.3), response-header (section 6.2), and entity-header (section 7.1) fields, follow the same generic format as that given in Section 3.1 of RFC 822 [9]. Each header field consists of a name followed by a colon (":") and the field value. Field names are case-insensitive. The field value MAY be preceded by any amount of LWS, though a single SP is preferred. Header fields can be extended over multiple lines by preceding each extra line with at least one SP or HT. Applications ought to follow "common form", where one is known or indicated, when generating HTTP constructs, since there might exist some implementations that fail to accept anything Fielding, et al. Standards Track [Page 31] RFC 2616 HTTP/1.1 June 1999 beyond the common forms. message-header = field-name ":" [ field-value ] field-name = token field-value = *( field-content | LWS ) field-content = <the OCTETs making up the field-value and consisting of either *TEXT or combinations of token, separators, and quoted-string> The field-content does not include any leading or trailing LWS: linear white space occurring before the first non-whitespace character of the field-value or after the last non-whitespace character of the field-value. Such leading or trailing LWS MAY be removed without changing the semantics of the field value. Any LWS that occurs between field-content MAY be replaced with a single SP before interpreting the field value or forwarding the message downstream. The order in which header fields with differing field names are received is not significant. However, it is "good practice" to send general-header fields first, followed by request-header or response- header fields, and ending with the entity-header fields. Multiple message-header fields with the same field-name MAY be present in a message if and only if the entire field-value for that header field is defined as a comma-separated list [i.e., #(values)]. It MUST be possible to combine the multiple header fields into one "field-name: field-value" pair, without changing the semantics of the message, by appending each subsequent field-value to the first, each separated by a comma. The order in which header fields with the same field-name are received is therefore significant to the interpretation of the combined field value, and thus a proxy MUST NOT change the order of these field values when a message is forwarded. 4.3 Message Body The message-body (if any) of an HTTP message is used to carry the entity-body associated with the request or response. The message-body differs from the entity-body only when a transfer-coding has been applied, as indicated by the Transfer-Encoding header field (section 14.41). message-body = entity-body | <entity-body encoded as per Transfer-Encoding> Transfer-Encoding MUST be used to indicate any transfer-codings applied by an application to ensure safe and proper transfer of the message. Transfer-Encoding is a property of the message, not of the Fielding, et al. Standards Track [Page 32] RFC 2616 HTTP/1.1 June 1999 entity, and thus MAY be added or removed by any application along the request/response chain. (However, section 3.6 places restrictions on when certain transfer-codings may be used.) The rules for when a message-body is allowed in a message differ for requests and responses. The presence of a message-body in a request is signaled by the inclusion of a Content-Length or Transfer-Encoding header field in the request's message-headers. A message-body MUST NOT be included in a request if the specification of the request method (section 5.1.1) does not allow sending an entity-body in requests. A server SHOULD read and forward a message-body on any request; if the request method does not include defined semantics for an entity-body, then the message-body SHOULD be ignored when handling the request. For response messages, whether or not a message-body is included with a message is dependent on both the request method and the response status code (section 6.1.1). All responses to the HEAD request method MUST NOT include a message-body, even though the presence of entity- header fields might lead one to believe they do. All 1xx (informational), 204 (no content), and 304 (not modified) responses MUST NOT include a message-body. All other responses do include a message-body, although it MAY be of zero length. 4.4 Message Length The transfer-length of a message is the length of the message-body as it appears in the message; that is, after any transfer-codings have been applied. When a message-body is included with a message, the transfer-length of that body is determined by one of the following (in order of precedence): 1.Any response message which "MUST NOT" include a message-body (such as the 1xx, 204, and 304 responses and any response to a HEAD request) is always terminated by the first empty line after the header fields, regardless of the entity-header fields present in the message. 2.If a Transfer-Encoding header field (section 14.41) is present and has any value other than "identity", then the transfer-length is defined by use of the "chunked" transfer-coding (section 3.6), unless the message is terminated by closing the connection. 3.If a Content-Length header field (section 14.13) is present, its decimal value in OCTETs represents both the entity-length and the transfer-length. The Content-Length header field MUST NOT be sent if these two lengths are different (i.e., if a Transfer-Encoding Fielding, et al. Standards Track [Page 33] RFC 2616 HTTP/1.1 June 1999 header field is present). If a message is received with both a Transfer-Encoding header field and a Content-Length header field, the latter MUST be ignored. 4.If the message uses the media type "multipart/byteranges", and the ransfer-length is not otherwise specified, then this self- elimiting media type defines the transfer-length. This media type UST NOT be used unless the sender knows that the recipient can arse it; the presence in a request of a Range header with ultiple byte- range specifiers from a 1.1 client implies that the lient can parse multipart/byteranges responses. A range header might be forwarded by a 1.0 proxy that does not understand multipart/byteranges; in this case the server MUST delimit the message using methods defined in items 1,3 or 5 of this section. 5.By the server closing the connection. (Closing the connection cannot be used to indicate the end of a request body, since that would leave no possibility for the server to send back a response.) For compatibility with HTTP/1.0 applications, HTTP/1.1 requests containing a message-body MUST include a valid Content-Length header field unless the server is known to be HTTP/1.1 compliant. If a request contains a message-body and a Content-Length is not given, the server SHOULD respond with 400 (bad request) if it cannot determine the length of the message, or with 411 (length required) if it wishes to insist on receiving a valid Content-Length. All HTTP/1.1 applications that receive entities MUST accept the "chunked" transfer-coding (section 3.6), thus allowing this mechanism to be used for messages when the message length cannot be determined in advance. Messages MUST NOT include both a Content-Length header field and a non-identity transfer-coding. If the message does include a non- identity transfer-coding, the Content-Length MUST be ignored. When a Content-Length is given in a message where a message-body is allowed, its field value MUST exactly match the number of OCTETs in the message-body. HTTP/1.1 user agents MUST notify the user when an invalid length is received and detected. 4.5 General Header Fields There are a few header fields which have general applicability for both request and response messages, but which do not apply to the entity being transferred. These header fields apply only to the Fielding, et al. Standards Track [Page 34] RFC 2616 HTTP/1.1 June 1999 message being transmitted. general-header = Cache-Control ; Section 14.9 | Connection ; Section 14.10 | Date ; Section 14.18 | Pragma ; Section 14.32 | Trailer ; Section 14.40 | Transfer-Encoding ; Section 14.41 | Upgrade ; Section 14.42 | Via ; Section 14.45 | Warning ; Section 14.46 General-header field names can be extended reliably only in combination with a change in the protocol version. However, new or experimental header fields may be given the semantics of general header fields if all parties in the communication recognize them to be general-header fields. Unrecognized header fields are treated as entity-header fields. 5 Request A request message from a client to a server includes, within the first line of that message, the method to be applied to the resource, the identifier of the resource, and the protocol version in use. Request = Request-Line ; Section 5.1 *(( general-header ; Section 4.5 | request-header ; Section 5.3 | entity-header ) CRLF) ; Section 7.1 CRLF [ message-body ] ; Section 4.3 5.1 Request-Line The Request-Line begins with a method token, followed by the Request-URI and the protocol version, and ending with CRLF. The elements are separated by SP characters. No CR or LF is allowed except in the final CRLF sequence. Request-Line = Method SP Request-URI SP HTTP-Version CRLF Fielding, et al. Standards Track [Page 35] RFC 2616 HTTP/1.1 June 1999 5.1.1 Method The Method token indicates the method to be performed on the resource identified by the Request-URI. The method is case-sensitive. Method = "OPTIONS" ; Section 9.2 | "GET" ; Section 9.3 | "HEAD" ; Section 9.4 | "POST" ; Section 9.5 | "PUT" ; Section 9.6 | "DELETE" ; Section 9.7 | "TRACE" ; Section 9.8 | "CONNECT" ; Section 9.9 | extension-method extension-method = token The list of methods allowed by a resource can be specified in an Allow header field (section 14.7). The return code of the response always notifies the client whether a method is currently allowed on a resource, since the set of allowed methods can change dynamically. An origin server SHOULD return the status code 405 (Method Not Allowed) if the method is known by the origin server but not allowed for the requested resource, and 501 (Not Implemented) if the method is unrecognized or not implemented by the origin server. The methods GET and HEAD MUST be supported by all general-purpose servers. All other methods are OPTIONAL; however, if the above methods are implemented, they MUST be implemented with the same semantics as those specified in section 9. 5.1.2 Request-URI The Request-URI is a Uniform Resource Identifier (section 3.2) and identifies the resource upon which to apply the request. Request-URI = "*" | absoluteURI | abs_path | authority The four options for Request-URI are dependent on the nature of the request. The asterisk "*" means that the request does not apply to a particular resource, but to the server itself, and is only allowed when the method used does not necessarily apply to a resource. One example would be OPTIONS * HTTP/1.1 The absoluteURI form is REQUIRED when the request is being made to a proxy. The proxy is requested to forward the request or service it from a valid cache, and return the response. Note that the proxy MAY forward the request on to another proxy or directly to the server Fielding, et al. Standards Track [Page 36] RFC 2616 HTTP/1.1 June 1999 specified by the absoluteURI. In order to avoid request loops, a proxy MUST be able to recognize all of its server names, including any aliases, local variations, and the numeric IP address. An example Request-Line would be: GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1 To allow for transition to absoluteURIs in all requests in future versions of HTTP, all HTTP/1.1 servers MUST accept the absoluteURI form in requests, even though HTTP/1.1 clients will only generate them in requests to proxies. The authority form is only used by the CONNECT method (section 9.9). The most common form of Request-URI is that used to identify a resource on an origin server or gateway. In this case the absolute path of the URI MUST be transmitted (see section 3.2.1, abs_path) as the Request-URI, and the network location of the URI (authority) MUST be transmitted in a Host header field. For example, a client wishing to retrieve the resource above directly from the origin server would create a TCP connection to port 80 of the host "www.w3.org" and send the lines: GET /pub/WWW/TheProject.html HTTP/1.1 Host: www.w3.org followed by the remainder of the Request. Note that the absolute path cannot be empty; if none is present in the original URI, it MUST be given as "/" (the server root). The Request-URI is transmitted in the format specified in section 3.2.1. If the Request-URI is encoded using the "% HEX HEX" encoding [42], the origin server MUST decode the Request-URI in order to properly interpret the request. Servers SHOULD respond to invalid Request-URIs with an appropriate status code. A transparent proxy MUST NOT rewrite the "abs_path" part of the received Request-URI when forwarding it to the next inbound server, except as noted above to replace a null abs_path with "/". Note: The "no rewrite" rule prevents the proxy from changing the meaning of the request when the origin server is improperly using a non-reserved URI character for a reserved purpose. Implementors should be aware that some pre-HTTP/1.1 proxies have been known to rewrite the Request-URI. Fielding, et al. Standards Track [Page 37] RFC 2616 HTTP/1.1 June 1999 5.2 The Resource Identified by a Request The exact resource identified by an Internet request is determined by examining both the Request-URI and the Host header field. An origin server that does not allow resources to differ by the requested host MAY ignore the Host header field value when determining the resource identified by an HTTP/1.1 request. (But see section 19.6.1.1 for other requirements on Host support in HTTP/1.1.) An origin server that does differentiate resources based on the host requested (sometimes referred to as virtual hosts or vanity host names) MUST use the following rules for determining the requested resource on an HTTP/1.1 request: 1. If Request-URI is an absoluteURI, the host is part of the Request-URI. Any Host header field value in the request MUST be ignored. 2. If the Request-URI is not an absoluteURI, and the request includes a Host header field, the host is determined by the Host header field value. 3. If the host as determined by rule 1 or 2 is not a valid host on the server, the response MUST be a 400 (Bad Request) error message. Recipients of an HTTP/1.0 request that lacks a Host header field MAY attempt to use heuristics (e.g., examination of the URI path for something unique to a particular host) in order to determine what exact resource is being requested. 5.3 Request Header Fields The request-header fields allow the client to pass additional information about the request, and about the client itself, to the server. These fields act as request modifiers, with semantics equivalent to the parameters on a programming language method invocation. request-header = Accept ; Section 14.1 | Accept-Charset ; Section 14.2 | Accept-Encoding ; Section 14.3 | Accept-Language ; Section 14.4 | Authorization ; Section 14.8 | Expect ; Section 14.20 | From ; Section 14.22 | Host ; Section 14.23 | If-Match ; Section 14.24 Fielding, et al. Standards Track [Page 38] RFC 2616 HTTP/1.1 June 1999 | If-Modified-Since ; Section 14.25 | If-None-Match ; Section 14.26 | If-Range ; Section 14.27 | If-Unmodified-Since ; Section 14.28 | Max-Forwards ; Section 14.31 | Proxy-Authorization ; Section 14.34 | Range ; Section 14.35 | Referer ; Section 14.36 | TE ; Section 14.39 | User-Agent ; Section 14.43 Request-header field names can be extended reliably only in combination with a change in the protocol version. However, new or experimental header fields MAY be given the semantics of request- header fields if all parties in the communication recognize them to be request-header fields. Unrecognized header fields are treated as entity-header fields. 6 Response After receiving and interpreting a request message, a server responds with an HTTP response message. Response = Status-Line ; Section 6.1 *(( general-header ; Section 4.5 | response-header ; Section 6.2 | entity-header ) CRLF) ; Section 7.1 CRLF [ message-body ] ; Section 7.2 6.1 Status-Line The first line of a Response message is the Status-Line, consisting of the protocol version followed by a numeric status code and its associated textual phrase, with each element separated by SP characters. No CR or LF is allowed except in the final CRLF sequence. Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF 6.1.1 Status Code and Reason Phrase The Status-Code element is a 3-digit integer result code of the attempt to understand and satisfy the request. These codes are fully defined in section 10. The Reason-Phrase is intended to give a short textual description of the Status-Code. The Status-Code is intended for use by automata and the Reason-Phrase is intended for the human user. The client is not required to examine or display the Reason- Phrase. Fielding, et al. Standards Track [Page 39] RFC 2616 HTTP/1.1 June 1999 The first digit of the Status-Code defines the class of response. The last two digits do not have any categorization role. There are 5 values for the first digit: - 1xx: Informational - Request received, continuing process - 2xx: Success - The action was successfully received, understood, and accepted - 3xx: Redirection - Further action must be taken in order to complete the request - 4xx: Client Error - The request contains bad syntax or cannot be fulfilled - 5xx: Server Error - The server failed to fulfill an apparently valid request The individual values of the numeric status codes defined for HTTP/1.1, and an example set of corresponding Reason-Phrase's, are presented below. The reason phrases listed here are only recommendations -- they MAY be replaced by local equivalents without affecting the protocol. Status-Code = "100" ; Section 10.1.1: Continue | "101" ; Section 10.1.2: Switching Protocols | "200" ; Section 10.2.1: OK | "201" ; Section 10.2.2: Created | "202" ; Section 10.2.3: Accepted | "203" ; Section 10.2.4: Non-Authoritative Information | "204" ; Section 10.2.5: No Content | "205" ; Section 10.2.6: Reset Content | "206" ; Section 10.2.7: Partial Content | "300" ; Section 10.3.1: Multiple Choices | "301" ; Section 10.3.2: Moved Permanently | "302" ; Section 10.3.3: Found | "303" ; Section 10.3.4: See Other | "304" ; Section 10.3.5: Not Modified | "305" ; Section 10.3.6: Use Proxy | "307" ; Section 10.3.8: Temporary Redirect | "400" ; Section 10.4.1: Bad Request | "401" ; Section 10.4.2: Unauthorized | "402" ; Section 10.4.3: Payment Required | "403" ; Section 10.4.4: Forbidden | "404" ; Section 10.4.5: Not Found | "405" ; Section 10.4.6: Method Not Allowed | "406" ; Section 10.4.7: Not Acceptable Fielding, et al. Standards Track [Page 40] RFC 2616 HTTP/1.1 June 1999 | "407" ; Section 10.4.8: Proxy Authentication Required | "408" ; Section 10.4.9: Request Time-out | "409" ; Section 10.4.10: Conflict | "410" ; Section 10.4.11: Gone | "411" ; Section 10.4.12: Length Required | "412" ; Section 10.4.13: Precondition Failed | "413" ; Section 10.4.14: Request Entity Too Large | "414" ; Section 10.4.15: Request-URI Too Large | "415" ; Section 10.4.16: Unsupported Media Type | "416" ; Section 10.4.17: Requested range not satisfiable | "417" ; Section 10.4.18: Expectation Failed | "500" ; Section 10.5.1: Internal Server Error | "501" ; Section 10.5.2: Not Implemented | "502" ; Section 10.5.3: Bad Gateway | "503" ; Section 10.5.4: Service Unavailable | "504" ; Section 10.5.5: Gateway Time-out | "505" ; Section 10.5.6: HTTP Version not supported | extension-code extension-code = 3DIGIT Reason-Phrase = *<TEXT, excluding CR, LF> HTTP status codes are extensible. HTTP applications are not required to understand the meaning of all registered status codes, though such understanding is obviously desirable. However, applications MUST understand the class of any status code, as indicated by the first digit, and treat any unrecognized response as being equivalent to the x00 status code of that class, with the exception that an unrecognized response MUST NOT be cached. For example, if an unrecognized status code of 431 is received by the client, it can safely assume that there was something wrong with its request and treat the response as if it had received a 400 status code. In such cases, user agents SHOULD present to the user the entity returned with the response, since that entity is likely to include human- readable information which will explain the unusual status. 6.2 Response Header Fields The response-header fields allow the server to pass additional information about the response which cannot be placed in the Status- Line. These header fields give information about the server and about further access to the resource identified by the Request-URI. response-header = Accept-Ranges ; Section 14.5 | Age ; Section 14.6 | ETag ; Section 14.19 | Location ; Section 14.30 | Proxy-Authenticate ; Section 14.33 Fielding, et al. Standards Track [Page 41] RFC 2616 HTTP/1.1 June 1999 | Retry-After ; Section 14.37 | Server ; Section 14.38 | Vary ; Section 14.44 | WWW-Authenticate ; Section 14.47 Response-header field names can be extended reliably only in combination with a change in the protocol version. However, new or experimental header fields MAY be given the semantics of response- header fields if all parties in the communication recognize them to be response-header fields. Unrecognized header fields are treated as entity-header fields. 7 Entity Request and Response messages MAY transfer an entity if not otherwise restricted by the request method or response status code. An entity consists of entity-header fields and an entity-body, although some responses will only include the entity-headers. In this section, both sender and recipient refer to either the client or the server, depending on who sends and who receives the entity. 7.1 Entity Header Fields Entity-header fields define metainformation about the entity-body or, if no body is present, about the resource identified by the request. Some of this metainformation is OPTIONAL; some might be REQUIRED by portions of this specification. entity-header = Allow ; Section 14.7 | Content-Encoding ; Section 14.11 | Content-Language ; Section 14.12 | Content-Length ; Section 14.13 | Content-Location ; Section 14.14 | Content-MD5 ; Section 14.15 | Content-Range ; Section 14.16 | Content-Type ; Section 14.17 | Expires ; Section 14.21 | Last-Modified ; Section 14.29 | extension-header extension-header = message-header The extension-header mechanism allows additional entity-header fields to be defined without changing the protocol, but these fields cannot be assumed to be recognizable by the recipient. Unrecognized header fields SHOULD be ignored by the recipient and MUST be forwarded by transparent proxies. Fielding, et al. Standards Track [Page 42] RFC 2616 HTTP/1.1 June 1999 7.2 Entity Body The entity-body (if any) sent with an HTTP request or response is in a format and encoding defined by the entity-header fields. entity-body = *OCTET An entity-body is only present in a message when a message-body is present, as described in section 4.3. The entity-body is obtained from the message-body by decoding any Transfer-Encoding that might have been applied to ensure safe and proper transfer of the message. 7.2.1 Type When an entity-body is included with a message, the data type of that body is determined via the header fields Content-Type and Content- Encoding. These define a two-layer, ordered encoding model: entity-body := Content-Encoding( Content-Type( data ) ) Content-Type specifies the media type of the underlying data. Content-Encoding may be used to indicate any additional content codings applied to the data, usually for the purpose of data compression, that are a property of the requested resource. There is no default encoding. Any HTTP/1.1 message containing an entity-body SHOULD include a Content-Type header field defining the media type of that body. If and only if the media type is not given by a Content-Type field, the recipient MAY attempt to guess the media type via inspection of its content and/or the name extension(s) of the URI used to identify the resource. If the media type remains unknown, the recipient SHOULD treat it as type "application/octet-stream". 7.2.2 Entity Length The entity-length of a message is the length of the message-body before any transfer-codings have been applied. Section 4.4 defines how the transfer-length of a message-body is determined. Fielding, et al. Standards Track [Page 43] RFC 2616 HTTP/1.1 June 1999 8 Connections 8.1 Persistent Connections 8.1.1 Purpose Prior to persistent connections, a separate TCP connection was established to fetch each URL, increasing the load on HTTP servers and causing congestion on the Internet. The use of inline images and other associated data often require a client to make multiple requests of the same server in a short amount of time. Analysis of these performance problems and results from a prototype implementation are available [26] [30]. Implementation experience and measurements of actual HTTP/1.1 (RFC 2068) implementations show good results [39]. Alternatives have also been explored, for example, T/TCP [27]. Persistent HTTP connections have a number of advantages: - By opening and closing fewer TCP connections, CPU time is saved in routers and hosts (clients, servers, proxies, gateways, tunnels, or caches), and memory used for TCP protocol control blocks can be saved in hosts. - HTTP requests and responses can be pipelined on a connection. Pipelining allows a client to make multiple requests without waiting for each response, allowing a single TCP connection to be used much more efficiently, with much lower elapsed time. - Network congestion is reduced by reducing the number of packets caused by TCP opens, and by allowing TCP sufficient time to determine the congestion state of the network. - Latency on subsequent requests is reduced since there is no time spent in TCP's connection opening handshake. - HTTP can evolve more gracefully, since errors can be reported without the penalty of closing the TCP connection. Clients using future versions of HTTP might optimistically try a new feature, but if communicating with an older server, retry with old semantics after an error is reported. HTTP implementations SHOULD implement persistent connections. Fielding, et al. Standards Track [Page 44] RFC 2616 HTTP/1.1 June 1999 8.1.2 Overall Operation A significant difference between HTTP/1.1 and earlier versions of HTTP is that persistent connections are the default behavior of any HTTP connection. That is, unless otherwise indicated, the client SHOULD assume that the server will maintain a persistent connection, even after error responses from the server. Persistent connections provide a mechanism by which a client and a server can signal the close of a TCP connection. This signaling takes place using the Connection header field (section 14.10). Once a close has been signaled, the client MUST NOT send any more requests on that connection. 8.1.2.1 Negotiation An HTTP/1.1 server MAY assume that a HTTP/1.1 client intends to maintain a persistent connection unless a Connection header including the connection-token "close" was sent in the request. If the server chooses to close the connection immediately after sending the response, it SHOULD send a Connection header including the connection-token close. An HTTP/1.1 client MAY expect a connection to remain open, but would decide to keep it open based on whether the response from a server contains a Connection header with the connection-token close. In case the client does not want to maintain a connection for more than that request, it SHOULD send a Connection header including the connection-token close. If either the client or the server sends the close token in the Connection header, that request becomes the last one for the connection. Clients and servers SHOULD NOT assume that a persistent connection is maintained for HTTP versions less than 1.1 unless it is explicitly signaled. See section 19.6.2 for more information on backward compatibility with HTTP/1.0 clients. In order to remain persistent, all messages on the connection MUST have a self-defined message length (i.e., one not defined by closure of the connection), as described in section 4.4. Fielding, et al. Standards Track [Page 45] RFC 2616 HTTP/1.1 June 1999 8.1.2.2 Pipelining A client that supports persistent connections MAY "pipeline" its requests (i.e., send multiple requests without waiting for each response). A server MUST send its responses to those requests in the same order that the requests were received. Clients which assume persistent connections and pipeline immediately after connection establishment SHOULD be prepared to retry their connection if the first pipelined attempt fails. If a client does such a retry, it MUST NOT pipeline before it knows the connection is persistent. Clients MUST also be prepared to resend their requests if the server closes the connection before sending all of the corresponding responses. Clients SHOULD NOT pipeline requests using non-idempotent methods or non-idempotent sequences of methods (see section 9.1.2). Otherwise, a premature termination of the transport connection could lead to indeterminate results. A client wishing to send a non-idempotent request SHOULD wait to send that request until it has received the response status for the previous request. 8.1.3 Proxy Servers It is especially important that proxies correctly implement the properties of the Connection header field as specified in section 14.10. The proxy server MUST signal persistent connections separately with its clients and the origin servers (or other proxy servers) that it connects to. Each persistent connection applies to only one transport link. A proxy server MUST NOT establish a HTTP/1.1 persistent connection with an HTTP/1.0 client (but see RFC 2068 [33] for information and discussion of the problems with the Keep-Alive header implemented by many HTTP/1.0 clients). 8.1.4 Practical Considerations Servers will usually have some time-out value beyond which they will no longer maintain an inactive connection. Proxy servers might make this a higher value since it is likely that the client will be making more connections through the same server. The use of persistent connections places no requirements on the length (or existence) of this time-out for either the client or the server. Fielding, et al. Standards Track [Page 46] RFC 2616 HTTP/1.1 June 1999 When a client or server wishes to time-out it SHOULD issue a graceful close on the transport connection. Clients and servers SHOULD both constantly watch for the other side of the transport close, and respond to it as appropriate. If a client or server does not detect the other side's close promptly it could cause unnecessary resource drain on the network. A client, server, or proxy MAY close the transport connection at any time. For example, a client might have started to send a new request at the same time that the server has decided to close the "idle" connection. From the server's point of view, the connection is being closed while it was idle, but from the client's point of view, a request is in progress. This means that clients, servers, and proxies MUST be able to recover from asynchronous close events. Client software SHOULD reopen the transport connection and retransmit the aborted sequence of requests without user interaction so long as the request sequence is idempotent (see section 9.1.2). Non-idempotent methods or sequences MUST NOT be automatically retried, although user agents MAY offer a human operator the choice of retrying the request(s). Confirmation by user-agent software with semantic understanding of the application MAY substitute for user confirmation. The automatic retry SHOULD NOT be repeated if the second sequence of requests fails. Servers SHOULD always respond to at least one request per connection, if at all possible. Servers SHOULD NOT close a connection in the middle of transmitting a response, unless a network or client failure is suspected. Clients that use persistent connections SHOULD limit the number of simultaneous connections that they maintain to a given server. A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy. A proxy SHOULD use up to 2*N connections to another server or proxy, where N is the number of simultaneously active users. These guidelines are intended to improve HTTP response times and avoid congestion. 8.2 Message Transmission Requirements 8.2.1 Persistent Connections and Flow Control HTTP/1.1 servers SHOULD maintain persistent connections and use TCP's flow control mechanisms to resolve temporary overloads, rather than terminating connections with the expectation that clients will retry. The latter technique can exacerbate network congestion. Fielding, et al. Standards Track [Page 47] RFC 2616 HTTP/1.1 June 1999 8.2.2 Monitoring Connections for Error Status Messages An HTTP/1.1 (or later) client sending a message-body SHOULD monitor the network connection for an error status while it is transmitting the request. If the client sees an error status, it SHOULD immediately cease transmitting the body. If the body is being sent using a "chunked" encoding (section 3.6), a zero length chunk and empty trailer MAY be used to prematurely mark the end of the message. If the body was preceded by a Content-Length header, the client MUST close the connection. 8.2.3 Use of the 100 (Continue) Status The purpose of the 100 (Continue) status (see section 10.1.1) is to allow a client that is sending a request message with a request body to determine if the origin server is willing to accept the request (based on the request headers) before the client sends the request body. In some cases, it might either be inappropriate or highly inefficient for the client to send the body if the server will reject the message without looking at the body. Requirements for HTTP/1.1 clients: - If a client will wait for a 100 (Continue) response before sending the request body, it MUST send an Expect request-header field (section 14.20) with the "100-continue" expectation. - A client MUST NOT send an Expect request-header field (section 14.20) with the "100-continue" expectation if it does not intend to send a request body. Because of the presence of older implementations, the protocol allows ambiguous situations in which a client may send "Expect: 100- continue" without receiving either a 417 (Expectation Failed) status or a 100 (Continue) status. Therefore, when a client sends this header field to an origin server (possibly via a proxy) from which it has never seen a 100 (Continue) status, the client SHOULD NOT wait for an indefinite period before sending the request body. Requirements for HTTP/1.1 origin servers: - Upon receiving a request which includes an Expect request-header field with the "100-continue" expectation, an origin server MUST either respond with 100 (Continue) status and continue to read from the input stream, or respond with a final status code. The origin server MUST NOT wait for the request body before sending the 100 (Continue) response. If it responds with a final status code, it MAY close the transport connection or it MAY continue Fielding, et al. Standards Track [Page 48] RFC 2616 HTTP/1.1 June 1999 to read and discard the rest of the request. It MUST NOT perform the requested method if it returns a final status code. - An origin server SHOULD NOT send a 100 (Continue) response if the request message does not include an Expect request-header field with the "100-continue" expectation, and MUST NOT send a 100 (Continue) response if such a request comes from an HTTP/1.0 (or earlier) client. There is an exception to this rule: for compatibility with RFC 2068, a server MAY send a 100 (Continue) status in response to an HTTP/1.1 PUT or POST request that does not include an Expect request-header field with the "100- continue" expectation. This exception, the purpose of which is to minimize any client processing delays associated with an undeclared wait for 100 (Continue) status, applies only to HTTP/1.1 requests, and not to requests with any other HTTP- version value. - An origin server MAY omit a 100 (Continue) response if it has already received some or all of the request body for the corresponding request. - An origin server that sends a 100 (Continue) response MUST ultimately send a final status code, once the request body is received and processed, unless it terminates the transport connection prematurely. - If an origin server receives a request that does not include an Expect request-header field with the "100-continue" expectation, the request includes a request body, and the server responds with a final status code before reading the entire request body from the transport connection, then the server SHOULD NOT close the transport connection until it has read the entire request, or until the client closes the connection. Otherwise, the client might not reliably receive the response message. However, this requirement is not be construed as preventing a server from defending itself against denial-of-service attacks, or from badly broken client implementations. Requirements for HTTP/1.1 proxies: - If a proxy receives a request that includes an Expect request- header field with the "100-continue" expectation, and the proxy either knows that the next-hop server complies with HTTP/1.1 or higher, or does not know the HTTP version of the next-hop server, it MUST forward the request, including the Expect header field. Fielding, et al. Standards Track [Page 49] RFC 2616 HTTP/1.1 June 1999 - If the proxy knows that the version of the next-hop server is HTTP/1.0 or lower, it MUST NOT forward the request, and it MUST respond with a 417 (Expectation Failed) status. - Proxies SHOULD maintain a cache recording the HTTP version numbers received from recently-referenced next-hop servers. - A proxy MUST NOT forward a 100 (Continue) response if the request message was received from an HTTP/1.0 (or earlier) client and did not include an Expect request-header field with the "100-continue" expectation. This requirement overrides the general rule for forwarding of 1xx responses (see section 10.1). 8.2.4 Client Behavior if Server Prematurely Closes Connection If an HTTP/1.1 client sends a request which includes a request body, but which does not include an Expect request-header field with the "100-continue" expectation, and if the client is not directly connected to an HTTP/1.1 origin server, and if the client sees the connection close before receiving any status from the server, the client SHOULD retry the request. If the client does retry this request, it MAY use the following "binary exponential backoff" algorithm to be assured of obtaining a reliable response: 1. Initiate a new connection to the server 2. Transmit the request-headers 3. Initialize a variable R to the estimated round-trip time to the server (e.g., based on the time it took to establish the connection), or to a constant value of 5 seconds if the round- trip time is not available. 4. Compute T = R * (2**N), where N is the number of previous retries of this request. 5. Wait either for an error response from the server, or for T seconds (whichever comes first) 6. If no error response is received, after T seconds transmit the body of the request. 7. If client sees that the connection is closed prematurely, repeat from step 1 until the request is accepted, an error response is received, or the user becomes impatient and terminates the retry process. Fielding, et al. Standards Track [Page 50] RFC 2616 HTTP/1.1 June 1999 If at any point an error status is received, the client - SHOULD NOT continue and - SHOULD close the connection if it has not completed sending the request message. 9 Method Definitions The set of common methods for HTTP/1.1 is defined below. Although this set can be expanded, additional methods cannot be assumed to share the same semantics for separately extended clients and servers. The Host request-header field (section 14.23) MUST accompany all HTTP/1.1 requests. 9.1 Safe and Idempotent Methods 9.1.1 Safe Methods Implementors should be aware that the software represents the user in their interactions over the Internet, and should be careful to allow the user to be aware of any actions they might take which may have an unexpected significance to themselves or others. In particular, the convention has been established that the GET and HEAD methods SHOULD NOT have the significance of taking an action other than retrieval. These methods ought to be considered "safe". This allows user agents to represent other methods, such as POST, PUT and DELETE, in a special way, so that the user is made aware of the fact that a possibly unsafe action is being requested. Naturally, it is not possible to ensure that the server does not generate side-effects as a result of performing a GET request; in fact, some dynamic resources consider that a feature. The important distinction here is that the user did not request the side-effects, so therefore cannot be held accountable for them. 9.1.2 Idempotent Methods Methods can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request. The methods GET, HEAD, PUT and DELETE share this property. Also, the methods OPTIONS and TRACE SHOULD NOT have side effects, and so are inherently idempotent. Fielding, et al. Standards Track [Page 51] RFC 2616 HTTP/1.1 June 1999 However, it is possible that a sequence of several requests is non- idempotent, even if all of the methods executed in that sequence are idempotent. (A sequence is idempotent if a single execution of the entire sequence always yields a result that is not changed by a reexecution of all, or part, of that sequence.) For example, a sequence is non-idempotent if its result depends on a value that is later modified in the same sequence. A sequence that never has side effects is idempotent, by definition (provided that no concurrent operations are being executed on the same set of resources). 9.2 OPTIONS The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI. This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval. Responses to this method are not cacheable. If the OPTIONS request includes an entity-body (as indicated by the presence of Content-Length or Transfer-Encoding), then the media type MUST be indicated by a Content-Type field. Although this specification does not define any use for such a body, future extensions to HTTP might use the OPTIONS body to make more detailed queries on the server. A server that does not support such an extension MAY discard the request body. If the Request-URI is an asterisk ("*"), the OPTIONS request is intended to apply to the server in general rather than to a specific resource. Since a server's communication options typically depend on the resource, the "*" request is only useful as a "ping" or "no-op" type of method; it does nothing beyond allowing the client to test the capabilities of the server. For example, this can be used to test a proxy for HTTP/1.1 compliance (or lack thereof). If the Request-URI is not an asterisk, the OPTIONS request applies only to the options that are available when communicating with that resource. A 200 response SHOULD include any header fields that indicate optional features implemented by the server and applicable to that resource (e.g., Allow), possibly including extensions not defined by this specification. The response body, if any, SHOULD also include information about the communication options. The format for such a Fielding, et al. Standards Track [Page 52] RFC 2616 HTTP/1.1 June 1999 body is not defined by this specification, but might be defined by future extensions to HTTP. Content negotiation MAY be used to select the appropriate response format. If no response body is included, the response MUST include a Content-Length field with a field-value of "0". The Max-Forwards request-header field MAY be used to target a specific proxy in the request chain. When a proxy receives an OPTIONS request on an absoluteURI for which request forwarding is permitted, the proxy MUST check for a Max-Forwards field. If the Max-Forwards field-value is zero ("0"), the proxy MUST NOT forward the message; instead, the proxy SHOULD respond with its own communication options. If the Max-Forwards field-value is an integer greater than zero, the proxy MUST decrement the field-value when it forwards the request. If no Max-Forwards field is present in the request, then the forwarded request MUST NOT include a Max-Forwards field. 9.3 GET The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI. If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the entity in the response and not the source text of the process, unless that text happens to be the output of the process. The semantics of the GET method change to a "conditional GET" if the request message includes an If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, or If-Range header field. A conditional GET method requests that the entity be transferred only under the circumstances described by the conditional header field(s). The conditional GET method is intended to reduce unnecessary network usage by allowing cached entities to be refreshed without requiring multiple requests or transferring data already held by the client. The semantics of the GET method change to a "partial GET" if the request message includes a Range header field. A partial GET requests that only part of the entity be transferred, as described in section 14.35. The partial GET method is intended to reduce unnecessary network usage by allowing partially-retrieved entities to be completed without transferring data already held by the client. The response to a GET request is cacheable if and only if it meets the requirements for HTTP caching described in section 13. See section 15.1.3 for security considerations when used for forms. Fielding, et al. Standards Track [Page 53] RFC 2616 HTTP/1.1 June 1999 9.4 HEAD The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. The metainformation contained in the HTTP headers in response to a HEAD request SHOULD be identical to the information sent in response to a GET request. This method can be used for obtaining metainformation about the entity implied by the request without transferring the entity-body itself. This method is often used for testing hypertext links for validity, accessibility, and recent modification. The response to a HEAD request MAY be cacheable in the sense that the information contained in the response MAY be used to update a previously cached entity from that resource. If the new field values indicate that the cached entity differs from the current entity (as would be indicated by a change in Content-Length, Content-MD5, ETag or Last-Modified), then the cache MUST treat the cache entry as stale. 9.5 POST The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. POST is designed to allow a uniform method to cover the following functions: - Annotation of existing resources; - Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles; - Providing a block of data, such as the result of submitting a form, to a data-handling process; - Extending a database through an append operation. The actual function performed by the POST method is determined by the server and is usually dependent on the Request-URI. The posted entity is subordinate to that URI in the same way that a file is subordinate to a directory containing it, a news article is subordinate to a newsgroup to which it is posted, or a record is subordinate to a database. The action performed by the POST method might not result in a resource that can be identified by a URI. In this case, either 200 (OK) or 204 (No Content) is the appropriate response status, depending on whether or not the response includes an entity that describes the result. Fielding, et al. Standards Track [Page 54] RFC 2616 HTTP/1.1 June 1999 If a resource has been created on the origin server, the response SHOULD be 201 (Created) and contain an entity which describes the status of the request and refers to the new resource, and a Location header (see section 14.30). Responses to this method are not cacheable, unless the response includes appropriate Cache-Control or Expires header fields. However, the 303 (See Other) response can be used to direct the user agent to retrieve a cacheable resource. POST requests MUST obey the message transmission requirements set out in section 8.2. See section 15.1.3 for security considerations. 9.6 PUT The PUT method requests that the enclosed entity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server. If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new resource by the requesting user agent, the origin server can create the resource with that URI. If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to indicate successful completion of the request. If the resource could not be created or modified with the Request-URI, an appropriate error response SHOULD be given that reflects the nature of the problem. The recipient of the entity MUST NOT ignore any Content-* (e.g. Content-Range) headers that it does not understand or implement and MUST return a 501 (Not Implemented) response in such cases. If the request passes through a cache and the Request-URI identifies one or more currently cached entities, those entries SHOULD be treated as stale. Responses to this method are not cacheable. The fundamental difference between the POST and PUT requests is reflected in the different meaning of the Request-URI. The URI in a POST request identifies the resource that will handle the enclosed entity. That resource might be a data-accepting process, a gateway to some other protocol, or a separate entity that accepts annotations. In contrast, the URI in a PUT request identifies the entity enclosed with the request -- the user agent knows what URI is intended and the server MUST NOT attempt to apply the request to some other resource. If the server desires that the request be applied to a different URI, Fielding, et al. Standards Track [Page 55] RFC 2616 HTTP/1.1 June 1999 it MUST send a 301 (Moved Permanently) response; the user agent MAY then make its own decision regarding whether or not to redirect the request. A single resource MAY be identified by many different URIs. For example, an article might have a URI for identifying "the current version" which is separate from the URI identifying each particular version. In this case, a PUT request on a general URI might result in several other URIs being defined by the origin server. HTTP/1.1 does not define how a PUT method affects the state of an origin server. PUT requests MUST obey the message transmission requirements set out in section 8.2. Unless otherwise specified for a particular entity-header, the entity-headers in the PUT request SHOULD be applied to the resource created or modified by the PUT. 9.7 DELETE The DELETE method requests that the origin server delete the resource identified by the Request-URI. This method MAY be overridden by human intervention (or other means) on the origin server. The client cannot be guaranteed that the operation has been carried out, even if the status code returned from the origin server indicates that the action has been completed successfully. However, the server SHOULD NOT indicate success unless, at the time the response is given, it intends to delete the resource or move it to an inaccessible location. A successful response SHOULD be 200 (OK) if the response includes an entity describing the status, 202 (Accepted) if the action has not yet been enacted, or 204 (No Content) if the action has been enacted but the response does not include an entity. If the request passes through a cache and the Request-URI identifies one or more currently cached entities, those entries SHOULD be treated as stale. Responses to this method are not cacheable. 9.8 TRACE The TRACE method is used to invoke a remote, application-layer loop- back of the request message. The final recipient of the request SHOULD reflect the message received back to the client as the entity-body of a 200 (OK) response. The final recipient is either the Fielding, et al. Standards Track [Page 56] RFC 2616 HTTP/1.1 June 1999 origin server or the first proxy or gateway to receive a Max-Forwards value of zero (0) in the request (see section 14.31). A TRACE request MUST NOT include an entity. TRACE allows the client to see what is being received at the other end of the request chain and use that data for testing or diagnostic information. The value of the Via header field (section 14.45) is of particular interest, since it acts as a trace of the request chain. Use of the Max-Forwards header field allows the client to limit the length of the request chain, which is useful for testing a chain of proxies forwarding messages in an infinite loop. If the request is valid, the response SHOULD contain the entire request message in the entity-body, with a Content-Type of "message/http". Responses to this method MUST NOT be cached. 9.9 CONNECT This specification reserves the method name CONNECT for use with a proxy that can dynamically switch to being a tunnel (e.g. SSL tunneling [44]). 10 Status Code Definitions Each Status-Code is described below, including a description of which method(s) it can follow and any metainformation required in the response. 10.1 Informational 1xx This class of status code indicates a provisional response, consisting only of the Status-Line and optional headers, and is terminated by an empty line. There are no required headers for this class of status code. Since HTTP/1.0 did not define any 1xx status codes, servers MUST NOT send a 1xx response to an HTTP/1.0 client except under experimental conditions. A client MUST be prepared to accept one or more 1xx status responses prior to a regular response, even if the client does not expect a 100 (Continue) status message. Unexpected 1xx status responses MAY be ignored by a user agent. Proxies MUST forward 1xx responses, unless the connection between the proxy and its client has been closed, or unless the proxy itself requested the generation of the 1xx response. (For example, if a Fielding, et al. Standards Track [Page 57] RFC 2616 HTTP/1.1 June 1999 proxy adds a "Expect: 100-continue" field when it forwards a request, then it need not forward the corresponding 100 (Continue) response(s).) 10.1.1 100 Continue The client SHOULD continue with its request. This interim response is used to inform the client that the initial part of the request has been received and has not yet been rejected by the server. The client SHOULD continue by sending the remainder of the request or, if the request has already been completed, ignore this response. The server MUST send a final response after the request has been completed. See section 8.2.3 for detailed discussion of the use and handling of this status code. 10.1.2 101 Switching Protocols The server understands and is willing to comply with the client's request, via the Upgrade message header field (section 14.42), for a change in the application protocol being used on this connection. The server will switch protocols to those defined by the response's Upgrade header field immediately after the empty line which terminates the 101 response. The protocol SHOULD be switched only when it is advantageous to do so. For example, switching to a newer version of HTTP is advantageous over older versions, and switching to a real-time, synchronous protocol might be advantageous when delivering resources that use such features. 10.2 Successful 2xx This class of status code indicates that the client's request was successfully received, understood, and accepted. 10.2.1 200 OK The request has succeeded. The information returned with the response is dependent on the method used in the request, for example: GET an entity corresponding to the requested resource is sent in the response; HEAD the entity-header fields corresponding to the requested resource are sent in the response without any message-body; POST an entity describing or containing the result of the action; Fielding, et al. Standards Track [Page 58] RFC 2616 HTTP/1.1 June 1999 TRACE an entity containing the request message as received by the end server. 10.2.2 201 Created The request has been fulfilled and resulted in a new resource being created. The newly created resource can be referenced by the URI(s) returned in the entity of the response, with the most specific URI for the resource given by a Location header field. The response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. The origin server MUST create the resource before returning the 201 status code. If the action cannot be carried out immediately, the server SHOULD respond with 202 (Accepted) response instead. A 201 response MAY contain an ETag response header field indicating the current value of the entity tag for the requested variant just created, see section 14.19. 10.2.3 202 Accepted The request has been accepted for processing, but the processing has not been completed. The request might or might not eventually be acted upon, as it might be disallowed when processing actually takes place. There is no facility for re-sending a status code from an asynchronous operation such as this. The 202 response is intentionally non-committal. Its purpose is to allow a server to accept a request for some other process (perhaps a batch-oriented process that is only run once per day) without requiring that the user agent's connection to the server persist until the process is completed. The entity returned with this response SHOULD include an indication of the request's current status and either a pointer to a status monitor or some estimate of when the user can expect the request to be fulfilled. 10.2.4 203 Non-Authoritative Information The returned metainformation in the entity-header is not the definitive set as available from the origin server, but is gathered from a local or a third-party copy. The set presented MAY be a subset or superset of the original version. For example, including local annotation information about the resource might result in a superset of the metainformation known by the origin server. Use of this response code is not required and is only appropriate when the response would otherwise be 200 (OK). Fielding, et al. Standards Track [Page 59] RFC 2616 HTTP/1.1 June 1999 10.2.5 204 No Content The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. The response MAY include new or updated metainformation in the form of entity-headers, which if present SHOULD be associated with the requested variant. If the client is a user agent, it SHOULD NOT change its document view from that which caused the request to be sent. This response is primarily intended to allow input for actions to take place without causing a change to the user agent's active document view, although any new or updated metainformation SHOULD be applied to the document currently in the user agent's active view. The 204 response MUST NOT include a message-body, and thus is always terminated by the first empty line after the header fields. 10.2.6 205 Reset Content The server has fulfilled the request and the user agent SHOULD reset the document view which caused the request to be sent. This response is primarily intended to allow input for actions to take place via user input, followed by a clearing of the form in which the input is given so that the user can easily initiate another input action. The response MUST NOT include an entity. 10.2.7 206 Partial Content The server has fulfilled the partial GET request for the resource. The request MUST have included a Range header field (section 14.35) indicating the desired range, and MAY have included an If-Range header field (section 14.27) to make the request conditional. The response MUST include the following header fields: - Either a Content-Range header field (section 14.16) indicating the range included with this response, or a multipart/byteranges Content-Type including Content-Range fields for each part. If a Content-Length header field is present in the response, its value MUST match the actual number of OCTETs transmitted in the message-body. - Date - ETag and/or Content-Location, if the header would have been sent in a 200 response to the same request Fielding, et al. Standards Track [Page 60] RFC 2616 HTTP/1.1 June 1999 - Expires, Cache-Control, and/or Vary, if the field-value might differ from that sent in any previous response for the same variant If the 206 response is the result of an If-Range request that used a strong cache validator (see section 13.3.3), the response SHOULD NOT include other entity-headers. If the response is the result of an If-Range request that used a weak validator, the response MUST NOT include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers. Otherwise, the response MUST include all of the entity-headers that would have been returned with a 200 (OK) response to the same request. A cache MUST NOT combine a 206 response with other previously cached content if the ETag or Last-Modified headers do not match exactly, see 13.5.4. A cache that does not support the Range and Content-Range headers MUST NOT cache 206 (Partial) responses. 10.3 Redirection 3xx This class of status code indicates that further action needs to be taken by the user agent in order to fulfill the request. The action required MAY be carried out by the user agent without interaction with the user if and only if the method used in the second request is GET or HEAD. A client SHOULD detect infinite redirection loops, since such loops generate network traffic for each redirection. Note: previous versions of this specification recommended a maximum of five redirections. Content developers should be aware that there might be clients that implement such a fixed limitation. 10.3.1 300 Multiple Choices The requested resource corresponds to any one of a set of representations, each with its own specific location, and agent- driven negotiation information (section 12) is being provided so that the user (or user agent) can select a preferred representation and redirect its request to that location. Unless it was a HEAD request, the response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content- Type header field. Depending upon the format and the capabilities of Fielding, et al. Standards Track [Page 61] RFC 2616 HTTP/1.1 June 1999 the user agent, selection of the most appropriate choice MAY be performed automatically. However, this specification does not define any standard for such automatic selection. If the server has a preferred choice of representation, it SHOULD include the specific URI for that representation in the Location field; user agents MAY use the Location field value for automatic redirection. This response is cacheable unless indicated otherwise. 10.3.2 301 Moved Permanently The requested resource has been assigned a new permanent URI and any future references to this resource SHOULD use one of the returned URIs. Clients with link editing capabilities ought to automatically re-link references to the Request-URI to one or more of the new references returned by the server, where possible. This response is cacheable unless indicated otherwise. The new permanent URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s). If the 301 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued. Note: When automatically redirecting a POST request after receiving a 301 status code, some existing HTTP/1.0 user agents will erroneously change it into a GET request. 10.3.3 302 Found The requested resource resides temporarily under a different URI. Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field. The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s). Fielding, et al. Standards Track [Page 62] RFC 2616 HTTP/1.1 June 1999 If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued. Note: RFC 1945 and RFC 2068 specify that the client is not allowed to change the method on the redirected request. However, most existing user agent implementations treat 302 as if it were a 303 response, performing a GET on the Location field-value regardless of the original request method. The status codes 303 and 307 have been added for servers that wish to make unambiguously clear which kind of reaction is expected of the client. 10.3.4 303 See Other The response to the request can be found under a different URI and SHOULD be retrieved using a GET method on that resource. This method exists primarily to allow the output of a POST-activated script to redirect the user agent to a selected resource. The new URI is not a substitute reference for the originally requested resource. The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable. The different URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s). Note: Many pre-HTTP/1.1 user agents do not understand the 303 status. When interoperability with such clients is a concern, the 302 status code may be used instead, since most user agents react to a 302 response as described here for 303. 10.3.5 304 Not Modified If the client has performed a conditional GET request and access is allowed, but the document has not been modified, the server SHOULD respond with this status code. The 304 response MUST NOT contain a message-body, and thus is always terminated by the first empty line after the header fields. The response MUST include the following header fields: - Date, unless its omission is required by section 14.18.1 Fielding, et al. Standards Track [Page 63] RFC 2616 HTTP/1.1 June 1999 If a clockless origin server obeys these rules, and proxies and clients add their own Date to any response received without one (as already specified by [RFC 2068], section 14.19), caches will operate correctly. - ETag and/or Content-Location, if the header would have been sent in a 200 response to the same request - Expires, Cache-Control, and/or Vary, if the field-value might differ from that sent in any previous response for the same variant If the conditional GET used a strong cache validator (see section 13.3.3), the response SHOULD NOT include other entity-headers. Otherwise (i.e., the conditional GET used a weak validator), the response MUST NOT include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers. If a 304 response indicates an entity not currently cached, then the cache MUST disregard the response and repeat the request without the conditional. If a cache uses a received 304 response to update a cache entry, the cache MUST update the entry to reflect any new field values given in the response. 10.3.6 305 Use Proxy The requested resource MUST be accessed through the proxy given by the Location field. The Location field gives the URI of the proxy. The recipient is expected to repeat this single request via the proxy. 305 responses MUST only be generated by origin servers. Note: RFC 2068 was not clear that 305 was intended to redirect a single request, and to be generated by origin servers only. Not observing these limitations has significant security consequences. 10.3.7 306 (Unused) The 306 status code was used in a previous version of the specification, is no longer used, and the code is reserved. Fielding, et al. Standards Track [Page 64] RFC 2616 HTTP/1.1 June 1999 10.3.8 307 Temporary Redirect The requested resource resides temporarily under a different URI. Since the redirection MAY be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field. The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s) , since many pre-HTTP/1.1 user agents do not understand the 307 status. Therefore, the note SHOULD contain the information necessary for a user to repeat the original request on the new URI. If the 307 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued. 10.4 Client Error 4xx The 4xx class of status code is intended for cases in which the client seems to have erred. Except when responding to a HEAD request, the server SHOULD include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. These status codes are applicable to any request method. User agents SHOULD display any included entity to the user. If the client is sending data, a server implementation using TCP SHOULD be careful to ensure that the client acknowledges receipt of the packet(s) containing the response, before the server closes the input connection. If the client continues sending data to the server after the close, the server's TCP stack will send a reset packet to the client, which may erase the client's unacknowledged input buffers before they can be read and interpreted by the HTTP application. 10.4.1 400 Bad Request The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications. Fielding, et al. Standards Track [Page 65] RFC 2616 HTTP/1.1 June 1999 10.4.2 401 Unauthorized The request requires user authentication. The response MUST include a WWW-Authenticate header field (section 14.47) containing a challenge applicable to the requested resource. The client MAY repeat the request with a suitable Authorization header field (section 14.8). If the request already included Authorization credentials, then the 401 response indicates that authorization has been refused for those credentials. If the 401 response contains the same challenge as the prior response, and the user agent has already attempted authentication at least once, then the user SHOULD be presented the entity that was given in the response, since that entity might include relevant diagnostic information. HTTP access authentication is explained in "HTTP Authentication: Basic and Digest Access Authentication" [43]. 10.4.3 402 Payment Required This code is reserved for future use. 10.4.4 403 Forbidden The server understood the request, but is refusing to fulfill it. Authorization will not help and the request SHOULD NOT be repeated. If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, it SHOULD describe the reason for the refusal in the entity. If the server does not wish to make this information available to the client, the status code 404 (Not Found) can be used instead. 10.4.5 404 Not Found The server has not found anything matching the Request-URI. No indication is given of whether the condition is temporary or permanent. The 410 (Gone) status code SHOULD be used if the server knows, through some internally configurable mechanism, that an old resource is permanently unavailable and has no forwarding address. This status code is commonly used when the server does not wish to reveal exactly why the request has been refused, or when no other response is applicable. 10.4.6 405 Method Not Allowed The method specified in the Request-Line is not allowed for the resource identified by the Request-URI. The response MUST include an Allow header containing a list of valid methods for the requested resource. Fielding, et al. Standards Track [Page 66] RFC 2616 HTTP/1.1 June 1999 10.4.7 406 Not Acceptable The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. Unless it was a HEAD request, the response SHOULD include an entity containing a list of available entity characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. Depending upon the format and the capabilities of the user agent, selection of the most appropriate choice MAY be performed automatically. However, this specification does not define any standard for such automatic selection. Note: HTTP/1.1 servers are allowed to return responses which are not acceptable according to the accept headers sent in the request. In some cases, this may even be preferable to sending a 406 response. User agents are encouraged to inspect the headers of an incoming response to determine if it is acceptable. If the response could be unacceptable, a user agent SHOULD temporarily stop receipt of more data and query the user for a decision on further actions. 10.4.8 407 Proxy Authentication Required This code is similar to 401 (Unauthorized), but indicates that the client must first authenticate itself with the proxy. The proxy MUST return a Proxy-Authenticate header field (section 14.33) containing a challenge applicable to the proxy for the requested resource. The client MAY repeat the request with a suitable Proxy-Authorization header field (section 14.34). HTTP access authentication is explained in "HTTP Authentication: Basic and Digest Access Authentication" [43]. 10.4.9 408 Request Timeout The client did not produce a request within the time that the server was prepared to wait. The client MAY repeat the request without modifications at any later time. 10.4.10 409 Conflict The request could not be completed due to a conflict with the current state of the resource. This code is only allowed in situations where it is expected that the user might be able to resolve the conflict and resubmit the request. The response body SHOULD include enough Fielding, et al. Standards Track [Page 67] RFC 2616 HTTP/1.1 June 1999 information for the user to recognize the source of the conflict. Ideally, the response entity would include enough information for the user or user agent to fix the problem; however, that might not be possible and is not required. Conflicts are most likely to occur in response to a PUT request. For example, if versioning were being used and the entity being PUT included changes to a resource which conflict with those made by an earlier (third-party) request, the server might use the 409 response to indicate that it can't complete the request. In this case, the response entity would likely contain a list of the differences between the two versions in a format defined by the response Content-Type. 10.4.11 410 Gone The requested resource is no longer available at the server and no forwarding address is known. This condition is expected to be considered permanent. Clients with link editing capabilities SHOULD delete references to the Request-URI after user approval. If the server does not know, or has no facility to determine, whether or not the condition is permanent, the status code 404 (Not Found) SHOULD be used instead. This response is cacheable unless indicated otherwise. The 410 response is primarily intended to assist the task of web maintenance by notifying the recipient that the resource is intentionally unavailable and that the server owners desire that remote links to that resource be removed. Such an event is common for limited-time, promotional services and for resources belonging to individuals no longer working at the server's site. It is not necessary to mark all permanently unavailable resources as "gone" or to keep the mark for any length of time -- that is left to the discretion of the server owner. 10.4.12 411 Length Required The server refuses to accept the request without a defined Content- Length. The client MAY repeat the request if it adds a valid Content-Length header field containing the length of the message-body in the request message. 10.4.13 412 Precondition Failed The precondition given in one or more of the request-header fields evaluated to false when it was tested on the server. This response code allows the client to place preconditions on the current resource metainformation (header field data) and thus prevent the requested method from being applied to a resource other than the one intended. Fielding, et al. Standards Track [Page 68] RFC 2616 HTTP/1.1 June 1999 10.4.14 413 Request Entity Too Large The server is refusing to process a request because the request entity is larger than the server is willing or able to process. The server MAY close the connection to prevent the client from continuing the request. If the condition is temporary, the server SHOULD include a Retry- After header field to indicate that it is temporary and after what time the client MAY try again. 10.4.15 414 Request-URI Too Long The server is refusing to service the request because the Request-URI is longer than the server is willing to interpret. This rare condition is only likely to occur when a client has improperly converted a POST request to a GET request with long query information, when the client has descended into a URI "black hole" of redirection (e.g., a redirected URI prefix that points to a suffix of itself), or when the server is under attack by a client attempting to exploit security holes present in some servers using fixed-length buffers for reading or manipulating the Request-URI. 10.4.16 415 Unsupported Media Type The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. 10.4.17 416 Requested Range Not Satisfiable A server SHOULD return a response with this status code if a request included a Range request-header field (section 14.35), and none of the range-specifier values in this field overlap the current extent of the selected resource, and the request did not include an If-Range request-header field. (For byte-ranges, this means that the first- byte-pos of all of the byte-range-spec values were greater than the current length of the selected resource.) When this status code is returned for a byte-range request, the response SHOULD include a Content-Range entity-header field specifying the current length of the selected resource (see section 14.16). This response MUST NOT use the multipart/byteranges content- type. Fielding, et al. Standards Track [Page 69] RFC 2616 HTTP/1.1 June 1999 10.4.18 417 Expectation Failed The expectation given in an Expect request-header field (see section 14.20) could not be met by this server, or, if the server is a proxy, the server has unambiguous evidence that the request could not be met by the next-hop server. 10.5 Server Error 5xx Response status codes beginning with the digit "5" indicate cases in which the server is aware that it has erred or is incapable of performing the request. Except when responding to a HEAD request, the server SHOULD include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. User agents SHOULD display any included entity to the user. These response codes are applicable to any request method. 10.5.1 500 Internal Server Error The server encountered an unexpected condition which prevented it from fulfilling the request. 10.5.2 501 Not Implemented The server does not support the functionality required to fulfill the request. This is the appropriate response when the server does not recognize the request method and is not capable of supporting it for any resource. 10.5.3 502 Bad Gateway The server, while acting as a gateway or proxy, received an invalid response from the upstream server it accessed in attempting to fulfill the request. 10.5.4 503 Service Unavailable The server is currently unable to handle the request due to a temporary overloading or maintenance of the server. The implication is that this is a temporary condition which will be alleviated after some delay. If known, the length of the delay MAY be indicated in a Retry-After header. If no Retry-After is given, the client SHOULD handle the response as it would for a 500 response. Note: The existence of the 503 status code does not imply that a server must use it when becoming overloaded. Some servers may wish to simply refuse the connection. Fielding, et al. Standards Track [Page 70] RFC 2616 HTTP/1.1 June 1999 10.5.5 504 Gateway Timeout The server, while acting as a gateway or proxy, did not receive a timely response from the upstream server specified by the URI (e.g. HTTP, FTP, LDAP) or some other auxiliary server (e.g. DNS) it needed to access in attempting to complete the request. Note: Note to implementors: some deployed proxies are known to return 400 or 500 when DNS lookups time out. 10.5.6 505 HTTP Version Not Supported The server does not support, or refuses to support, the HTTP protocol version that was used in the request message. The server is indicating that it is unable or unwilling to complete the request using the same major version as the client, as described in section 3.1, other than with this error message. The response SHOULD contain an entity describing why that version is not supported and what other protocols are supported by that server. 11 Access Authentication HTTP provides several OPTIONAL challenge-response authentication mechanisms which can be used by a server to challenge a client request and by a client to provide authentication information. The general framework for access authentication, and the specification of "basic" and "digest" authentication, are specified in "HTTP Authentication: Basic and Digest Access Authentication" [43]. This specification adopts the definitions of "challenge" and "credentials" from that specification. 12 Content Negotiation Most HTTP responses include an entity which contains information for interpretation by a human user. Naturally, it is desirable to supply the user with the "best available" entity corresponding to the request. Unfortunately for servers and caches, not all users have the same preferences for what is "best," and not all user agents are equally capable of rendering all entity types. For that reason, HTTP has provisions for several mechanisms for "content negotiation" -- the process of selecting the best representation for a given response when there are multiple representations available. Note: This is not called "format negotiation" because the alternate representations may be of the same media type, but use different capabilities of that type, be in different languages, etc. Fielding, et al. Standards Track [Page 71] RFC 2616 HTTP/1.1 June 1999 Any response containing an entity-body MAY be subject to negotiation, including error responses. There are two kinds of content negotiation which are possible in HTTP: server-driven and agent-driven negotiation. These two kinds of negotiation are orthogonal and thus may be used separately or in combination. One method of combination, referred to as transparent negotiation, occurs when a cache uses the agent-driven negotiation information provided by the origin server in order to provide server-driven negotiation for subsequent requests. 12.1 Server-driven Negotiation If the selection of the best representation for a response is made by an algorithm located at the server, it is called server-driven negotiation. Selection is based on the available representations of the response (the dimensions over which it can vary; e.g. language, content-coding, etc.) and the contents of particular header fields in the request message or on other information pertaining to the request (such as the network address of the client). Server-driven negotiation is advantageous when the algorithm for selecting from among the available representations is difficult to describe to the user agent, or when the server desires to send its "best guess" to the client along with the first response (hoping to avoid the round-trip delay of a subsequent request if the "best guess" is good enough for the user). In order to improve the server's guess, the user agent MAY include request header fields (Accept, Accept-Language, Accept-Encoding, etc.) which describe its preferences for such a response. Server-driven negotiation has disadvantages: 1. It is impossible for the server to accurately determine what might be "best" for any given user, since that would require complete knowledge of both the capabilities of the user agent and the intended use for the response (e.g., does the user want to view it on screen or print it on paper?). 2. Having the user agent describe its capabilities in every request can be both very inefficient (given that only a small percentage of responses have multiple representations) and a potential violation of the user's privacy. 3. It complicates the implementation of an origin server and the algorithms for generating responses to a request. Fielding, et al. Standards Track [Page 72] RFC 2616 HTTP/1.1 June 1999 4. It may limit a public cache's ability to use the same response for multiple user's requests. HTTP/1.1 includes the following request-header fields for enabling server-driven negotiation through description of user agent capabilities and user preferences: Accept (section 14.1), Accept- Charset (section 14.2), Accept-Encoding (section 14.3), Accept- Language (section 14.4), and User-Agent (section 14.43). However, an origin server is not limited to these dimensions and MAY vary the response based on any aspect of the request, including information outside the request-header fields or within extension header fields not defined by this specification. The Vary header field can be used to express the parameters the server uses to select a representation that is subject to server- driven negotiation. See section 13.6 for use of the Vary header field by caches and section 14.44 for use of the Vary header field by servers. 12.2 Agent-driven Negotiation With agent-driven negotiation, selection of the best representation for a response is performed by the user agent after receiving an initial response from the origin server. Selection is based on a list of the available representations of the response included within the header fields or entity-body of the initial response, with each representation identified by its own URI. Selection from among the representations may be performed automatically (if the user agent is capable of doing so) or manually by the user selecting from a generated (possibly hypertext) menu. Agent-driven negotiation is advantageous when the response would vary over commonly-used dimensions (such as type, language, or encoding), when the origin server is unable to determine a user agent's capabilities from examining the request, and generally when public caches are used to distribute server load and reduce network usage. Agent-driven negotiation suffers from the disadvantage of needing a second request to obtain the best alternate representation. This second request is only efficient when caching is used. In addition, this specification does not define any mechanism for supporting automatic selection, though it also does not prevent any such mechanism from being developed as an extension and used within HTTP/1.1. Fielding, et al. Standards Track [Page 73] RFC 2616 HTTP/1.1 June 1999 HTTP/1.1 defines the 300 (Multiple Choices) and 406 (Not Acceptable) status codes for enabling agent-driven negotiation when the server is unwilling or unable to provide a varying response using server-driven negotiation. 12.3 Transparent Negotiation Transparent negotiation is a combination of both server-driven and agent-driven negotiation. When a cache is supplied with a form of the list of available representations of the response (as in agent-driven negotiation) and the dimensions of variance are completely understood by the cache, then the cache becomes capable of performing server- driven negotiation on behalf of the origin server for subsequent requests on that resource. Transparent negotiation has the advantage of distributing the negotiation work that would otherwise be required of the origin server and also removing the second request delay of agent-driven negotiation when the cache is able to correctly guess the right response. This specification does not define any mechanism for transparent negotiation, though it also does not prevent any such mechanism from being developed as an extension that could be used within HTTP/1.1. 13 Caching in HTTP HTTP is typically used for distributed information systems, where performance can be improved by the use of response caches. The HTTP/1.1 protocol includes a number of elements intended to make caching work as well as possible. Because these elements are inextricable from other aspects of the protocol, and because they interact with each other, it is useful to describe the basic caching design of HTTP separately from the detailed descriptions of methods, headers, response codes, etc. Caching would be useless if it did not significantly improve performance. The goal of caching in HTTP/1.1 is to eliminate the need to send requests in many cases, and to eliminate the need to send full responses in many other cases. The former reduces the number of network round-trips required for many operations; we use an "expiration" mechanism for this purpose (see section 13.2). The latter reduces network bandwidth requirements; we use a "validation" mechanism for this purpose (see section 13.3). Requirements for performance, availability, and disconnected operation require us to be able to relax the goal of semantic transparency. The HTTP/1.1 protocol allows origin servers, caches, Fielding, et al. Standards Track [Page 74] RFC 2616 HTTP/1.1 June 1999 and clients to explicitly reduce transparency when necessary. However, because non-transparent operation may confuse non-expert users, and might be incompatible with certain server applications (such as those for ordering merchandise), the protocol requires that transparency be relaxed - only by an explicit protocol-level request when relaxed by client or origin server - only with an explicit warning to the end user when relaxed by cache or client Therefore, the HTTP/1.1 protocol provides these important elements: 1. Protocol features that provide full semantic transparency when this is required by all parties. 2. Protocol features that allow an origin server or user agent to explicitly request and control non-transparent operation. 3. Protocol features that allow a cache to attach warnings to responses that do not preserve the requested approximation of semantic transparency. A basic principle is that it must be possible for the clients to detect any potential relaxation of semantic transparency. Note: The server, cache, or client implementor might be faced with design decisions not explicitly discussed in this specification. If a decision might affect semantic transparency, the implementor ought to err on the side of maintaining transparency unless a careful and complete analysis shows significant benefits in breaking transparency. 13.1.1 Cache Correctness A correct cache MUST respond to a request with the most up-to-date response held by the cache that is appropriate to the request (see sections 13.2.5, 13.2.6, and 13.12) which meets one of the following conditions: 1. It has been checked for equivalence with what the origin server would have returned by revalidating the response with the origin server (section 13.3); Fielding, et al. Standards Track [Page 75] RFC 2616 HTTP/1.1 June 1999 2. It is "fresh enough" (see section 13.2). In the default case, this means it meets the least restrictive freshness requirement of the client, origin server, and cache (see section 14.9); if the origin server so specifies, it is the freshness requirement of the origin server alone. If a stored response is not "fresh enough" by the most restrictive freshness requirement of both the client and the origin server, in carefully considered circumstances the cache MAY still return the response with the appropriate Warning header (see section 13.1.5 and 14.46), unless such a response is prohibited (e.g., by a "no-store" cache-directive, or by a "no-cache" cache-request-directive; see section 14.9). 3. It is an appropriate 304 (Not Modified), 305 (Proxy Redirect), or error (4xx or 5xx) response message. If the cache can not communicate with the origin server, then a correct cache SHOULD respond as above if the response can be correctly served from the cache; if not it MUST return an error or warning indicating that there was a communication failure. If a cache receives a response (either an entire response, or a 304 (Not Modified) response) that it would normally forward to the requesting client, and the received response is no longer fresh, the cache SHOULD forward it to the requesting client without adding a new Warning (but without removing any existing Warning headers). A cache SHOULD NOT attempt to revalidate a response simply because that response became stale in transit; this might lead to an infinite loop. A user agent that receives a stale response without a Warning MAY display a warning indication to the user. 13.1.2 Warnings Whenever a cache returns a response that is neither first-hand nor "fresh enough" (in the sense of condition 2 in section 13.1.1), it MUST attach a warning to that effect, using a Warning general-header. The Warning header and the currently defined warnings are described in section 14.46. The warning allows clients to take appropriate action. Warnings MAY be used for other purposes, both cache-related and otherwise. The use of a warning, rather than an error status code, distinguish these responses from true failures. Warnings are assigned three digit warn-codes. The first digit indicates whether the Warning MUST or MUST NOT be deleted from a stored cache entry after a successful revalidation: Fielding, et al. Standards Track [Page 76] RFC 2616 HTTP/1.1 June 1999 1xx Warnings that describe the freshness or revalidation status of the response, and so MUST be deleted after a successful revalidation. 1XX warn-codes MAY be generated by a cache only when validating a cached entry. It MUST NOT be generated by clients. 2xx Warnings that describe some aspect of the entity body or entity headers that is not rectified by a revalidation (for example, a lossy compression of the entity bodies) and which MUST NOT be deleted after a successful revalidation. See section 14.46 for the definitions of the codes themselves. HTTP/1.0 caches will cache all Warnings in responses, without deleting the ones in the first category. Warnings in responses that are passed to HTTP/1.0 caches carry an extra warning-date field, which prevents a future HTTP/1.1 recipient from believing an erroneously cached Warning. Warnings also carry a warning text. The text MAY be in any appropriate natural language (perhaps based on the client's Accept headers), and include an OPTIONAL indication of what character set is used. Multiple warnings MAY be attached to a response (either by the origin server or by a cache), including multiple warnings with the same code number. For example, a server might provide the same warning with texts in both English and Basque. When multiple warnings are attached to a response, it might not be practical or reasonable to display all of them to the user. This version of HTTP does not specify strict priority rules for deciding which warnings to display and in what order, but does suggest some heuristics. 13.1.3 Cache-control Mechanisms The basic cache mechanisms in HTTP/1.1 (server-specified expiration times and validators) are implicit directives to caches. In some cases, a server or client might need to provide explicit directives to the HTTP caches. We use the Cache-Control header for this purpose. The Cache-Control header allows a client or server to transmit a variety of directives in either requests or responses. These directives typically override the default caching algorithms. As a general rule, if there is any apparent conflict between header values, the most restrictive interpretation is applied (that is, the one that is most likely to preserve semantic transparency). However, Fielding, et al. Standards Track [Page 77] RFC 2616 HTTP/1.1 June 1999 in some cases, cache-control directives are explicitly specified as weakening the approximation of semantic transparency (for example, "max-stale" or "public"). The cache-control directives are described in detail in section 14.9. 13.1.4 Explicit User Agent Warnings Many user agents make it possible for users to override the basic caching mechanisms. For example, the user agent might allow the user to specify that cached entities (even explicitly stale ones) are never validated. Or the user agent might habitually add "Cache- Control: max-stale=3600" to every request. The user agent SHOULD NOT default to either non-transparent behavior, or behavior that results in abnormally ineffective caching, but MAY be explicitly configured to do so by an explicit action of the user. If the user has overridden the basic caching mechanisms, the user agent SHOULD explicitly indicate to the user whenever this results in the display of information that might not meet the server's transparency requirements (in particular, if the displayed entity is known to be stale). Since the protocol normally allows the user agent to determine if responses are stale or not, this indication need only be displayed when this actually happens. The indication need not be a dialog box; it could be an icon (for example, a picture of a rotting fish) or some other indicator. If the user has overridden the caching mechanisms in a way that would abnormally reduce the effectiveness of caches, the user agent SHOULD continually indicate this state to the user (for example, by a display of a picture of currency in flames) so that the user does not inadvertently consume excess resources or suffer from excessive latency. 13.1.5 Exceptions to the Rules and Warnings In some cases, the operator of a cache MAY choose to configure it to return stale responses even when not requested by clients. This decision ought not be made lightly, but may be necessary for reasons of availability or performance, especially when the cache is poorly connected to the origin server. Whenever a cache returns a stale response, it MUST mark it as such (using a Warning header) enabling the client software to alert the user that there might be a potential problem. Fielding, et al. Standards Track [Page 78] RFC 2616 HTTP/1.1 June 1999 It also allows the user agent to take steps to obtain a first-hand or fresh response. For this reason, a cache SHOULD NOT return a stale response if the client explicitly requests a first-hand or fresh one, unless it is impossible to comply for technical or policy reasons. 13.1.6 Client-controlled Behavior While the origin server (and to a lesser extent, intermediate caches, by their contribution to the age of a response) are the primary source of expiration information, in some cases the client might need to control a cache's decision about whether to return a cached response without validating it. Clients do this using several directives of the Cache-Control header. A client's request MAY specify the maximum age it is willing to accept of an unvalidated response; specifying a value of zero forces the cache(s) to revalidate all responses. A client MAY also specify the minimum time remaining before a response expires. Both of these options increase constraints on the behavior of caches, and so cannot further relax the cache's approximation of semantic transparency. A client MAY also specify that it will accept stale responses, up to some maximum amount of staleness. This loosens the constraints on the caches, and so might violate the origin server's specified constraints on semantic transparency, but might be necessary to support disconnected operation, or high availability in the face of poor connectivity. 13.2 Expiration Model 13.2.1 Server-Specified Expiration HTTP caching works best when caches can entirely avoid making requests to the origin server. The primary mechanism for avoiding requests is for an origin server to provide an explicit expiration time in the future, indicating that a response MAY be used to satisfy subsequent requests. In other words, a cache can return a fresh response without first contacting the server. Our expectation is that servers will assign future explicit expiration times to responses in the belief that the entity is not likely to change, in a semantically significant way, before the expiration time is reached. This normally preserves semantic transparency, as long as the server's expiration times are carefully chosen. Fielding, et al. Standards Track [Page 79] RFC 2616 HTTP/1.1 June 1999 The expiration mechanism applies only to responses taken from a cache and not to first-hand responses forwarded immediately to the requesting client. If an origin server wishes to force a semantically transparent cache to validate every request, it MAY assign an explicit expiration time in the past. This means that the response is always stale, and so the cache SHOULD validate it before using it for subsequent requests. See section 14.9.4 for a more restrictive way to force revalidation. If an origin server wishes to force any HTTP/1.1 cache, no matter how it is configured, to validate every request, it SHOULD use the "must- revalidate" cache-control directive (see section 14.9). Servers specify explicit expiration times using either the Expires header, or the max-age directive of the Cache-Control header. An expiration time cannot be used to force a user agent to refresh its display or reload a resource; its semantics apply only to caching mechanisms, and such mechanisms need only check a resource's expiration status when a new request for that resource is initiated. See section 13.13 for an explanation of the difference between caches and history mechanisms. 13.2.2 Heuristic Expiration Since origin servers do not always provide explicit expiration times, HTTP caches typically assign heuristic expiration times, employing algorithms that use other header values (such as the Last-Modified time) to estimate a plausible expiration time. The HTTP/1.1 specification does not provide specific algorithms, but does impose worst-case constraints on their results. Since heuristic expiration times might compromise semantic transparency, they ought to used cautiously, and we encourage origin servers to provide explicit expiration times as much as possible. 13.2.3 Age Calculations In order to know if a cached entry is fresh, a cache needs to know if its age exceeds its freshness lifetime. We discuss how to calculate the latter in section 13.2.4; this section describes how to calculate the age of a response or cache entry. In this discussion, we use the term "now" to mean "the current value of the clock at the host performing the calculation." Hosts that use HTTP, but especially hosts running origin servers and caches, SHOULD use NTP [28] or some similar protocol to synchronize their clocks to a globally accurate time standard. Fielding, et al. Standards Track [Page 80] RFC 2616 HTTP/1.1 June 1999 HTTP/1.1 requires origin servers to send a Date header, if possible, with every response, giving the time at which the response was generated (see section 14.18). We use the term "date_value" to denote the value of the Date header, in a form appropriate for arithmetic operations. HTTP/1.1 uses the Age response-header to convey the estimated age of the response message when obtained from a cache. The Age field value is the cache's estimate of the amount of time since the response was generated or revalidated by the origin server. In essence, the Age value is the sum of the time that the response has been resident in each of the caches along the path from the origin server, plus the amount of time it has been in transit along network paths. We use the term "age_value" to denote the value of the Age header, in a form appropriate for arithmetic operations. A response's age can be calculated in two entirely independent ways: 1. now minus date_value, if the local clock is reasonably well synchronized to the origin server's clock. If the result is negative, the result is replaced by zero. 2. age_value, if all of the caches along the response path implement HTTP/1.1. Given that we have two independent ways to compute the age of a response when it is received, we can combine these as corrected_received_age = max(now - date_value, age_value) and as long as we have either nearly synchronized clocks or all- HTTP/1.1 paths, one gets a reliable (conservative) result. Because of network-imposed delays, some significant interval might pass between the time that a server generates a response and the time it is received at the next outbound cache or client. If uncorrected, this delay could result in improperly low ages. Because the request that resulted in the returned Age value must have been initiated prior to that Age value's generation, we can correct for delays imposed by the network by recording the time at which the request was initiated. Then, when an Age value is received, it MUST be interpreted relative to the time the request was initiated, not Fielding, et al. Standards Track [Page 81] RFC 2616 HTTP/1.1 June 1999 the time that the response was received. This algorithm results in conservative behavior no matter how much delay is experienced. So, we compute: corrected_initial_age = corrected_received_age + (now - request_time) where "request_time" is the time (according to the local clock) when the request that elicited this response was sent. Summary of age calculation algorithm, when a cache receives a response: /* * age_value * is the value of Age: header received by the cache with * this response. * date_value * is the value of the origin server's Date: header * request_time * is the (local) time when the cache made the request * that resulted in this cached response * response_time * is the (local) time when the cache received the * response * now * is the current (local) time */ apparent_age = max(0, response_time - date_value); corrected_received_age = max(apparent_age, age_value); response_delay = response_time - request_time; corrected_initial_age = corrected_received_age + response_delay; resident_time = now - response_time; current_age = corrected_initial_age + resident_time; The current_age of a cache entry is calculated by adding the amount of time (in seconds) since the cache entry was last validated by the origin server to the corrected_initial_age. When a response is generated from a cache entry, the cache MUST include a single Age header field in the response with a value equal to the cache entry's current_age. The presence of an Age header field in a response implies that a response is not first-hand. However, the converse is not true, since the lack of an Age header field in a response does not imply that the Fielding, et al. Standards Track [Page 82] RFC 2616 HTTP/1.1 June 1999 response is first-hand unless all caches along the request path are compliant with HTTP/1.1 (i.e., older HTTP caches did not implement the Age header field). 13.2.4 Expiration Calculations In order to decide whether a response is fresh or stale, we need to compare its freshness lifetime to its age. The age is calculated as described in section 13.2.3; this section describes how to calculate the freshness lifetime, and to determine if a response has expired. In the discussion below, the values can be represented in any form appropriate for arithmetic operations. We use the term "expires_value" to denote the value of the Expires header. We use the term "max_age_value" to denote an appropriate value of the number of seconds carried by the "max-age" directive of the Cache-Control header in a response (see section 14.9.3). The max-age directive takes priority over Expires, so if max-age is present in a response, the calculation is simply: freshness_lifetime = max_age_value Otherwise, if Expires is present in the response, the calculation is: freshness_lifetime = expires_value - date_value Note that neither of these calculations is vulnerable to clock skew, since all of the information comes from the origin server. If none of Expires, Cache-Control: max-age, or Cache-Control: s- maxage (see section 14.9.3) appears in the response, and the response does not include other restrictions on caching, the cache MAY compute a freshness lifetime using a heuristic. The cache MUST attach Warning 113 to any response whose age is more than 24 hours if such warning has not already been added. Also, if the response does have a Last-Modified time, the heuristic expiration value SHOULD be no more than some fraction of the interval since that time. A typical setting of this fraction might be 10%. The calculation to determine if a response has expired is quite simple: response_is_fresh = (freshness_lifetime > current_age) Fielding, et al. Standards Track [Page 83] RFC 2616 HTTP/1.1 June 1999 13.2.5 Disambiguating Expiration Values Because expiration values are assigned optimistically, it is possible for two caches to contain fresh values for the same resource that are different. If a client performing a retrieval receives a non-first-hand response for a request that was already fresh in its own cache, and the Date header in its existing cache entry is newer than the Date on the new response, then the client MAY ignore the response. If so, it MAY retry the request with a "Cache-Control: max-age=0" directive (see section 14.9), to force a check with the origin server. If a cache has two fresh responses for the same representation with different validators, it MUST use the one with the more recent Date header. This situation might arise because the cache is pooling responses from other caches, or because a client has asked for a reload or a revalidation of an apparently fresh cache entry. 13.2.6 Disambiguating Multiple Responses Because a client might be receiving responses via multiple paths, so that some responses flow through one set of caches and other responses flow through a different set of caches, a client might receive responses in an order different from that in which the origin server sent them. We would like the client to use the most recently generated response, even if older responses are still apparently fresh. Neither the entity tag nor the expiration value can impose an ordering on responses, since it is possible that a later response intentionally carries an earlier expiration time. The Date values are ordered to a granularity of one second. When a client tries to revalidate a cache entry, and the response it receives contains a Date header that appears to be older than the one for the existing entry, then the client SHOULD repeat the request unconditionally, and include Cache-Control: max-age=0 to force any intermediate caches to validate their copies directly with the origin server, or Cache-Control: no-cache to force any intermediate caches to obtain a new copy from the origin server. Fielding, et al. Standards Track [Page 84] RFC 2616 HTTP/1.1 June 1999 If the Date values are equal, then the client MAY use either response (or MAY, if it is being extremely prudent, request a new response). Servers MUST NOT depend on clients being able to choose deterministically between responses generated during the same second, if their expiration times overlap. 13.3 Validation Model When a cache has a stale entry that it would like to use as a response to a client's request, it first has to check with the origin server (or possibly an intermediate cache with a fresh response) to see if its cached entry is still usable. We call this "validating" the cache entry. Since we do not want to have to pay the overhead of retransmitting the full response if the cached entry is good, and we do not want to pay the overhead of an extra round trip if the cached entry is invalid, the HTTP/1.1 protocol supports the use of conditional methods. The key protocol features for supporting conditional methods are those concerned with "cache validators." When an origin server generates a full response, it attaches some sort of validator to it, which is kept with the cache entry. When a client (user agent or proxy cache) makes a conditional request for a resource for which it has a cache entry, it includes the associated validator in the request. The server then checks that validator against the current validator for the entity, and, if they match (see section 13.3.3), it responds with a special status code (usually, 304 (Not Modified)) and no entity-body. Otherwise, it returns a full response (including entity-body). Thus, we avoid transmitting the full response if the validator matches, and we avoid an extra round trip if it does not match. In HTTP/1.1, a conditional request looks exactly the same as a normal request for the same resource, except that it carries a special header (which includes the validator) that implicitly turns the method (usually, GET) into a conditional. The protocol includes both positive and negative senses of cache- validating conditions. That is, it is possible to request either that a method be performed if and only if a validator matches or if and only if no validators match. Fielding, et al. Standards Track [Page 85] RFC 2616 HTTP/1.1 June 1999 Note: a response that lacks a validator may still be cached, and served from cache until it expires, unless this is explicitly prohibited by a cache-control directive. However, a cache cannot do a conditional retrieval if it does not have a validator for the entity, which means it will not be refreshable after it expires. 13.3.1 Last-Modified Dates The Last-Modified entity-header field value is often used as a cache validator. In simple terms, a cache entry is considered to be valid if the entity has not been modified since the Last-Modified value. 13.3.2 Entity Tag Cache Validators The ETag response-header field value, an entity tag, provides for an "opaque" cache validator. This might allow more reliable validation in situations where it is inconvenient to store modification dates, where the one-second resolution of HTTP date values is not sufficient, or where the origin server wishes to avoid certain paradoxes that might arise from the use of modification dates. Entity Tags are described in section 3.11. The headers used with entity tags are described in sections 14.19, 14.24, 14.26 and 14.44. 13.3.3 Weak and Strong Validators Since both origin servers and caches will compare two validators to decide if they represent the same or different entities, one normally would expect that if the entity (the entity-body or any entity- headers) changes in any way, then the associated validator would change as well. If this is true, then we call this validator a "strong validator." However, there might be cases when a server prefers to change the validator only on semantically significant changes, and not when insignificant aspects of the entity change. A validator that does not always change when the resource changes is a "weak validator." Entity tags are normally "strong validators," but the protocol provides a mechanism to tag an entity tag as "weak." One can think of a strong validator as one that changes whenever the bits of an entity changes, while a weak value changes whenever the meaning of an entity changes. Alternatively, one can think of a strong validator as part of an identifier for a specific entity, while a weak validator is part of an identifier for a set of semantically equivalent entities. Note: One example of a strong validator is an integer that is incremented in stable storage every time an entity is changed. Fielding, et al. Standards Track [Page 86] RFC 2616 HTTP/1.1 June 1999 An entity's modification time, if represented with one-second resolution, could be a weak validator, since it is possible that the resource might be modified twice during a single second. Support for weak validators is optional. However, weak validators allow for more efficient caching of equivalent objects; for example, a hit counter on a site is probably good enough if it is updated every few days or weeks, and any value during that period is likely "good enough" to be equivalent. A "use" of a validator is either when a client generates a request and includes the validator in a validating header field, or when a server compares two validators. Strong validators are usable in any context. Weak validators are only usable in contexts that do not depend on exact equality of an entity. For example, either kind is usable for a conditional GET of a full entity. However, only a strong validator is usable for a sub-range retrieval, since otherwise the client might end up with an internally inconsistent entity. Clients MAY issue simple (non-subrange) GET requests with either weak validators or strong validators. Clients MUST NOT use weak validators in other forms of request. The only function that the HTTP/1.1 protocol defines on validators is comparison. There are two validator comparison functions, depending on whether the comparison context allows the use of weak validators or not: - The strong comparison function: in order to be considered equal, both validators MUST be identical in every way, and both MUST NOT be weak. - The weak comparison function: in order to be considered equal, both validators MUST be identical in every way, but either or both of them MAY be tagged as "weak" without affecting the result. An entity tag is strong unless it is explicitly tagged as weak. Section 3.11 gives the syntax for entity tags. A Last-Modified time, when used as a validator in a request, is implicitly weak unless it is possible to deduce that it is strong, using the following rules: - The validator is being compared by an origin server to the actual current validator for the entity and, Fielding, et al. Standards Track [Page 87] RFC 2616 HTTP/1.1 June 1999 - That origin server reliably knows that the associated entity did not change twice during the second covered by the presented validator. or - The validator is about to be used by a client in an If- Modified-Since or If-Unmodified-Since header, because the client has a cache entry for the associated entity, and - That cache entry includes a Date value, which gives the time when the origin server sent the original response, and - The presented Last-Modified time is at least 60 seconds before the Date value. or - The validator is being compared by an intermediate cache to the validator stored in its cache entry for the entity, and - That cache entry includes a Date value, which gives the time when the origin server sent the original response, and - The presented Last-Modified time is at least 60 seconds before the Date value. This method relies on the fact that if two different responses were sent by the origin server during the same second, but both had the same Last-Modified time, then at least one of those responses would have a Date value equal to its Last-Modified time. The arbitrary 60- second limit guards against the possibility that the Date and Last- Modified values are generated from different clocks, or at somewhat different times during the preparation of the response. An implementation MAY use a value larger than 60 seconds, if it is believed that 60 seconds is too short. If a client wishes to perform a sub-range retrieval on a value for which it has only a Last-Modified time and no opaque validator, it MAY do this only if the Last-Modified time is strong in the sense described here. A cache or origin server receiving a conditional request, other than a full-body GET request, MUST use the strong comparison function to evaluate the condition. These rules allow HTTP/1.1 caches and clients to safely perform sub- range retrievals on values that have been obtained from HTTP/1.0 Fielding, et al. Standards Track [Page 88] RFC 2616 HTTP/1.1 June 1999 servers. 13.3.4 Rules for When to Use Entity Tags and Last-Modified Dates We adopt a set of rules and recommendations for origin servers, clients, and caches regarding when various validator types ought to be used, and for what purposes. HTTP/1.1 origin servers: - SHOULD send an entity tag validator unless it is not feasible to generate one. - MAY send a weak entity tag instead of a strong entity tag, if performance considerations support the use of weak entity tags, or if it is unfeasible to send a strong entity tag. - SHOULD send a Last-Modified value if it is feasible to send one, unless the risk of a breakdown in semantic transparency that could result from using this date in an If-Modified-Since header would lead to serious problems. In other words, the preferred behavior for an HTTP/1.1 origin server is to send both a strong entity tag and a Last-Modified value. In order to be legal, a strong entity tag MUST change whenever the associated entity value changes in any way. A weak entity tag SHOULD change whenever the associated entity changes in a semantically significant way. Note: in order to provide semantically transparent caching, an origin server must avoid reusing a specific strong entity tag value for two different entities, or reusing a specific weak entity tag value for two semantically different entities. Cache entries might persist for arbitrarily long periods, regardless of expiration times, so it might be inappropriate to expect that a cache will never again attempt to validate an entry using a validator that it obtained at some point in the past. HTTP/1.1 clients: - If an entity tag has been provided by the origin server, MUST use that entity tag in any cache-conditional request (using If- Match or If-None-Match). - If only a Last-Modified value has been provided by the origin server, SHOULD use that value in non-subrange cache-conditional requests (using If-Modified-Since). Fielding, et al. Standards Track [Page 89] RFC 2616 HTTP/1.1 June 1999 - If only a Last-Modified value has been provided by an HTTP/1.0 origin server, MAY use that value in subrange cache-conditional requests (using If-Unmodified-Since:). The user agent SHOULD provide a way to disable this, in case of difficulty. - If both an entity tag and a Last-Modified value have been provided by the origin server, SHOULD use both validators in cache-conditional requests. This allows both HTTP/1.0 and HTTP/1.1 caches to respond appropriately. An HTTP/1.1 origin server, upon receiving a conditional request that includes both a Last-Modified date (e.g., in an If-Modified-Since or If-Unmodified-Since header field) and one or more entity tags (e.g., in an If-Match, If-None-Match, or If-Range header field) as cache validators, MUST NOT return a response status of 304 (Not Modified) unless doing so is consistent with all of the conditional header fields in the request. An HTTP/1.1 caching proxy, upon receiving a conditional request that includes both a Last-Modified date and one or more entity tags as cache validators, MUST NOT return a locally cached response to the client unless that cached response is consistent with all of the conditional header fields in the request. Note: The general principle behind these rules is that HTTP/1.1 servers and clients should transmit as much non-redundant information as is available in their responses and requests. HTTP/1.1 systems receiving this information will make the most conservative assumptions about the validators they receive. HTTP/1.0 clients and caches will ignore entity tags. Generally, last-modified values received or used by these systems will support transparent and efficient caching, and so HTTP/1.1 origin servers should provide Last-Modified values. In those rare cases where the use of a Last-Modified value as a validator by an HTTP/1.0 system could result in a serious problem, then HTTP/1.1 origin servers should not provide one. 13.3.5 Non-validating Conditionals The principle behind entity tags is that only the service author knows the semantics of a resource well enough to select an appropriate cache validation mechanism, and the specification of any validator comparison function more complex than byte-equality would open up a can of worms. Thus, comparisons of any other headers (except Last-Modified, for compatibility with HTTP/1.0) are never used for purposes of validating a cache entry. Fielding, et al. Standards Track [Page 90] RFC 2616 HTTP/1.1 June 1999 13.4 Response Cacheability Unless specifically constrained by a cache-control (section 14.9) directive, a caching system MAY always store a successful response (see section 13.8) as a cache entry, MAY return it without validation if it is fresh, and MAY return it after successful validation. If there is neither a cache validator nor an explicit expiration time associated with a response, we do not expect it to be cached, but certain caches MAY violate this expectation (for example, when little or no network connectivity is available). A client can usually detect that such a response was taken from a cache by comparing the Date header to the current time. Note: some HTTP/1.0 caches are known to violate this expectation without providing any Warning. However, in some cases it might be inappropriate for a cache to retain an entity, or to return it in response to a subsequent request. This might be because absolute semantic transparency is deemed necessary by the service author, or because of security or privacy considerations. Certain cache-control directives are therefore provided so that the server can indicate that certain resource entities, or portions thereof, are not to be cached regardless of other considerations. Note that section 14.8 normally prevents a shared cache from saving and returning a response to a previous request if that request included an Authorization header. A response received with a status code of 200, 203, 206, 300, 301 or 410 MAY be stored by a cache and used in reply to a subsequent request, subject to the expiration mechanism, unless a cache-control directive prohibits caching. However, a cache that does not support the Range and Content-Range headers MUST NOT cache 206 (Partial Content) responses. A response received with any other status code (e.g. status codes 302 and 307) MUST NOT be returned in a reply to a subsequent request unless there are cache-control directives or another header(s) that explicitly allow it. For example, these include the following: an Expires header (section 14.21); a "max-age", "s-maxage", "must- revalidate", "proxy-revalidate", "public" or "private" cache-control directive (section 14.9). Fielding, et al. Standards Track [Page 91] RFC 2616 HTTP/1.1 June 1999 13.5 Constructing Responses From Caches The purpose of an HTTP cache is to store information received in response to requests for use in responding to future requests. In many cases, a cache simply returns the appropriate parts of a response to the requester. However, if the cache holds a cache entry based on a previous response, it might have to combine parts of a new response with what is held in the cache entry. 13.5.1 End-to-end and Hop-by-hop Headers For the purpose of defining the behavior of caches and non-caching proxies, we divide HTTP headers into two categories: - End-to-end headers, which are transmitted to the ultimate recipient of a request or response. End-to-end headers in responses MUST be stored as part of a cache entry and MUST be transmitted in any response formed from a cache entry. - Hop-by-hop headers, which are meaningful only for a single transport-level connection, and are not stored by caches or forwarded by proxies. The following HTTP/1.1 headers are hop-by-hop headers: - Connection - Keep-Alive - Proxy-Authenticate - Proxy-Authorization - TE - Trailers - Transfer-Encoding - Upgrade All other headers defined by HTTP/1.1 are end-to-end headers. Other hop-by-hop headers MUST be listed in a Connection header, (section 14.10) to be introduced into HTTP/1.1 (or later). 13.5.2 Non-modifiable Headers Some features of the HTTP/1.1 protocol, such as Digest Authentication, depend on the value of certain end-to-end headers. A transparent proxy SHOULD NOT modify an end-to-end header unless the definition of that header requires or specifically allows that. Fielding, et al. Standards Track [Page 92] RFC 2616 HTTP/1.1 June 1999 A transparent proxy MUST NOT modify any of the following fields in a request or response, and it MUST NOT add any of these fields if not already present: - Content-Location - Content-MD5 - ETag - Last-Modified A transparent proxy MUST NOT modify any of the following fields in a response: - Expires but it MAY add any of these fields if not already present. If an Expires header is added, it MUST be given a field-value identical to that of the Date header in that response. A proxy MUST NOT modify or add any of the following fields in a message that contains the no-transform cache-control directive, or in any request: - Content-Encoding - Content-Range - Content-Type A non-transparent proxy MAY modify or add these fields to a message that does not include no-transform, but if it does so, it MUST add a Warning 214 (Transformation applied) if one does not already appear in the message (see section 14.46). Warning: unnecessary modification of end-to-end headers might cause authentication failures if stronger authentication mechanisms are introduced in later versions of HTTP. Such authentication mechanisms MAY rely on the values of header fields not listed here. The Content-Length field of a request or response is added or deleted according to the rules in section 4.4. A transparent proxy MUST preserve the entity-length (section 7.2.2) of the entity-body, although it MAY change the transfer-length (section 4.4). Fielding, et al. Standards Track [Page 93] RFC 2616 HTTP/1.1 June 1999 13.5.3 Combining Headers When a cache makes a validating request to a server, and the server provides a 304 (Not Modified) response or a 206 (Partial Content) response, the cache then constructs a response to send to the requesting client. If the status code is 304 (Not Modified), the cache uses the entity- body stored in the cache entry as the entity-body of this outgoing response. If the status code is 206 (Partial Content) and the ETag or Last-Modified headers match exactly, the cache MAY combine the contents stored in the cache entry with the new contents received in the response and use the result as the entity-body of this outgoing response, (see 13.5.4). The end-to-end headers stored in the cache entry are used for the constructed response, except that - any stored Warning headers with warn-code 1xx (see section 14.46) MUST be deleted from the cache entry and the forwarded response. - any stored Warning headers with warn-code 2xx MUST be retained in the cache entry and the forwarded response. - any end-to-end headers provided in the 304 or 206 response MUST replace the corresponding headers from the cache entry. Unless the cache decides to remove the cache entry, it MUST also replace the end-to-end headers stored with the cache entry with corresponding headers received in the incoming response, except for Warning headers as described immediately above. If a header field- name in the incoming response matches more than one header in the cache entry, all such old headers MUST be replaced. In other words, the set of end-to-end headers received in the incoming response overrides all corresponding end-to-end headers stored with the cache entry (except for stored Warning headers with warn-code 1xx, which are deleted even if not overridden). Note: this rule allows an origin server to use a 304 (Not Modified) or a 206 (Partial Content) response to update any header associated with a previous response for the same entity or sub- ranges thereof, although it might not always be meaningful or correct to do so. This rule does not allow an origin server to use a 304 (Not Modified) or a 206 (Partial Content) response to entirely delete a header that it had provided with a previous response. Fielding, et al. Standards Track [Page 94] RFC 2616 HTTP/1.1 June 1999 13.5.4 Combining Byte Ranges A response might transfer only a subrange of the bytes of an entity- body, either because the request included one or more Range specifications, or because a connection was broken prematurely. After several such transfers, a cache might have received several ranges of the same entity-body. If a cache has a stored non-empty set of subranges for an entity, and an incoming response transfers another subrange, the cache MAY combine the new subrange with the existing set if both the following conditions are met: - Both the incoming response and the cache entry have a cache validator. - The two cache validators match using the strong comparison function (see section 13.3.3). If either requirement is not met, the cache MUST use only the most recent partial response (based on the Date values transmitted with every response, and using the incoming response if these values are equal or missing), and MUST discard the other partial information. 13.6 Caching Negotiated Responses Use of server-driven content negotiation (section 12.1), as indicated by the presence of a Vary header field in a response, alters the conditions and procedure by which a cache can use the response for subsequent requests. See section 14.44 for use of the Vary header field by servers. A server SHOULD use the Vary header field to inform a cache of what request-header fields were used to select among multiple representations of a cacheable response subject to server-driven negotiation. The set of header fields named by the Vary field value is known as the "selecting" request-headers. When the cache receives a subsequent request whose Request-URI specifies one or more cache entries including a Vary header field, the cache MUST NOT use such a cache entry to construct a response to the new request unless all of the selecting request-headers present in the new request match the corresponding stored request-headers in the original request. The selecting request-headers from two requests are defined to match if and only if the selecting request-headers in the first request can be transformed to the selecting request-headers in the second request Fielding, et al. Standards Track [Page 95] RFC 2616 HTTP/1.1 June 1999 by adding or removing linear white space (LWS) at places where this is allowed by the corresponding BNF, and/or combining multiple message-header fields with the same field name following the rules about message headers in section 4.2. A Vary header field-value of "*" always fails to match and subsequent requests on that resource can only be properly interpreted by the origin server. If the selecting request header fields for the cached entry do not match the selecting request header fields of the new request, then the cache MUST NOT use a cached entry to satisfy the request unless it first relays the new request to the origin server in a conditional request and the server responds with 304 (Not Modified), including an entity tag or Content-Location that indicates the entity to be used. If an entity tag was assigned to a cached representation, the forwarded request SHOULD be conditional and include the entity tags in an If-None-Match header field from all its cache entries for the resource. This conveys to the server the set of entities currently held by the cache, so that if any one of these entities matches the requested entity, the server can use the ETag header field in its 304 (Not Modified) response to tell the cache which entry is appropriate. If the entity-tag of the new response matches that of an existing entry, the new response SHOULD be used to update the header fields of the existing entry, and the result MUST be returned to the client. If any of the existing cache entries contains only partial content for the associated entity, its entity-tag SHOULD NOT be included in the If-None-Match header field unless the request is for a range that would be fully satisfied by that entry. If a cache receives a successful response whose Content-Location field matches that of an existing cache entry for the same Request- ]URI, whose entity-tag differs from that of the existing entry, and whose Date is more recent than that of the existing entry, the existing entry SHOULD NOT be returned in response to future requests and SHOULD be deleted from the cache. 13.7 Shared and Non-Shared Caches For reasons of security and privacy, it is necessary to make a distinction between "shared" and "non-shared" caches. A non-shared cache is one that is accessible only to a single user. Accessibility in this case SHOULD be enforced by appropriate security mechanisms. All other caches are considered to be "shared." Other sections of Fielding, et al. Standards Track [Page 96] RFC 2616 HTTP/1.1 June 1999 this specification place certain constraints on the operation of shared caches in order to prevent loss of privacy or failure of access controls. 13.8 Errors or Incomplete Response Cache Behavior A cache that receives an incomplete response (for example, with fewer bytes of data than specified in a Content-Length header) MAY store the response. However, the cache MUST treat this as a partial response. Partial responses MAY be combined as described in section 13.5.4; the result might be a full response or might still be partial. A cache MUST NOT return a partial response to a client without explicitly marking it as such, using the 206 (Partial Content) status code. A cache MUST NOT return a partial response using a status code of 200 (OK). If a cache receives a 5xx response while attempting to revalidate an entry, it MAY either forward this response to the requesting client, or act as if the server failed to respond. In the latter case, it MAY return a previously received response unless the cached entry includes the "must-revalidate" cache-control directive (see section 14.9). 13.9 Side Effects of GET and HEAD Unless the origin server explicitly prohibits the caching of their responses, the application of GET and HEAD methods to any resources SHOULD NOT have side effects that would lead to erroneous behavior if these responses are taken from a cache. They MAY still have side effects, but a cache is not required to consider such side effects in its caching decisions. Caches are always expected to observe an origin server's explicit restrictions on caching. We note one exception to this rule: since some applications have traditionally used GETs and HEADs with query URLs (those containing a "?" in the rel_path part) to perform operations with significant side effects, caches MUST NOT treat responses to such URIs as fresh unless the server provides an explicit expiration time. This specifically means that responses from HTTP/1.0 servers for such URIs SHOULD NOT be taken from a cache. See section 9.1.1 for related information. 13.10 Invalidation After Updates or Deletions The effect of certain methods performed on a resource at the origin server might cause one or more existing cache entries to become non- transparently invalid. That is, although they might continue to be "fresh," they do not accurately reflect what the origin server would return for a new request on that resource. Fielding, et al. Standards Track [Page 97] RFC 2616 HTTP/1.1 June 1999 There is no way for the HTTP protocol to guarantee that all such cache entries are marked invalid. For example, the request that caused the change at the origin server might not have gone through the proxy where a cache entry is stored. However, several rules help reduce the likelihood of erroneous behavior. In this section, the phrase "invalidate an entity" means that the cache will either remove all instances of that entity from its storage, or will mark these as "invalid" and in need of a mandatory revalidation before they can be returned in response to a subsequent request. Some HTTP methods MUST cause a cache to invalidate an entity. This is either the entity referred to by the Request-URI, or by the Location or Content-Location headers (if present). These methods are: - PUT - DELETE - POST In order to prevent denial of service attacks, an invalidation based on the URI in a Location or Content-Location header MUST only be performed if the host part is the same as in the Request-URI. A cache that passes through requests for methods it does not understand SHOULD invalidate any entities referred to by the Request-URI. 13.11 Write-Through Mandatory All methods that might be expected to cause modifications to the origin server's resources MUST be written through to the origin server. This currently includes all methods except for GET and HEAD. A cache MUST NOT reply to such a request from a client before having transmitted the request to the inbound server, and having received a corresponding response from the inbound server. This does not prevent a proxy cache from sending a 100 (Continue) response before the inbound server has sent its final reply. The alternative (known as "write-back" or "copy-back" caching) is not allowed in HTTP/1.1, due to the difficulty of providing consistent updates and the problems arising from server, cache, or network failure prior to write-back. Fielding, et al. Standards Track [Page 98] RFC 2616 HTTP/1.1 June 1999 13.12 Cache Replacement If a new cacheable (see sections 14.9.2, 13.2.5, 13.2.6 and 13.8) response is received from a resource while any existing responses for the same resource are cached, the cache SHOULD use the new response to reply to the current request. It MAY insert it into cache storage and MAY, if it meets all other requirements, use it to respond to any future requests that would previously have caused the old response to be returned. If it inserts the new response into cache storage the rules in section 13.5.3 apply. Note: a new response that has an older Date header value than existing cached responses is not cacheable. 13.13 History Lists User agents often have history mechanisms, such as "Back" buttons and history lists, which can be used to redisplay an entity retrieved earlier in a session. History mechanisms and caches are different. In particular history mechanisms SHOULD NOT try to show a semantically transparent view of the current state of a resource. Rather, a history mechanism is meant to show exactly what the user saw at the time when the resource was retrieved. By default, an expiration time does not apply to history mechanisms. If the entity is still in storage, a history mechanism SHOULD display it even if the entity has expired, unless the user has specifically configured the agent to refresh expired history documents. This is not to be construed to prohibit the history mechanism from telling the user that a view might be stale. Note: if history list mechanisms unnecessarily prevent users from viewing stale resources, this will tend to force service authors to avoid using HTTP expiration controls and cache controls when they would otherwise like to. Service authors may consider it important that users not be presented with error messages or warning messages when they use navigation controls (such as BACK) to view previously fetched resources. Even though sometimes such resources ought not to cached, or ought to expire quickly, user interface considerations may force service authors to resort to other means of preventing caching (e.g. "once-only" URLs) in order not to suffer the effects of improperly functioning history mechanisms. Fielding, et al. Standards Track [Page 99] RFC 2616 HTTP/1.1 June 1999 14 Header Field Definitions This section defines the syntax and semantics of all standard HTTP/1.1 header fields. For entity-header fields, both sender and recipient refer to either the client or the server, depending on who sends and who receives the entity. 14.1 Accept The Accept request-header field can be used to specify certain media types which are acceptable for the response. Accept headers can be used to indicate that the request is specifically limited to a small set of desired types, as in the case of a request for an in-line image. Accept = "Accept" ":" #( media-range [ accept-params ] ) media-range = ( "*/*" | ( type "/" "*" ) | ( type "/" subtype ) ) *( ";" parameter ) accept-params = ";" "q" "=" qvalue *( accept-extension ) accept-extension = ";" token [ "=" ( token | quoted-string ) ] The asterisk "*" character is used to group media types into ranges, with "*/*" indicating all media types and "type/*" indicating all subtypes of that type. The media-range MAY include media type parameters that are applicable to that range. Each media-range MAY be followed by one or more accept-params, beginning with the "q" parameter for indicating a relative quality factor. The first "q" parameter (if any) separates the media-range parameter(s) from the accept-params. Quality factors allow the user or user agent to indicate the relative degree of preference for that media-range, using the qvalue scale from 0 to 1 (section 3.9). The default value is q=1. Note: Use of the "q" parameter name to separate media type parameters from Accept extension parameters is due to historical practice. Although this prevents any media type parameter named "q" from being used with a media range, such an event is believed to be unlikely given the lack of any "q" parameters in the IANA media type registry and the rare usage of any media type parameters in Accept. Future media types are discouraged from registering any parameter named "q". Fielding, et al. Standards Track [Page 100] RFC 2616 HTTP/1.1 June 1999 The example Accept: audio/*; q=0.2, audio/basic SHOULD be interpreted as "I prefer audio/basic, but send me any audio type if it is the best available after an 80% mark-down in quality." If no Accept header field is present, then it is assumed that the client accepts all media types. If an Accept header field is present, and if the server cannot send a response which is acceptable according to the combined Accept field value, then the server SHOULD send a 406 (not acceptable) response. A more elaborate example is Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c Verbally, this would be interpreted as "text/html and text/x-c are the preferred media types, but if they do not exist, then send the text/x-dvi entity, and if that does not exist, send the text/plain entity." Media ranges can be overridden by more specific media ranges or specific media types. If more than one media range applies to a given type, the most specific reference has precedence. For example, Accept: text/*, text/html, text/html;level=1, */* have the following precedence: 1) text/html;level=1 2) text/html 3) text/* 4) */* The media type quality factor associated with a given type is determined by finding the media range with the highest precedence which matches that type. For example, Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5 would cause the following values to be associated: text/html;level=1 = 1 text/html = 0.7 text/plain = 0.3 Fielding, et al. Standards Track [Page 101] RFC 2616 HTTP/1.1 June 1999 image/jpeg = 0.5 text/html;level=2 = 0.4 text/html;level=3 = 0.7 Note: A user agent might be provided with a default set of quality values for certain media ranges. However, unless the user agent is a closed system which cannot interact with other rendering agents, this default set ought to be configurable by the user. 14.2 Accept-Charset The Accept-Charset request-header field can be used to indicate what character sets are acceptable for the response. This field allows clients capable of understanding more comprehensive or special- purpose character sets to signal that capability to a server which is capable of representing documents in those character sets. Accept-Charset = "Accept-Charset" ":" 1#( ( charset | "*" )[ ";" "q" "=" qvalue ] ) Character set values are described in section 3.4. Each charset MAY be given an associated quality value which represents the user's preference for that charset. The default value is q=1. An example is Accept-Charset: iso-8859-5, unicode-1-1;q=0.8 The special value "*", if present in the Accept-Charset field, matches every character set (including ISO-8859-1) which is not mentioned elsewhere in the Accept-Charset field. If no "*" is present in an Accept-Charset field, then all character sets not explicitly mentioned get a quality value of 0, except for ISO-8859-1, which gets a quality value of 1 if not explicitly mentioned. If no Accept-Charset header is present, the default is that any character set is acceptable. If an Accept-Charset header is present, and if the server cannot send a response which is acceptable according to the Accept-Charset header, then the server SHOULD send an error response with the 406 (not acceptable) status code, though the sending of an unacceptable response is also allowed. 14.3 Accept-Encoding The Accept-Encoding request-header field is similar to Accept, but restricts the content-codings (section 3.5) that are acceptable in the response. Accept-Encoding = "Accept-Encoding" ":" Fielding, et al. Standards Track [Page 102] RFC 2616 HTTP/1.1 June 1999 1#( codings [ ";" "q" "=" qvalue ] ) codings = ( content-coding | "*" ) Examples of its use are: Accept-Encoding: compress, gzip Accept-Encoding: Accept-Encoding: * Accept-Encoding: compress;q=0.5, gzip;q=1.0 Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0 A server tests whether a content-coding is acceptable, according to an Accept-Encoding field, using these rules: 1. If the content-coding is one of the content-codings listed in the Accept-Encoding field, then it is acceptable, unless it is accompanied by a qvalue of 0. (As defined in section 3.9, a qvalue of 0 means "not acceptable.") 2. The special "*" symbol in an Accept-Encoding field matches any available content-coding not explicitly listed in the header field. 3. If multiple content-codings are acceptable, then the acceptable content-coding with the highest non-zero qvalue is preferred. 4. The "identity" content-coding is always acceptable, unless specifically refused because the Accept-Encoding field includes "identity;q=0", or because the field includes "*;q=0" and does not explicitly include the "identity" content-coding. If the Accept-Encoding field-value is empty, then only the "identity" encoding is acceptable. If an Accept-Encoding field is present in a request, and if the server cannot send a response which is acceptable according to the Accept-Encoding header, then the server SHOULD send an error response with the 406 (Not Acceptable) status code. If no Accept-Encoding field is present in a request, the server MAY assume that the client will accept any content coding. In this case, if "identity" is one of the available content-codings, then the server SHOULD use the "identity" content-coding, unless it has additional information that a different content-coding is meaningful to the client. Note: If the request does not include an Accept-Encoding field, and if the "identity" content-coding is unavailable, then content-codings commonly understood by HTTP/1.0 clients (i.e., Fielding, et al. Standards Track [Page 103] RFC 2616 HTTP/1.1 June 1999 "gzip" and "compress") are preferred; some older clients improperly display messages sent with other content-codings. The server might also make this decision based on information about the particular user-agent or client. Note: Most HTTP/1.0 applications do not recognize or obey qvalues associated with content-codings. This means that qvalues will not work and are not permitted with x-gzip or x-compress. 14.4 Accept-Language The Accept-Language request-header field is similar to Accept, but restricts the set of natural languages that are preferred as a response to the request. Language tags are defined in section 3.10. Accept-Language = "Accept-Language" ":" 1#( language-range [ ";" "q" "=" qvalue ] ) language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" ) Each language-range MAY be given an associated quality value which represents an estimate of the user's preference for the languages specified by that range. The quality value defaults to "q=1". For example, Accept-Language: da, en-gb;q=0.8, en;q=0.7 would mean: "I prefer Danish, but will accept British English and other types of English." A language-range matches a language-tag if it exactly equals the tag, or if it exactly equals a prefix of the tag such that the first tag character following the prefix is "-". The special range "*", if present in the Accept-Language field, matches every tag not matched by any other range present in the Accept-Language field. Note: This use of a prefix matching rule does not imply that language tags are assigned to languages in such a way that it is always true that if a user understands a language with a certain tag, then this user will also understand all languages with tags for which this tag is a prefix. The prefix rule simply allows the use of prefix tags if this is the case. The language quality factor assigned to a language-tag by the Accept-Language field is the quality value of the longest language- range in the field that matches the language-tag. If no language- range in the field matches the tag, the language quality factor assigned is 0. If no Accept-Language header is present in the request, the server Fielding, et al. Standards Track [Page 104] RFC 2616 HTTP/1.1 June 1999 SHOULD assume that all languages are equally acceptable. If an Accept-Language header is present, then all languages which are assigned a quality factor greater than 0 are acceptable. It might be contrary to the privacy expectations of the user to send an Accept-Language header with the complete linguistic preferences of the user in every request. For a discussion of this issue, see section 15.1.4. As intelligibility is highly dependent on the individual user, it is recommended that client applications make the choice of linguistic preference available to the user. If the choice is not made available, then the Accept-Language header field MUST NOT be given in the request. Note: When making the choice of linguistic preference available to the user, we remind implementors of the fact that users are not familiar with the details of language matching as described above, and should provide appropriate guidance. As an example, users might assume that on selecting "en-gb", they will be served any kind of English document if British English is not available. A user agent might suggest in such a case to add "en" to get the best matching behavior. 14.5 Accept-Ranges The Accept-Ranges response-header field allows the server to indicate its acceptance of range requests for a resource: Accept-Ranges = "Accept-Ranges" ":" acceptable-ranges acceptable-ranges = 1#range-unit | "none" Origin servers that accept byte-range requests MAY send Accept-Ranges: bytes but are not required to do so. Clients MAY generate byte-range requests without having received this header for the resource involved. Range units are defined in section 3.12. Servers that do not accept any kind of range request for a resource MAY send Accept-Ranges: none to advise the client not to attempt a range request. Fielding, et al. Standards Track [Page 105] RFC 2616 HTTP/1.1 June 1999 14.6 Age The Age response-header field conveys the sender's estimate of the amount of time since the response (or its revalidation) was generated at the origin server. A cached response is "fresh" if its age does not exceed its freshness lifetime. Age values are calculated as specified in section 13.2.3. Age = "Age" ":" age-value age-value = delta-seconds Age values are non-negative decimal integers, representing time in seconds. If a cache receives a value larger than the largest positive integer it can represent, or if any of its age calculations overflows, it MUST transmit an Age header with a value of 2147483648 (2^31). An HTTP/1.1 server that includes a cache MUST include an Age header field in every response generated from its own cache. Caches SHOULD use an arithmetic type of at least 31 bits of range. 14.7 Allow The Allow entity-header field lists the set of methods supported by the resource identified by the Request-URI. The purpose of this field is strictly to inform the recipient of valid methods associated with the resource. An Allow header field MUST be present in a 405 (Method Not Allowed) response. Allow = "Allow" ":" #Method Example of use: Allow: GET, HEAD, PUT This field cannot prevent a client from trying other methods. However, the indications given by the Allow header field value SHOULD be followed. The actual set of allowed methods is defined by the origin server at the time of each request. The Allow header field MAY be provided with a PUT request to recommend the methods to be supported by the new or modified resource. The server is not required to support these methods and SHOULD include an Allow header in the response giving the actual supported methods. Fielding, et al. Standards Track [Page 106] RFC 2616 HTTP/1.1 June 1999 A proxy MUST NOT modify the Allow header field even if it does not understand all the methods specified, since the user agent might have other means of communicating with the origin server. 14.8 Authorization A user agent that wishes to authenticate itself with a server-- usually, but not necessarily, after receiving a 401 response--does so by including an Authorization request-header field with the request. The Authorization field value consists of credentials containing the authentication information of the user agent for the realm of the resource being requested. Authorization = "Authorization" ":" credentials HTTP access authentication is described in "HTTP Authentication: Basic and Digest Access Authentication" [43]. If a request is authenticated and a realm specified, the same credentials SHOULD be valid for all other requests within this realm (assuming that the authentication scheme itself does not require otherwise, such as credentials that vary according to a challenge value or using synchronized clocks). When a shared cache (see section 13.7) receives a request containing an Authorization field, it MUST NOT return the corresponding response as a reply to any other request, unless one of the following specific exceptions holds: 1. If the response includes the "s-maxage" cache-control directive, the cache MAY use that response in replying to a subsequent request. But (if the specified maximum age has passed) a proxy cache MUST first revalidate it with the origin server, using the request-headers from the new request to allow the origin server to authenticate the new request. (This is the defined behavior for s-maxage.) If the response includes "s- maxage=0", the proxy MUST always revalidate it before re-using it. 2. If the response includes the "must-revalidate" cache-control directive, the cache MAY use that response in replying to a subsequent request. But if the response is stale, all caches MUST first revalidate it with the origin server, using the request-headers from the new request to allow the origin server to authenticate the new request. 3. If the response includes the "public" cache-control directive, it MAY be returned in reply to any subsequent request. Fielding, et al. Standards Track [Page 107] RFC 2616 HTTP/1.1 June 1999 14.9 Cache-Control The Cache-Control general-header field is used to specify directives that MUST be obeyed by all caching mechanisms along the request/response chain. The directives specify behavior intended to prevent caches from adversely interfering with the request or response. These directives typically override the default caching algorithms. Cache directives are unidirectional in that the presence of a directive in a request does not imply that the same directive is to be given in the response. Note that HTTP/1.0 caches might not implement Cache-Control and might only implement Pragma: no-cache (see section 14.32). Cache directives MUST be passed through by a proxy or gateway application, regardless of their significance to that application, since the directives might be applicable to all recipients along the request/response chain. It is not possible to specify a cache- directive for a specific cache. Cache-Control = "Cache-Control" ":" 1#cache-directive cache-directive = cache-request-directive | cache-response-directive cache-request-directive = "no-cache" ; Section 14.9.1 | "no-store" ; Section 14.9.2 | "max-age" "=" delta-seconds ; Section 14.9.3, 14.9.4 | "max-stale" [ "=" delta-seconds ] ; Section 14.9.3 | "min-fresh" "=" delta-seconds ; Section 14.9.3 | "no-transform" ; Section 14.9.5 | "only-if-cached" ; Section 14.9.4 | cache-extension ; Section 14.9.6 cache-response-directive = "public" ; Section 14.9.1 | "private" [ "=" <"> 1#field-name <"> ] ; Section 14.9.1 | "no-cache" [ "=" <"> 1#field-name <"> ]; Section 14.9.1 | "no-store" ; Section 14.9.2 | "no-transform" ; Section 14.9.5 | "must-revalidate" ; Section 14.9.4 | "proxy-revalidate" ; Section 14.9.4 | "max-age" "=" delta-seconds ; Section 14.9.3 | "s-maxage" "=" delta-seconds ; Section 14.9.3 | cache-extension ; Section 14.9.6 cache-extension = token [ "=" ( token | quoted-string ) ] Fielding, et al. Standards Track [Page 108] RFC 2616 HTTP/1.1 June 1999 When a directive appears without any 1#field-name parameter, the directive applies to the entire request or response. When such a directive appears with a 1#field-name parameter, it applies only to the named field or fields, and not to the rest of the request or response. This mechanism supports extensibility; implementations of future versions of the HTTP protocol might apply these directives to header fields not defined in HTTP/1.1. The cache-control directives can be broken down into these general categories: - Restrictions on what are cacheable; these may only be imposed by the origin server. - Restrictions on what may be stored by a cache; these may be imposed by either the origin server or the user agent. - Modifications of the basic expiration mechanism; these may be imposed by either the origin server or the user agent. - Controls over cache revalidation and reload; these may only be imposed by a user agent. - Control over transformation of entities. - Extensions to the caching system. 14.9.1 What is Cacheable By default, a response is cacheable if the requirements of the request method, request header fields, and the response status indicate that it is cacheable. Section 13.4 summarizes these defaults for cacheability. The following Cache-Control response directives allow an origin server to override the default cacheability of a response: public Indicates that the response MAY be cached by any cache, even if it would normally be non-cacheable or cacheable only within a non- shared cache. (See also Authorization, section 14.8, for additional details.) private Indicates that all or part of the response message is intended for a single user and MUST NOT be cached by a shared cache. This allows an origin server to state that the specified parts of the Fielding, et al. Standards Track [Page 109] RFC 2616 HTTP/1.1 June 1999 response are intended for only one user and are not a valid response for requests by other users. A private (non-shared) cache MAY cache the response. Note: This usage of the word private only controls where the response may be cached, and cannot ensure the privacy of the message content. no-cache If the no-cache directive does not specify a field-name, then a cache MUST NOT use the response to satisfy a subsequent request without successful revalidation with the origin server. This allows an origin server to prevent caching even by caches that have been configured to return stale responses to client requests. If the no-cache directive does specify one or more field-names, then a cache MAY use the response to satisfy a subsequent request, subject to any other restrictions on caching. However, the specified field-name(s) MUST NOT be sent in the response to a subsequent request without successful revalidation with the origin server. This allows an origin server to prevent the re-use of certain header fields in a response, while still allowing caching of the rest of the response. Note: Most HTTP/1.0 caches will not recognize or obey this directive. 14.9.2 What May be Stored by Caches no-store The purpose of the no-store directive is to prevent the inadvertent release or retention of sensitive information (for example, on backup tapes). The no-store directive applies to the entire message, and MAY be sent either in a response or in a request. If sent in a request, a cache MUST NOT store any part of either this request or any response to it. If sent in a response, a cache MUST NOT store any part of either this response or the request that elicited it. This directive applies to both non- shared and shared caches. "MUST NOT store" in this context means that the cache MUST NOT intentionally store the information in non-volatile storage, and MUST make a best-effort attempt to remove the information from volatile storage as promptly as possible after forwarding it. Even when this directive is associated with a response, users might explicitly store such a response outside of the caching system (e.g., with a "Save As" dialog). History buffers MAY store such responses as part of their normal operation. Fielding, et al. Standards Track [Page 110] RFC 2616 HTTP/1.1 June 1999 The purpose of this directive is to meet the stated requirements of certain users and service authors who are concerned about accidental releases of information via unanticipated accesses to cache data structures. While the use of this directive might improve privacy in some cases, we caution that it is NOT in any way a reliable or sufficient mechanism for ensuring privacy. In particular, malicious or compromised caches might not recognize or obey this directive, and communications networks might be vulnerable to eavesdropping. 14.9.3 Modifications of the Basic Expiration Mechanism The expiration time of an entity MAY be specified by the origin server using the Expires header (see section 14.21). Alternatively, it MAY be specified using the max-age directive in a response. When the max-age cache-control directive is present in a cached response, the response is stale if its current age is greater than the age value given (in seconds) at the time of a new request for that resource. The max-age directive on a response implies that the response is cacheable (i.e., "public") unless some other, more restrictive cache directive is also present. If a response includes both an Expires header and a max-age directive, the max-age directive overrides the Expires header, even if the Expires header is more restrictive. This rule allows an origin server to provide, for a given response, a longer expiration time to an HTTP/1.1 (or later) cache than to an HTTP/1.0 cache. This might be useful if certain HTTP/1.0 caches improperly calculate ages or expiration times, perhaps due to desynchronized clocks. Many HTTP/1.0 cache implementations will treat an Expires value that is less than or equal to the response Date value as being equivalent to the Cache-Control response directive "no-cache". If an HTTP/1.1 cache receives such a response, and the response does not include a Cache-Control header field, it SHOULD consider the response to be non-cacheable in order to retain compatibility with HTTP/1.0 servers. Note: An origin server might wish to use a relatively new HTTP cache control feature, such as the "private" directive, on a network including older caches that do not understand that feature. The origin server will need to combine the new feature with an Expires field whose value is less than or equal to the Date value. This will prevent older caches from improperly caching the response. Fielding, et al. Standards Track [Page 111] RFC 2616 HTTP/1.1 June 1999 s-maxage If a response includes an s-maxage directive, then for a shared cache (but not for a private cache), the maximum age specified by this directive overrides the maximum age specified by either the max-age directive or the Expires header. The s-maxage directive also implies the semantics of the proxy-revalidate directive (see section 14.9.4), i.e., that the shared cache must not use the entry after it becomes stale to respond to a subsequent request without first revalidating it with the origin server. The s- maxage directive is always ignored by a private cache. Note that most older caches, not compliant with this specification, do not implement any cache-control directives. An origin server wishing to use a cache-control directive that restricts, but does not prevent, caching by an HTTP/1.1-compliant cache MAY exploit the requirement that the max-age directive overrides the Expires header, and the fact that pre-HTTP/1.1-compliant caches do not observe the max-age directive. Other directives allow a user agent to modify the basic expiration mechanism. These directives MAY be specified on a request: max-age Indicates that the client is willing to accept a response whose age is no greater than the specified time in seconds. Unless max- stale directive is also included, the client is not willing to accept a stale response. min-fresh Indicates that the client is willing to accept a response whose freshness lifetime is no less than its current age plus the specified time in seconds. That is, the client wants a response that will still be fresh for at least the specified number of seconds. max-stale Indicates that the client is willing to accept a response that has exceeded its expiration time. If max-stale is assigned a value, then the client is willing to accept a response that has exceeded its expiration time by no more than the specified number of seconds. If no value is assigned to max-stale, then the client is willing to accept a stale response of any age. If a cache returns a stale response, either because of a max-stale directive on a request, or because the cache is configured to override the expiration time of a response, the cache MUST attach a Warning header to the stale response, using Warning 110 (Response is stale). Fielding, et al. Standards Track [Page 112] RFC 2616 HTTP/1.1 June 1999 A cache MAY be configured to return stale responses without validation, but only if this does not conflict with any "MUST"-level requirements concerning cache validation (e.g., a "must-revalidate" cache-control directive). If both the new request and the cached entry include "max-age" directives, then the lesser of the two values is used for determining the freshness of the cached entry for that request. 14.9.4 Cache Revalidation and Reload Controls Sometimes a user agent might want or need to insist that a cache revalidate its cache entry with the origin server (and not just with the next cache along the path to the origin server), or to reload its cache entry from the origin server. End-to-end revalidation might be necessary if either the cache or the origin server has overestimated the expiration time of the cached response. End-to-end reload may be necessary if the cache entry has become corrupted for some reason. End-to-end revalidation may be requested either when the client does not have its own local cached copy, in which case we call it "unspecified end-to-end revalidation", or when the client does have a local cached copy, in which case we call it "specific end-to-end revalidation." The client can specify these three kinds of action using Cache- Control request directives: End-to-end reload The request includes a "no-cache" cache-control directive or, for compatibility with HTTP/1.0 clients, "Pragma: no-cache". Field names MUST NOT be included with the no-cache directive in a request. The server MUST NOT use a cached copy when responding to such a request. Specific end-to-end revalidation The request includes a "max-age=0" cache-control directive, which forces each cache along the path to the origin server to revalidate its own entry, if any, with the next cache or server. The initial request includes a cache-validating conditional with the client's current validator. Unspecified end-to-end revalidation The request includes "max-age=0" cache-control directive, which forces each cache along the path to the origin server to revalidate its own entry, if any, with the next cache or server. The initial request does not include a cache-validating Fielding, et al. Standards Track [Page 113] RFC 2616 HTTP/1.1 June 1999 conditional; the first cache along the path (if any) that holds a cache entry for this resource includes a cache-validating conditional with its current validator. max-age When an intermediate cache is forced, by means of a max-age=0 directive, to revalidate its own cache entry, and the client has supplied its own validator in the request, the supplied validator might differ from the validator currently stored with the cache entry. In this case, the cache MAY use either validator in making its own request without affecting semantic transparency. However, the choice of validator might affect performance. The best approach is for the intermediate cache to use its own validator when making its request. If the server replies with 304 (Not Modified), then the cache can return its now validated copy to the client with a 200 (OK) response. If the server replies with a new entity and cache validator, however, the intermediate cache can compare the returned validator with the one provided in the client's request, using the strong comparison function. If the client's validator is equal to the origin server's, then the intermediate cache simply returns 304 (Not Modified). Otherwise, it returns the new entity with a 200 (OK) response. If a request includes the no-cache directive, it SHOULD NOT include min-fresh, max-stale, or max-age. only-if-cached In some cases, such as times of extremely poor network connectivity, a client may want a cache to return only those responses that it currently has stored, and not to reload or revalidate with the origin server. To do this, the client may include the only-if-cached directive in a request. If it receives this directive, a cache SHOULD either respond using a cached entry that is consistent with the other constraints of the request, or respond with a 504 (Gateway Timeout) status. However, if a group of caches is being operated as a unified system with good internal connectivity, such a request MAY be forwarded within that group of caches. must-revalidate Because a cache MAY be configured to ignore a server's specified expiration time, and because a client request MAY include a max- stale directive (which has a similar effect), the protocol also includes a mechanism for the origin server to require revalidation of a cache entry on any subsequent use. When the must-revalidate directive is present in a response received by a cache, that cache MUST NOT use the entry after it becomes stale to respond to a Fielding, et al. Standards Track [Page 114] RFC 2616 HTTP/1.1 June 1999 subsequent request without first revalidating it with the origin server. (I.e., the cache MUST do an end-to-end revalidation every time, if, based solely on the origin server's Expires or max-age value, the cached response is stale.) The must-revalidate directive is necessary to support reliable operation for certain protocol features. In all circumstances an HTTP/1.1 cache MUST obey the must-revalidate directive; in particular, if the cache cannot reach the origin server for any reason, it MUST generate a 504 (Gateway Timeout) response. Servers SHOULD send the must-revalidate directive if and only if failure to revalidate a request on the entity could result in incorrect operation, such as a silently unexecuted financial transaction. Recipients MUST NOT take any automated action that violates this directive, and MUST NOT automatically provide an unvalidated copy of the entity if revalidation fails. Although this is not recommended, user agents operating under severe connectivity constraints MAY violate this directive but, if so, MUST explicitly warn the user that an unvalidated response has been provided. The warning MUST be provided on each unvalidated access, and SHOULD require explicit user confirmation. proxy-revalidate The proxy-revalidate directive has the same meaning as the must- revalidate directive, except that it does not apply to non-shared user agent caches. It can be used on a response to an authenticated request to permit the user's cache to store and later return the response without needing to revalidate it (since it has already been authenticated once by that user), while still requiring proxies that service many users to revalidate each time (in order to make sure that each user has been authenticated). Note that such authenticated responses also need the public cache control directive in order to allow them to be cached at all. 14.9.5 No-Transform Directive no-transform Implementors of intermediate caches (proxies) have found it useful to convert the media type of certain entity bodies. A non- transparent proxy might, for example, convert between image formats in order to save cache space or to reduce the amount of traffic on a slow link. Serious operational problems occur, however, when these transformations are applied to entity bodies intended for certain kinds of applications. For example, applications for medical Fielding, et al. Standards Track [Page 115] RFC 2616 HTTP/1.1 June 1999 imaging, scientific data analysis and those using end-to-end authentication, all depend on receiving an entity body that is bit for bit identical to the original entity-body. Therefore, if a message includes the no-transform directive, an intermediate cache or proxy MUST NOT change those headers that are listed in section 13.5.2 as being subject to the no-transform directive. This implies that the cache or proxy MUST NOT change any aspect of the entity-body that is specified by these headers, including the value of the entity-body itself. 14.9.6 Cache Control Extensions The Cache-Control header field can be extended through the use of one or more cache-extension tokens, each with an optional assigned value. Informational extensions (those which do not require a change in cache behavior) MAY be added without changing the semantics of other directives. Behavioral extensions are designed to work by acting as modifiers to the existing base of cache directives. Both the new directive and the standard directive are supplied, such that applications which do not understand the new directive will default to the behavior specified by the standard directive, and those that understand the new directive will recognize it as modifying the requirements associated with the standard directive. In this way, extensions to the cache-control directives can be made without requiring changes to the base protocol. This extension mechanism depends on an HTTP cache obeying all of the cache-control directives defined for its native HTTP-version, obeying certain extensions, and ignoring all directives that it does not understand. For example, consider a hypothetical new response directive called community which acts as a modifier to the private directive. We define this new directive to mean that, in addition to any non-shared cache, any cache which is shared only by members of the community named within its value may cache the response. An origin server wishing to allow the UCI community to use an otherwise private response in their shared cache(s) could do so by including Cache-Control: private, community="UCI" A cache seeing this header field will act correctly even if the cache does not understand the community cache-extension, since it will also see and understand the private directive and thus default to the safe behavior. Fielding, et al. Standards Track [Page 116] RFC 2616 HTTP/1.1 June 1999 Unrecognized cache-directives MUST be ignored; it is assumed that any cache-directive likely to be unrecognized by an HTTP/1.1 cache will be combined with standard directives (or the response's default cacheability) such that the cache behavior will remain minimally correct even if the cache does not understand the extension(s). 14.10 Connection The Connection general-header field allows the sender to specify options that are desired for that particular connection and MUST NOT be communicated by proxies over further connections. The Connection header has the following grammar: Connection = "Connection" ":" 1#(connection-token) connection-token = token HTTP/1.1 proxies MUST parse the Connection header field before a message is forwarded and, for each connection-token in this field, remove any header field(s) from the message with the same name as the connection-token. Connection options are signaled by the presence of a connection-token in the Connection header field, not by any corresponding additional header field(s), since the additional header field may not be sent if there are no parameters associated with that connection option. Message headers listed in the Connection header MUST NOT include end-to-end headers, such as Cache-Control. HTTP/1.1 defines the "close" connection option for the sender to signal that the connection will be closed after completion of the response. For example, Connection: close in either the request or the response header fields indicates that the connection SHOULD NOT be considered `persistent' (section 8.1) after the current request/response is complete. HTTP/1.1 applications that do not support persistent connections MUST include the "close" connection option in every message. A system receiving an HTTP/1.0 (or lower-version) message that includes a Connection header MUST, for each connection-token in this field, remove and ignore any header field(s) from the message with the same name as the connection-token. This protects against mistaken forwarding of such header fields by pre-HTTP/1.1 proxies. See section 19.6.2. Fielding, et al. Standards Track [Page 117] RFC 2616 HTTP/1.1 June 1999 14.11 Content-Encoding The Content-Encoding entity-header field is used as a modifier to the media-type. When present, its value indicates what additional content codings have been applied to the entity-body, and thus what decoding mechanisms must be applied in order to obtain the media-type referenced by the Content-Type header field. Content-Encoding is primarily used to allow a document to be compressed without losing the identity of its underlying media type. Content-Encoding = "Content-Encoding" ":" 1#content-coding Content codings are defined in section 3.5. An example of its use is Content-Encoding: gzip The content-coding is a characteristic of the entity identified by the Request-URI. Typically, the entity-body is stored with this encoding and is only decoded before rendering or analogous usage. However, a non-transparent proxy MAY modify the content-coding if the new coding is known to be acceptable to the recipient, unless the "no-transform" cache-control directive is present in the message. If the content-coding of an entity is not "identity", then the response MUST include a Content-Encoding entity-header (section 14.11) that lists the non-identity content-coding(s) used. If the content-coding of an entity in a request message is not acceptable to the origin server, the server SHOULD respond with a status code of 415 (Unsupported Media Type). If multiple encodings have been applied to an entity, the content codings MUST be listed in the order in which they were applied. Additional information about the encoding parameters MAY be provided by other entity-header fields not defined by this specification. 14.12 Content-Language The Content-Language entity-header field describes the natural language(s) of the intended audience for the enclosed entity. Note that this might not be equivalent to all the languages used within the entity-body. Content-Language = "Content-Language" ":" 1#language-tag Fielding, et al. Standards Track [Page 118] RFC 2616 HTTP/1.1 June 1999 Language tags are defined in section 3.10. The primary purpose of Content-Language is to allow a user to identify and differentiate entities according to the user's own preferred language. Thus, if the body content is intended only for a Danish-literate audience, the appropriate field is Content-Language: da If no Content-Language is specified, the default is that the content is intended for all language audiences. This might mean that the sender does not consider it to be specific to any natural language, or that the sender does not know for which language it is intended. Multiple languages MAY be listed for content that is intended for multiple audiences. For example, a rendition of the "Treaty of Waitangi," presented simultaneously in the original Maori and English versions, would call for Content-Language: mi, en However, just because multiple languages are present within an entity does not mean that it is intended for multiple linguistic audiences. An example would be a beginner's language primer, such as "A First Lesson in Latin," which is clearly intended to be used by an English-literate audience. In this case, the Content-Language would properly only include "en". Content-Language MAY be applied to any media type -- it is not limited to textual documents. 14.13 Content-Length The Content-Length entity-header field indicates the size of the entity-body, in decimal number of OCTETs, sent to the recipient or, in the case of the HEAD method, the size of the entity-body that would have been sent had the request been a GET. Content-Length = "Content-Length" ":" 1*DIGIT An example is Content-Length: 3495 Applications SHOULD use this field to indicate the transfer-length of the message-body, unless this is prohibited by the rules in section 4.4. Fielding, et al. Standards Track [Page 119] RFC 2616 HTTP/1.1 June 1999 Any Content-Length greater than or equal to zero is a valid value. Section 4.4 describes how to determine the length of a message-body if a Content-Length is not given. Note that the meaning of this field is significantly different from the corresponding definition in MIME, where it is an optional field used within the "message/external-body" content-type. In HTTP, it SHOULD be sent whenever the message's length can be determined prior to being transferred, unless this is prohibited by the rules in section 4.4. 14.14 Content-Location The Content-Location entity-header field MAY be used to supply the resource location for the entity enclosed in the message when that entity is accessible from a location separate from the requested resource's URI. A server SHOULD provide a Content-Location for the variant corresponding to the response entity; especially in the case where a resource has multiple entities associated with it, and those entities actually have separate locations by which they might be individually accessed, the server SHOULD provide a Content-Location for the particular variant which is returned. Content-Location = "Content-Location" ":" ( absoluteURI | relativeURI ) The value of Content-Location also defines the base URI for the entity. The Content-Location value is not a replacement for the original requested URI; it is only a statement of the location of the resource corresponding to this particular entity at the time of the request. Future requests MAY specify the Content-Location URI as the request- URI if the desire is to identify the source of that particular entity. A cache cannot assume that an entity with a Content-Location different from the URI used to retrieve it can be used to respond to later requests on that Content-Location URI. However, the Content- Location can be used to differentiate between multiple entities retrieved from a single requested resource, as described in section 13.6. If the Content-Location is a relative URI, the relative URI is interpreted relative to the Request-URI. The meaning of the Content-Location header in PUT or POST requests is undefined; servers are free to ignore it in those cases. Fielding, et al. Standards Track [Page 120] RFC 2616 HTTP/1.1 June 1999 14.15 Content-MD5 The Content-MD5 entity-header field, as defined in RFC 1864 [23], is an MD5 digest of the entity-body for the purpose of providing an end-to-end message integrity check (MIC) of the entity-body. (Note: a MIC is good for detecting accidental modification of the entity-body in transit, but is not proof against malicious attacks.) Content-MD5 = "Content-MD5" ":" md5-digest md5-digest = <base64 of 128 bit MD5 digest as per RFC 1864> The Content-MD5 header field MAY be generated by an origin server or client to function as an integrity check of the entity-body. Only origin servers or clients MAY generate the Content-MD5 header field; proxies and gateways MUST NOT generate it, as this would defeat its value as an end-to-end integrity check. Any recipient of the entity- body, including gateways and proxies, MAY check that the digest value in this header field matches that of the entity-body as received. The MD5 digest is computed based on the content of the entity-body, including any content-coding that has been applied, but not including any transfer-encoding applied to the message-body. If the message is received with a transfer-encoding, that encoding MUST be removed prior to checking the Content-MD5 value against the received entity. This has the result that the digest is computed on the octets of the entity-body exactly as, and in the order that, they would be sent if no transfer-encoding were being applied. HTTP extends RFC 1864 to permit the digest to be computed for MIME composite media-types (e.g., multipart/* and message/rfc822), but this does not change how the digest is computed as defined in the preceding paragraph. There are several consequences of this. The entity-body for composite types MAY contain many body-parts, each with its own MIME and HTTP headers (including Content-MD5, Content-Transfer-Encoding, and Content-Encoding headers). If a body-part has a Content-Transfer- Encoding or Content-Encoding header, it is assumed that the content of the body-part has had the encoding applied, and the body-part is included in the Content-MD5 digest as is -- i.e., after the application. The Transfer-Encoding header field is not allowed within body-parts. Conversion of all line breaks to CRLF MUST NOT be done before computing or checking the digest: the line break convention used in the text actually transmitted MUST be left unaltered when computing the digest. Fielding, et al. Standards Track [Page 121] RFC 2616 HTTP/1.1 June 1999 Note: while the definition of Content-MD5 is exactly the same for HTTP as in RFC 1864 for MIME entity-bodies, there are several ways in which the application of Content-MD5 to HTTP entity-bodies differs from its application to MIME entity-bodies. One is that HTTP, unlike MIME, does not use Content-Transfer-Encoding, and does use Transfer-Encoding and Content-Encoding. Another is that HTTP more frequently uses binary content types than MIME, so it is worth noting that, in such cases, the byte order used to compute the digest is the transmission byte order defined for the type. Lastly, HTTP allows transmission of text types with any of several line break conventions and not just the canonical form using CRLF. 14.16 Content-Range The Content-Range entity-header is sent with a partial entity-body to specify where in the full entity-body the partial body should be applied. Range units are defined in section 3.12. Content-Range = "Content-Range" ":" content-range-spec content-range-spec = byte-content-range-spec byte-content-range-spec = bytes-unit SP byte-range-resp-spec "/" ( instance-length | "*" ) byte-range-resp-spec = (first-byte-pos "-" last-byte-pos) | "*" instance-length = 1*DIGIT The header SHOULD indicate the total length of the full entity-body, unless this length is unknown or difficult to determine. The asterisk "*" character means that the instance-length is unknown at the time when the response was generated. Unlike byte-ranges-specifier values (see section 14.35.1), a byte- range-resp-spec MUST only specify one range, and MUST contain absolute byte positions for both the first and last byte of the range. A byte-content-range-spec with a byte-range-resp-spec whose last- byte-pos value is less than its first-byte-pos value, or whose instance-length value is less than or equal to its last-byte-pos value, is invalid. The recipient of an invalid byte-content-range- spec MUST ignore it and any content transferred along with it. A server sending a response with status code 416 (Requested range not satisfiable) SHOULD include a Content-Range field with a byte-range- resp-spec of "*". The instance-length specifies the current length of Fielding, et al. Standards Track [Page 122] RFC 2616 HTTP/1.1 June 1999 the selected resource. A response with status code 206 (Partial Content) MUST NOT include a Content-Range field with a byte-range- resp-spec of "*". Examples of byte-content-range-spec values, assuming that the entity contains a total of 1234 bytes: . The first 500 bytes: bytes 0-499/1234 . The second 500 bytes: bytes 500-999/1234 . All except for the first 500 bytes: bytes 500-1233/1234 . The last 500 bytes: bytes 734-1233/1234 When an HTTP message includes the content of a single range (for example, a response to a request for a single range, or to a request for a set of ranges that overlap without any holes), this content is transmitted with a Content-Range header, and a Content-Length header showing the number of bytes actually transferred. For example, HTTP/1.1 206 Partial content Date: Wed, 15 Nov 1995 06:25:24 GMT Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT Content-Range: bytes 21010-47021/47022 Content-Length: 26012 Content-Type: image/gif When an HTTP message includes the content of multiple ranges (for example, a response to a request for multiple non-overlapping ranges), these are transmitted as a multipart message. The multipart media type used for this purpose is "multipart/byteranges" as defined in appendix 19.2. See appendix 19.6.3 for a compatibility issue. A response to a request for a single range MUST NOT be sent using the multipart/byteranges media type. A response to a request for multiple ranges, whose result is a single range, MAY be sent as a multipart/byteranges media type with one part. A client that cannot decode a multipart/byteranges message MUST NOT ask for multiple byte-ranges in a single request. When a client requests multiple byte-ranges in one request, the server SHOULD return them in the order that they appeared in the request. Fielding, et al. Standards Track [Page 123] RFC 2616 HTTP/1.1 June 1999 If the server ignores a byte-range-spec because it is syntactically invalid, the server SHOULD treat the request as if the invalid Range header field did not exist. (Normally, this means return a 200 response containing the full entity). If the server receives a request (other than one including an If- Range request-header field) with an unsatisfiable Range request- header field (that is, all of whose byte-range-spec values have a first-byte-pos value greater than the current length of the selected resource), it SHOULD return a response code of 416 (Requested range not satisfiable) (section 10.4.17). Note: clients cannot depend on servers to send a 416 (Requested range not satisfiable) response instead of a 200 (OK) response for an unsatisfiable Range request-header, since not all servers implement this request-header. 14.17 Content-Type The Content-Type entity-header field indicates the media type of the entity-body sent to the recipient or, in the case of the HEAD method, the media type that would have been sent had the request been a GET. Content-Type = "Content-Type" ":" media-type Media types are defined in section 3.7. An example of the field is Content-Type: text/html; charset=ISO-8859-4 Further discussion of methods for identifying the media type of an entity is provided in section 7.2.1. 14.18 Date The Date general-header field represents the date and time at which the message was originated, having the same semantics as orig-date in RFC 822. The field value is an HTTP-date, as described in section 3.3.1; it MUST be sent in RFC 1123 [8]-date format. Date = "Date" ":" HTTP-date An example is Date: Tue, 15 Nov 1994 08:12:31 GMT Origin servers MUST include a Date header field in all responses, except in these cases: Fielding, et al. Standards Track [Page 124] RFC 2616 HTTP/1.1 June 1999 1. If the response status code is 100 (Continue) or 101 (Switching Protocols), the response MAY include a Date header field, at the server's option. 2. If the response status code conveys a server error, e.g. 500 (Internal Server Error) or 503 (Service Unavailable), and it is inconvenient or impossible to generate a valid Date. 3. If the server does not have a clock that can provide a reasonable approximation of the current time, its responses MUST NOT include a Date header field. In this case, the rules in section 14.18.1 MUST be followed. A received message that does not have a Date header field MUST be assigned one by the recipient if the message will be cached by that recipient or gatewayed via a protocol which requires a Date. An HTTP implementation without a clock MUST NOT cache responses without revalidating them on every use. An HTTP cache, especially a shared cache, SHOULD use a mechanism, such as NTP [28], to synchronize its clock with a reliable external standard. Clients SHOULD only send a Date header field in messages that include an entity-body, as in the case of the PUT and POST requests, and even then it is optional. A client without a clock MUST NOT send a Date header field in a request. The HTTP-date sent in a Date header SHOULD NOT represent a date and time subsequent to the generation of the message. It SHOULD represent the best available approximation of the date and time of message generation, unless the implementation has no means of generating a reasonably accurate date and time. In theory, the date ought to represent the moment just before the entity is generated. In practice, the date can be generated at any time during the message origination without affecting its semantic value. 14.18.1 Clockless Origin Server Operation Some origin server implementations might not have a clock available. An origin server without a clock MUST NOT assign Expires or Last- Modified values to a response, unless these values were associated with the resource by a system or user with a reliable clock. It MAY assign an Expires value that is known, at or before server configuration time, to be in the past (this allows "pre-expiration" of responses without storing separate Expires values for each resource). Fielding, et al. Standards Track [Page 125] RFC 2616 HTTP/1.1 June 1999 14.19 ETag The ETag response-header field provides the current value of the entity tag for the requested variant. The headers used with entity tags are described in sections 14.24, 14.26 and 14.44. The entity tag MAY be used for comparison with other entities from the same resource (see section 13.3.3). ETag = "ETag" ":" entity-tag Examples: ETag: "xyzzy" ETag: W/"xyzzy" ETag: "" 14.20 Expect The Expect request-header field is used to indicate that particular server behaviors are required by the client. Expect = "Expect" ":" 1#expectation expectation = "100-continue" | expectation-extension expectation-extension = token [ "=" ( token | quoted-string ) *expect-params ] expect-params = ";" token [ "=" ( token | quoted-string ) ] A server that does not understand or is unable to comply with any of the expectation values in the Expect field of a request MUST respond with appropriate error status. The server MUST respond with a 417 (Expectation Failed) status if any of the expectations cannot be met or, if there are other problems with the request, some other 4xx status. This header field is defined with extensible syntax to allow for future extensions. If a server receives a request containing an Expect field that includes an expectation-extension that it does not support, it MUST respond with a 417 (Expectation Failed) status. Comparison of expectation values is case-insensitive for unquoted tokens (including the 100-continue token), and is case-sensitive for quoted-string expectation-extensions. Fielding, et al. Standards Track [Page 126] RFC 2616 HTTP/1.1 June 1999 The Expect mechanism is hop-by-hop: that is, an HTTP/1.1 proxy MUST return a 417 (Expectation Failed) status if it receives a request with an expectation that it cannot meet. However, the Expect request-header itself is end-to-end; it MUST be forwarded if the request is forwarded. Many older HTTP/1.0 and HTTP/1.1 applications do not understand the Expect header. See section 8.2.3 for the use of the 100 (continue) status. 14.21 Expires The Expires entity-header field gives the date/time after which the response is considered stale. A stale cache entry may not normally be returned by a cache (either a proxy cache or a user agent cache) unless it is first validated with the origin server (or with an intermediate cache that has a fresh copy of the entity). See section 13.2 for further discussion of the expiration model. The presence of an Expires field does not imply that the original resource will change or cease to exist at, before, or after that time. The format is an absolute date and time as defined by HTTP-date in section 3.3.1; it MUST be in RFC 1123 date format: Expires = "Expires" ":" HTTP-date An example of its use is Expires: Thu, 01 Dec 1994 16:00:00 GMT Note: if a response includes a Cache-Control field with the max- age directive (see section 14.9.3), that directive overrides the Expires field. HTTP/1.1 clients and caches MUST treat other invalid date formats, especially including the value "0", as in the past (i.e., "already expired"). To mark a response as "already expired," an origin server sends an Expires date that is equal to the Date header value. (See the rules for expiration calculations in section 13.2.4.) Fielding, et al. Standards Track [Page 127] RFC 2616 HTTP/1.1 June 1999 To mark a response as "never expires," an origin server sends an Expires date approximately one year from the time the response is sent. HTTP/1.1 servers SHOULD NOT send Expires dates more than one year in the future. The presence of an Expires header field with a date value of some time in the future on a response that otherwise would by default be non-cacheable indicates that the response is cacheable, unless indicated otherwise by a Cache-Control header field (section 14.9). 14.22 From The From request-header field, if given, SHOULD contain an Internet e-mail address for the human user who controls the requesting user agent. The address SHOULD be machine-usable, as defined by "mailbox" in RFC 822 [9] as updated by RFC 1123 [8]: From = "From" ":" mailbox An example is: From: webmaster@w3.org This header field MAY be used for logging purposes and as a means for identifying the source of invalid or unwanted requests. It SHOULD NOT be used as an insecure form of access protection. The interpretation of this field is that the request is being performed on behalf of the person given, who accepts responsibility for the method performed. In particular, robot agents SHOULD include this header so that the person responsible for running the robot can be contacted if problems occur on the receiving end. The Internet e-mail address in this field MAY be separate from the Internet host which issued the request. For example, when a request is passed through a proxy the original issuer's address SHOULD be used. The client SHOULD NOT send the From header field without the user's approval, as it might conflict with the user's privacy interests or their site's security policy. It is strongly recommended that the user be able to disable, enable, and modify the value of this field at any time prior to a request. 14.23 Host The Host request-header field specifies the Internet host and port number of the resource being requested, as obtained from the original URI given by the user or referring resource (generally an HTTP URL, Fielding, et al. Standards Track [Page 128] RFC 2616 HTTP/1.1 June 1999 as described in section 3.2.2). The Host field value MUST represent the naming authority of the origin server or gateway given by the original URL. This allows the origin server or gateway to differentiate between internally-ambiguous URLs, such as the root "/" URL of a server for multiple host names on a single IP address. Host = "Host" ":" host [ ":" port ] ; Section 3.2.2 A "host" without any trailing port information implies the default port for the service requested (e.g., "80" for an HTTP URL). For example, a request on the origin server for <http://www.w3.org/pub/WWW/> would properly include: GET /pub/WWW/ HTTP/1.1 Host: www.w3.org A client MUST include a Host header field in all HTTP/1.1 request messages . If the requested URI does not include an Internet host name for the service being requested, then the Host header field MUST be given with an empty value. An HTTP/1.1 proxy MUST ensure that any request message it forwards does contain an appropriate Host header field that identifies the service being requested by the proxy. All Internet-based HTTP/1.1 servers MUST respond with a 400 (Bad Request) status code to any HTTP/1.1 request message which lacks a Host header field. See sections 5.2 and 19.6.1.1 for other requirements relating to Host. 14.24 If-Match The If-Match request-header field is used with a method to make it conditional. A client that has one or more entities previously obtained from the resource can verify that one of those entities is current by including a list of their associated entity tags in the If-Match header field. Entity tags are defined in section 3.11. The purpose of this feature is to allow efficient updates of cached information with a minimum amount of transaction overhead. It is also used, on updating requests, to prevent inadvertent modification of the wrong version of a resource. As a special case, the value "*" matches any current entity of the resource. If-Match = "If-Match" ":" ( "*" | 1#entity-tag ) If any of the entity tags match the entity tag of the entity that would have been returned in the response to a similar GET request (without the If-Match header) on that resource, or if "*" is given Fielding, et al. Standards Track [Page 129] RFC 2616 HTTP/1.1 June 1999 and any current entity exists for that resource, then the server MAY perform the requested method as if the If-Match header field did not exist. A server MUST use the strong comparison function (see section 13.3.3) to compare the entity tags in If-Match. If none of the entity tags match, or if "*" is given and no current entity exists, the server MUST NOT perform the requested method, and MUST return a 412 (Precondition Failed) response. This behavior is most useful when the client wants to prevent an updating method, such as PUT, from modifying a resource that has changed since the client last retrieved it. If the request would, without the If-Match header field, result in anything other than a 2xx or 412 status, then the If-Match header MUST be ignored. The meaning of "If-Match: *" is that the method SHOULD be performed if the representation selected by the origin server (or by a cache, possibly using the Vary mechanism, see section 14.44) exists, and MUST NOT be performed if the representation does not exist. A request intended to update a resource (e.g., a PUT) MAY include an If-Match header field to signal that the request method MUST NOT be applied if the entity corresponding to the If-Match value (a single entity tag) is no longer a representation of that resource. This allows the user to indicate that they do not wish the request to be successful if the resource has been changed without their knowledge. Examples: If-Match: "xyzzy" If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" If-Match: * The result of a request having both an If-Match header field and either an If-None-Match or an If-Modified-Since header fields is undefined by this specification. 14.25 If-Modified-Since The If-Modified-Since request-header field is used with a method to make it conditional: if the requested variant has not been modified since the time specified in this field, an entity will not be returned from the server; instead, a 304 (not modified) response will be returned without any message-body. If-Modified-Since = "If-Modified-Since" ":" HTTP-date Fielding, et al. Standards Track [Page 130] RFC 2616 HTTP/1.1 June 1999 An example of the field is: If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT A GET method with an If-Modified-Since header and no Range header requests that the identified entity be transferred only if it has been modified since the date given by the If-Modified-Since header. The algorithm for determining this includes the following cases: a) If the request would normally result in anything other than a 200 (OK) status, or if the passed If-Modified-Since date is invalid, the response is exactly the same as for a normal GET. A date which is later than the server's current time is invalid. b) If the variant has been modified since the If-Modified-Since date, the response is exactly the same as for a normal GET. c) If the variant has not been modified since a valid If- Modified-Since date, the server SHOULD return a 304 (Not Modified) response. The purpose of this feature is to allow efficient updates of cached information with a minimum amount of transaction overhead. Note: The Range request-header field modifies the meaning of If- Modified-Since; see section 14.35 for full details. Note: If-Modified-Since times are interpreted by the server, whose clock might not be synchronized with the client. Note: When handling an If-Modified-Since header field, some servers will use an exact date comparison function, rather than a less-than function, for deciding whether to send a 304 (Not Modified) response. To get best results when sending an If- Modified-Since header field for cache validation, clients are advised to use the exact date string received in a previous Last- Modified header field whenever possible. Note: If a client uses an arbitrary date in the If-Modified-Since header instead of a date taken from the Last-Modified header for the same request, the client should be aware of the fact that this date is interpreted in the server's understanding of time. The client should consider unsynchronized clocks and rounding problems due to the different encodings of time between the client and server. This includes the possibility of race conditions if the document has changed between the time it was first requested and the If-Modified-Since date of a subsequent request, and the Fielding, et al. Standards Track [Page 131] RFC 2616 HTTP/1.1 June 1999 possibility of clock-skew-related problems if the If-Modified- Since date is derived from the client's clock without correction to the server's clock. Corrections for different time bases between client and server are at best approximate due to network latency. The result of a request having both an If-Modified-Since header field and either an If-Match or an If-Unmodified-Since header fields is undefined by this specification. 14.26 If-None-Match The If-None-Match request-header field is used with a method to make it conditional. A client that has one or more entities previously obtained from the resource can verify that none of those entities is current by including a list of their associated entity tags in the If-None-Match header field. The purpose of this feature is to allow efficient updates of cached information with a minimum amount of transaction overhead. It is also used to prevent a method (e.g. PUT) from inadvertently modifying an existing resource when the client believes that the resource does not exist. As a special case, the value "*" matches any current entity of the resource. If-None-Match = "If-None-Match" ":" ( "*" | 1#entity-tag ) If any of the entity tags match the entity tag of the entity that would have been returned in the response to a similar GET request (without the If-None-Match header) on that resource, or if "*" is given and any current entity exists for that resource, then the server MUST NOT perform the requested method, unless required to do so because the resource's modification date fails to match that supplied in an If-Modified-Since header field in the request. Instead, if the request method was GET or HEAD, the server SHOULD respond with a 304 (Not Modified) response, including the cache- related header fields (particularly ETag) of one of the entities that matched. For all other request methods, the server MUST respond with a status of 412 (Precondition Failed). See section 13.3.3 for rules on how to determine if two entities tags match. The weak comparison function can only be used with GET or HEAD requests. Fielding, et al. Standards Track [Page 132] RFC 2616 HTTP/1.1 June 1999 If none of the entity tags match, then the server MAY perform the requested method as if the If-None-Match header field did not exist, but MUST also ignore any If-Modified-Since header field(s) in the request. That is, if no entity tags match, then the server MUST NOT return a 304 (Not Modified) response. If the request would, without the If-None-Match header field, result in anything other than a 2xx or 304 status, then the If-None-Match header MUST be ignored. (See section 13.3.4 for a discussion of server behavior when both If-Modified-Since and If-None-Match appear in the same request.) The meaning of "If-None-Match: *" is that the method MUST NOT be performed if the representation selected by the origin server (or by a cache, possibly using the Vary mechanism, see section 14.44) exists, and SHOULD be performed if the representation does not exist. This feature is intended to be useful in preventing races between PUT operations. Examples: If-None-Match: "xyzzy" If-None-Match: W/"xyzzy" If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz" If-None-Match: * The result of a request having both an If-None-Match header field and either an If-Match or an If-Unmodified-Since header fields is undefined by this specification. 14.27 If-Range If a client has a partial copy of an entity in its cache, and wishes to have an up-to-date copy of the entire entity in its cache, it could use the Range request-header with a conditional GET (using either or both of If-Unmodified-Since and If-Match.) However, if the condition fails because the entity has been modified, the client would then have to make a second request to obtain the entire current entity-body. The If-Range header allows a client to "short-circuit" the second request. Informally, its meaning is `if the entity is unchanged, send me the part(s) that I am missing; otherwise, send me the entire new entity'. If-Range = "If-Range" ":" ( entity-tag | HTTP-date ) Fielding, et al. Standards Track [Page 133] RFC 2616 HTTP/1.1 June 1999 If the client has no entity tag for an entity, but does have a Last- Modified date, it MAY use that date in an If-Range header. (The server can distinguish between a valid HTTP-date and any form of entity-tag by examining no more than two characters.) The If-Range header SHOULD only be used together with a Range header, and MUST be ignored if the request does not include a Range header, or if the server does not support the sub-range operation. If the entity tag given in the If-Range header matches the current entity tag for the entity, then the server SHOULD provide the specified sub-range of the entity using a 206 (Partial content) response. If the entity tag does not match, then the server SHOULD return the entire entity using a 200 (OK) response. 14.28 If-Unmodified-Since The If-Unmodified-Since request-header field is used with a method to make it conditional. If the requested resource has not been modified since the time specified in this field, the server SHOULD perform the requested operation as if the If-Unmodified-Since header were not present. If the requested variant has been modified since the specified time, the server MUST NOT perform the requested operation, and MUST return a 412 (Precondition Failed). If-Unmodified-Since = "If-Unmodified-Since" ":" HTTP-date An example of the field is: If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT If the request normally (i.e., without the If-Unmodified-Since header) would result in anything other than a 2xx or 412 status, the If-Unmodified-Since header SHOULD be ignored. If the specified date is invalid, the header is ignored. The result of a request having both an If-Unmodified-Since header field and either an If-None-Match or an If-Modified-Since header fields is undefined by this specification. 14.29 Last-Modified The Last-Modified entity-header field indicates the date and time at which the origin server believes the variant was last modified. Last-Modified = "Last-Modified" ":" HTTP-date Fielding, et al. Standards Track [Page 134] RFC 2616 HTTP/1.1 June 1999 An example of its use is Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT The exact meaning of this header field depends on the implementation of the origin server and the nature of the original resource. For files, it may be just the file system last-modified time. For entities with dynamically included parts, it may be the most recent of the set of last-modify times for its component parts. For database gateways, it may be the last-update time stamp of the record. For virtual objects, it may be the last time the internal state changed. An origin server MUST NOT send a Last-Modified date which is later than the server's time of message origination. In such cases, where the resource's last modification would indicate some time in the future, the server MUST replace that date with the message origination date. An origin server SHOULD obtain the Last-Modified value of the entity as close as possible to the time that it generates the Date value of its response. This allows a recipient to make an accurate assessment of the entity's modification time, especially if the entity changes near the time that the response is generated. HTTP/1.1 servers SHOULD send Last-Modified whenever feasible. 14.30 Location The Location response-header field is used to redirect the recipient to a location other than the Request-URI for completion of the request or identification of a new resource. For 201 (Created) responses, the Location is that of the new resource which was created by the request. For 3xx responses, the location SHOULD indicate the server's preferred URI for automatic redirection to the resource. The field value consists of a single absolute URI. Location = "Location" ":" absoluteURI An example is: Location: http://www.w3.org/pub/WWW/People.html Note: The Content-Location header field (section 14.14) differs from Location in that the Content-Location identifies the original location of the entity enclosed in the request. It is therefore possible for a response to contain header fields for both Location and Content-Location. Also see section 13.10 for cache requirements of some methods. Fielding, et al. Standards Track [Page 135] RFC 2616 HTTP/1.1 June 1999 14.31 Max-Forwards The Max-Forwards request-header field provides a mechanism with the TRACE (section 9.8) and OPTIONS (section 9.2) methods to limit the number of proxies or gateways that can forward the request to the next inbound server. This can be useful when the client is attempting to trace a request chain which appears to be failing or looping in mid-chain. Max-Forwards = "Max-Forwards" ":" 1*DIGIT The Max-Forwards value is a decimal integer indicating the remaining number of times this request message may be forwarded. Each proxy or gateway recipient of a TRACE or OPTIONS request containing a Max-Forwards header field MUST check and update its value prior to forwarding the request. If the received value is zero (0), the recipient MUST NOT forward the request; instead, it MUST respond as the final recipient. If the received Max-Forwards value is greater than zero, then the forwarded message MUST contain an updated Max-Forwards field with a value decremented by one (1). The Max-Forwards header field MAY be ignored for all other methods defined by this specification and for any extension methods for which it is not explicitly referred to as part of that method definition. 14.32 Pragma The Pragma general-header field is used to include implementation- specific directives that might apply to any recipient along the request/response chain. All pragma directives specify optional behavior from the viewpoint of the protocol; however, some systems MAY require that behavior be consistent with the directives. Pragma = "Pragma" ":" 1#pragma-directive pragma-directive = "no-cache" | extension-pragma extension-pragma = token [ "=" ( token | quoted-string ) ] When the no-cache directive is present in a request message, an application SHOULD forward the request toward the origin server even if it has a cached copy of what is being requested. This pragma directive has the same semantics as the no-cache cache-directive (see section 14.9) and is defined here for backward compatibility with HTTP/1.0. Clients SHOULD include both header fields when a no-cache request is sent to a server not known to be HTTP/1.1 compliant. Fielding, et al. Standards Track [Page 136] RFC 2616 HTTP/1.1 June 1999 Pragma directives MUST be passed through by a proxy or gateway application, regardless of their significance to that application, since the directives might be applicable to all recipients along the request/response chain. It is not possible to specify a pragma for a specific recipient; however, any pragma directive not relevant to a recipient SHOULD be ignored by that recipient. HTTP/1.1 caches SHOULD treat "Pragma: no-cache" as if the client had sent "Cache-Control: no-cache". No new Pragma directives will be defined in HTTP. Note: because the meaning of "Pragma: no-cache as a response header field is not actually specified, it does not provide a reliable replacement for "Cache-Control: no-cache" in a response 14.33 Proxy-Authenticate The Proxy-Authenticate response-header field MUST be included as part of a 407 (Proxy Authentication Required) response. The field value consists of a challenge that indicates the authentication scheme and parameters applicable to the proxy for this Request-URI. Proxy-Authenticate = "Proxy-Authenticate" ":" 1#challenge The HTTP access authentication process is described in "HTTP Authentication: Basic and Digest Access Authentication" [43]. Unlike WWW-Authenticate, the Proxy-Authenticate header field applies only to the current connection and SHOULD NOT be passed on to downstream clients. However, an intermediate proxy might need to obtain its own credentials by requesting them from the downstream client, which in some circumstances will appear as if the proxy is forwarding the Proxy-Authenticate header field. 14.34 Proxy-Authorization The Proxy-Authorization request-header field allows the client to identify itself (or its user) to a proxy which requires authentication. The Proxy-Authorization field value consists of credentials containing the authentication information of the user agent for the proxy and/or realm of the resource being requested. Proxy-Authorization = "Proxy-Authorization" ":" credentials The HTTP access authentication process is described in "HTTP Authentication: Basic and Digest Access Authentication" [43] . Unlike Authorization, the Proxy-Authorization header field applies only to the next outbound proxy that demanded authentication using the Proxy- Authenticate field. When multiple proxies are used in a chain, the Fielding, et al. Standards Track [Page 137] RFC 2616 HTTP/1.1 June 1999 Proxy-Authorization header field is consumed by the first outbound proxy that was expecting to receive credentials. A proxy MAY relay the credentials from the client request to the next proxy if that is the mechanism by which the proxies cooperatively authenticate a given request. 14.35 Range 14.35.1 Byte Ranges Since all HTTP entities are represented in HTTP messages as sequences of bytes, the concept of a byte range is meaningful for any HTTP entity. (However, not all clients and servers need to support byte- range operations.) Byte range specifications in HTTP apply to the sequence of bytes in the entity-body (not necessarily the same as the message-body). A byte range operation MAY specify a single range of bytes, or a set of ranges within a single entity. ranges-specifier = byte-ranges-specifier byte-ranges-specifier = bytes-unit "=" byte-range-set byte-range-set = 1#( byte-range-spec | suffix-byte-range-spec ) byte-range-spec = first-byte-pos "-" [last-byte-pos] first-byte-pos = 1*DIGIT last-byte-pos = 1*DIGIT The first-byte-pos value in a byte-range-spec gives the byte-offset of the first byte in a range. The last-byte-pos value gives the byte-offset of the last byte in the range; that is, the byte positions specified are inclusive. Byte offsets start at zero. If the last-byte-pos value is present, it MUST be greater than or equal to the first-byte-pos in that byte-range-spec, or the byte- range-spec is syntactically invalid. The recipient of a byte-range- set that includes one or more syntactically invalid byte-range-spec values MUST ignore the header field that includes that byte-range- set. If the last-byte-pos value is absent, or if the value is greater than or equal to the current length of the entity-body, last-byte-pos is taken to be equal to one less than the current length of the entity- body in bytes. By its choice of last-byte-pos, a client can limit the number of bytes retrieved without knowing the size of the entity. Fielding, et al. Standards Track [Page 138] RFC 2616 HTTP/1.1 June 1999 suffix-byte-range-spec = "-" suffix-length suffix-length = 1*DIGIT A suffix-byte-range-spec is used to specify the suffix of the entity-body, of a length given by the suffix-length value. (That is, this form specifies the last N bytes of an entity-body.) If the entity is shorter than the specified suffix-length, the entire entity-body is used. If a syntactically valid byte-range-set includes at least one byte- range-spec whose first-byte-pos is less than the current length of the entity-body, or at least one suffix-byte-range-spec with a non- zero suffix-length, then the byte-range-set is satisfiable. Otherwise, the byte-range-set is unsatisfiable. If the byte-range-set is unsatisfiable, the server SHOULD return a response with a status of 416 (Requested range not satisfiable). Otherwise, the server SHOULD return a response with a status of 206 (Partial Content) containing the satisfiable ranges of the entity-body. Examples of byte-ranges-specifier values (assuming an entity-body of length 10000): - The first 500 bytes (byte offsets 0-499, inclusive): bytes=0- 499 - The second 500 bytes (byte offsets 500-999, inclusive): bytes=500-999 - The final 500 bytes (byte offsets 9500-9999, inclusive): bytes=-500 - Or bytes=9500- - The first and last bytes only (bytes 0 and 9999): bytes=0-0,-1 - Several legal but not canonical specifications of the second 500 bytes (byte offsets 500-999, inclusive): bytes=500-600,601-999 bytes=500-700,601-999 14.35.2 Range Retrieval Requests HTTP retrieval requests using conditional or unconditional GET methods MAY request one or more sub-ranges of the entity, instead of the entire entity, using the Range request header, which applies to the entity returned as the result of the request: Range = "Range" ":" ranges-specifier Fielding, et al. Standards Track [Page 139] RFC 2616 HTTP/1.1 June 1999 A server MAY ignore the Range header. However, HTTP/1.1 origin servers and intermediate caches ought to support byte ranges when possible, since Range supports efficient recovery from partially failed transfers, and supports efficient partial retrieval of large entities. If the server supports the Range header and the specified range or ranges are appropriate for the entity: - The presence of a Range header in an unconditional GET modifies what is returned if the GET is otherwise successful. In other words, the response carries a status code of 206 (Partial Content) instead of 200 (OK). - The presence of a Range header in a conditional GET (a request using one or both of If-Modified-Since and If-None-Match, or one or both of If-Unmodified-Since and If-Match) modifies what is returned if the GET is otherwise successful and the condition is true. It does not affect the 304 (Not Modified) response returned if the conditional is false. In some cases, it might be more appropriate to use the If-Range header (see section 14.27) in addition to the Range header. If a proxy that supports ranges receives a Range request, forwards the request to an inbound server, and receives an entire entity in reply, it SHOULD only return the requested range to its client. It SHOULD store the entire received response in its cache if that is consistent with its cache allocation policies. 14.36 Referer The Referer[sic] request-header field allows the client to specify, for the server's benefit, the address (URI) of the resource from which the Request-URI was obtained (the "referrer", although the header field is misspelled.) The Referer request-header allows a server to generate lists of back-links to resources for interest, logging, optimized caching, etc. It also allows obsolete or mistyped links to be traced for maintenance. The Referer field MUST NOT be sent if the Request-URI was obtained from a source that does not have its own URI, such as input from the user keyboard. Referer = "Referer" ":" ( absoluteURI | relativeURI ) Example: Referer: http://www.w3.org/hypertext/DataSources/Overview.html Fielding, et al. Standards Track [Page 140] RFC 2616 HTTP/1.1 June 1999 If the field value is a relative URI, it SHOULD be interpreted relative to the Request-URI. The URI MUST NOT include a fragment. See section 15.1.3 for security considerations. 14.37 Retry-After The Retry-After response-header field can be used with a 503 (Service Unavailable) response to indicate how long the service is expected to be unavailable to the requesting client. This field MAY also be used with any 3xx (Redirection) response to indicate the minimum time the user-agent is asked wait before issuing the redirected request. The value of this field can be either an HTTP-date or an integer number of seconds (in decimal) after the time of the response. Retry-After = "Retry-After" ":" ( HTTP-date | delta-seconds ) Two examples of its use are Retry-After: Fri, 31 Dec 1999 23:59:59 GMT Retry-After: 120 In the latter example, the delay is 2 minutes. 14.38 Server The Server response-header field contains information about the software used by the origin server to handle the request. The field can contain multiple product tokens (section 3.8) and comments identifying the server and any significant subproducts. The product tokens are listed in order of their significance for identifying the application. Server = "Server" ":" 1*( product | comment ) Example: Server: CERN/3.0 libwww/2.17 If the response is being forwarded through a proxy, the proxy application MUST NOT modify the Server response-header. Instead, it SHOULD include a Via field (as described in section 14.45). Note: Revealing the specific software version of the server might allow the server machine to become more vulnerable to attacks against software that is known to contain security holes. Server implementors are encouraged to make this field a configurable option. Fielding, et al. Standards Track [Page 141] RFC 2616 HTTP/1.1 June 1999 14.39 TE The TE request-header field indicates what extension transfer-codings it is willing to accept in the response and whether or not it is willing to accept trailer fields in a chunked transfer-coding. Its value may consist of the keyword "trailers" and/or a comma-separated list of extension transfer-coding names with optional accept parameters (as described in section 3.6). TE = "TE" ":" #( t-codings ) t-codings = "trailers" | ( transfer-extension [ accept-params ] ) The presence of the keyword "trailers" indicates that the client is willing to accept trailer fields in a chunked transfer-coding, as defined in section 3.6.1. This keyword is reserved for use with transfer-coding values even though it does not itself represent a transfer-coding. Examples of its use are: TE: deflate TE: TE: trailers, deflate;q=0.5 The TE header field only applies to the immediate connection. Therefore, the keyword MUST be supplied within a Connection header field (section 14.10) whenever TE is present in an HTTP/1.1 message. A server tests whether a transfer-coding is acceptable, according to a TE field, using these rules: 1. The "chunked" transfer-coding is always acceptable. If the keyword "trailers" is listed, the client indicates that it is willing to accept trailer fields in the chunked response on behalf of itself and any downstream clients. The implication is that, if given, the client is stating that either all downstream clients are willing to accept trailer fields in the forwarded response, or that it will attempt to buffer the response on behalf of downstream recipients. Note: HTTP/1.1 does not define any means to limit the size of a chunked response such that a client can be assured of buffering the entire response. 2. If the transfer-coding being tested is one of the transfer- codings listed in the TE field, then it is acceptable unless it is accompanied by a qvalue of 0. (As defined in section 3.9, a qvalue of 0 means "not acceptable.") Fielding, et al. Standards Track [Page 142] RFC 2616 HTTP/1.1 June 1999 3. If multiple transfer-codings are acceptable, then the acceptable transfer-coding with the highest non-zero qvalue is preferred. The "chunked" transfer-coding always has a qvalue of 1. If the TE field-value is empty or if no TE field is present, the only transfer-coding is "chunked". A message with no transfer-coding is always acceptable. 14.40 Trailer The Trailer general field value indicates that the given set of header fields is present in the trailer of a message encoded with chunked transfer-coding. Trailer = "Trailer" ":" 1#field-name An HTTP/1.1 message SHOULD include a Trailer header field in a message using chunked transfer-coding with a non-empty trailer. Doing so allows the recipient to know which header fields to expect in the trailer. If no Trailer header field is present, the trailer SHOULD NOT include any header fields. See section 3.6.1 for restrictions on the use of trailer fields in a "chunked" transfer-coding. Message header fields listed in the Trailer header field MUST NOT include the following header fields: . Transfer-Encoding . Content-Length . Trailer 14.41 Transfer-Encoding The Transfer-Encoding general-header field indicates what (if any) type of transformation has been applied to the message body in order to safely transfer it between the sender and the recipient. This differs from the content-coding in that the transfer-coding is a property of the message, not of the entity. Transfer-Encoding = "Transfer-Encoding" ":" 1#transfer-coding Transfer-codings are defined in section 3.6. An example is: Transfer-Encoding: chunked Fielding, et al. Standards Track [Page 143] RFC 2616 HTTP/1.1 June 1999 If multiple encodings have been applied to an entity, the transfer- codings MUST be listed in the order in which they were applied. Additional information about the encoding parameters MAY be provided by other entity-header fields not defined by this specification. Many older HTTP/1.0 applications do not understand the Transfer- Encoding header. 14.42 Upgrade The Upgrade general-header allows the client to specify what additional communication protocols it supports and would like to use if the server finds it appropriate to switch protocols. The server MUST use the Upgrade header field within a 101 (Switching Protocols) response to indicate which protocol(s) are being switched. Upgrade = "Upgrade" ":" 1#product For example, Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 The Upgrade header field is intended to provide a simple mechanism for transition from HTTP/1.1 to some other, incompatible protocol. It does so by allowing the client to advertise its desire to use another protocol, such as a later version of HTTP with a higher major version number, even though the current request has been made using HTTP/1.1. This eases the difficult transition between incompatible protocols by allowing the client to initiate a request in the more commonly supported protocol while indicating to the server that it would like to use a "better" protocol if available (where "better" is determined by the server, possibly according to the nature of the method and/or resource being requested). The Upgrade header field only applies to switching application-layer protocols upon the existing transport-layer connection. Upgrade cannot be used to insist on a protocol change; its acceptance and use by the server is optional. The capabilities and nature of the application-layer communication after the protocol change is entirely dependent upon the new protocol chosen, although the first action after changing the protocol MUST be a response to the initial HTTP request containing the Upgrade header field. The Upgrade header field only applies to the immediate connection. Therefore, the upgrade keyword MUST be supplied within a Connection header field (section 14.10) whenever Upgrade is present in an HTTP/1.1 message. Fielding, et al. Standards Track [Page 144] RFC 2616 HTTP/1.1 June 1999 The Upgrade header field cannot be used to indicate a switch to a protocol on a different connection. For that purpose, it is more appropriate to use a 301, 302, 303, or 305 redirection response. This specification only defines the protocol name "HTTP" for use by the family of Hypertext Transfer Protocols, as defined by the HTTP version rules of section 3.1 and future updates to this specification. Any token can be used as a protocol name; however, it will only be useful if both the client and server associate the name with the same protocol. 14.43 User-Agent The User-Agent request-header field contains information about the user agent originating the request. This is for statistical purposes, the tracing of protocol violations, and automated recognition of user agents for the sake of tailoring responses to avoid particular user agent limitations. User agents SHOULD include this field with requests. The field can contain multiple product tokens (section 3.8) and comments identifying the agent and any subproducts which form a significant part of the user agent. By convention, the product tokens are listed in order of their significance for identifying the application. User-Agent = "User-Agent" ":" 1*( product | comment ) Example: User-Agent: CERN-LineMode/2.15 libwww/2.17b3 14.44 Vary The Vary field value indicates the set of request-header fields that fully determines, while the response is fresh, whether a cache is permitted to use the response to reply to a subsequent request without revalidation. For uncacheable or stale responses, the Vary field value advises the user agent about the criteria that were used to select the representation. A Vary field value of "*" implies that a cache cannot determine from the request headers of a subsequent request whether this response is the appropriate representation. See section 13.6 for use of the Vary header field by caches. Vary = "Vary" ":" ( "*" | 1#field-name ) An HTTP/1.1 server SHOULD include a Vary header field with any cacheable response that is subject to server-driven negotiation. Doing so allows a cache to properly interpret future requests on that resource and informs the user agent about the presence of negotiation Fielding, et al. Standards Track [Page 145] RFC 2616 HTTP/1.1 June 1999 on that resource. A server MAY include a Vary header field with a non-cacheable response that is subject to server-driven negotiation, since this might provide the user agent with useful information about the dimensions over which the response varies at the time of the response. A Vary field value consisting of a list of field-names signals that the representation selected for the response is based on a selection algorithm which considers ONLY the listed request-header field values in selecting the most appropriate representation. A cache MAY assume that the same selection will be made for future requests with the same values for the listed field names, for the duration of time for which the response is fresh. The field-names given are not limited to the set of standard request-header fields defined by this specification. Field names are case-insensitive. A Vary field value of "*" signals that unspecified parameters not limited to the request-headers (e.g., the network address of the client), play a role in the selection of the response representation. The "*" value MUST NOT be generated by a proxy server; it may only be generated by an origin server. 14.45 Via The Via general-header field MUST be used by gateways and proxies to indicate the intermediate protocols and recipients between the user agent and the server on requests, and between the origin server and the client on responses. It is analogous to the "Received" field of RFC 822 [9] and is intended to be used for tracking message forwards, avoiding request loops, and identifying the protocol capabilities of all senders along the request/response chain. Via = "Via" ":" 1#( received-protocol received-by [ comment ] ) received-protocol = [ protocol-name "/" ] protocol-version protocol-name = token protocol-version = token received-by = ( host [ ":" port ] ) | pseudonym pseudonym = token The received-protocol indicates the protocol version of the message received by the server or client along each segment of the request/response chain. The received-protocol version is appended to the Via field value when the message is forwarded so that information about the protocol capabilities of upstream applications remains visible to all recipients. Fielding, et al. Standards Track [Page 146] RFC 2616 HTTP/1.1 June 1999 The protocol-name is optional if and only if it would be "HTTP". The received-by field is normally the host and optional port number of a recipient server or client that subsequently forwarded the message. However, if the real host is considered to be sensitive information, it MAY be replaced by a pseudonym. If the port is not given, it MAY be assumed to be the default port of the received-protocol. Multiple Via field values represents each proxy or gateway that has forwarded the message. Each recipient MUST append its information such that the end result is ordered according to the sequence of forwarding applications. Comments MAY be used in the Via header field to identify the software of the recipient proxy or gateway, analogous to the User-Agent and Server header fields. However, all comments in the Via field are optional and MAY be removed by any recipient prior to forwarding the message. For example, a request message could be sent from an HTTP/1.0 user agent to an internal proxy code-named "fred", which uses HTTP/1.1 to forward the request to a public proxy at nowhere.com, which completes the request by forwarding it to the origin server at www.ics.uci.edu. The request received by www.ics.uci.edu would then have the following Via header field: Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1) Proxies and gateways used as a portal through a network firewall SHOULD NOT, by default, forward the names and ports of hosts within the firewall region. This information SHOULD only be propagated if explicitly enabled. If not enabled, the received-by host of any host behind the firewall SHOULD be replaced by an appropriate pseudonym for that host. For organizations that have strong privacy requirements for hiding internal structures, a proxy MAY combine an ordered subsequence of Via header field entries with identical received-protocol values into a single such entry. For example, Via: 1.0 ricky, 1.1 ethel, 1.1 fred, 1.0 lucy could be collapsed to Via: 1.0 ricky, 1.1 mertz, 1.0 lucy Fielding, et al. Standards Track [Page 147] RFC 2616 HTTP/1.1 June 1999 Applications SHOULD NOT combine multiple entries unless they are all under the same organizational control and the hosts have already been replaced by pseudonyms. Applications MUST NOT combine entries which have different received-protocol values. 14.46 Warning The Warning general-header field is used to carry additional information about the status or transformation of a message which might not be reflected in the message. This information is typically used to warn about a possible lack of semantic transparency from caching operations or transformations applied to the entity body of the message. Warning headers are sent with responses using: Warning = "Warning" ":" 1#warning-value warning-value = warn-code SP warn-agent SP warn-text [SP warn-date] warn-code = 3DIGIT warn-agent = ( host [ ":" port ] ) | pseudonym ; the name or pseudonym of the server adding ; the Warning header, for use in debugging warn-text = quoted-string warn-date = <"> HTTP-date <"> A response MAY carry more than one Warning header. The warn-text SHOULD be in a natural language and character set that is most likely to be intelligible to the human user receiving the response. This decision MAY be based on any available knowledge, such as the location of the cache or user, the Accept-Language field in a request, the Content-Language field in a response, etc. The default language is English and the default character set is ISO-8859-1. If a character set other than ISO-8859-1 is used, it MUST be encoded in the warn-text using the method described in RFC 2047 [14]. Warning headers can in general be applied to any message, however some specific warn-codes are specific to caches and can only be applied to response messages. New Warning headers SHOULD be added after any existing Warning headers. A cache MUST NOT delete any Warning header that it received with a message. However, if a cache successfully validates a cache entry, it SHOULD remove any Warning headers previously attached to that entry except as specified for Fielding, et al. Standards Track [Page 148] RFC 2616 HTTP/1.1 June 1999 specific Warning codes. It MUST then add any Warning headers received in the validating response. In other words, Warning headers are those that would be attached to the most recent relevant response. When multiple Warning headers are attached to a response, the user agent ought to inform the user of as many of them as possible, in the order that they appear in the response. If it is not possible to inform the user of all of the warnings, the user agent SHOULD follow these heuristics: - Warnings that appear early in the response take priority over those appearing later in the response. - Warnings in the user's preferred character set take priority over warnings in other character sets but with identical warn- codes and warn-agents. Systems that generate multiple Warning headers SHOULD order them with this user agent behavior in mind. Requirements for the behavior of caches with respect to Warnings are stated in section 13.1.2. This is a list of the currently-defined warn-codes, each with a recommended warn-text in English, and a description of its meaning. 110 Response is stale MUST be included whenever the returned response is stale. 111 Revalidation failed MUST be included if a cache returns a stale response because an attempt to revalidate the response failed, due to an inability to reach the server. 112 Disconnected operation SHOULD be included if the cache is intentionally disconnected from the rest of the network for a period of time. 113 Heuristic expiration MUST be included if the cache heuristically chose a freshness lifetime greater than 24 hours and the response's age is greater than 24 hours. 199 Miscellaneous warning The warning text MAY include arbitrary information to be presented to a human user, or logged. A system receiving this warning MUST NOT take any automated action, besides presenting the warning to the user. Fielding, et al. Standards Track [Page 149] RFC 2616 HTTP/1.1 June 1999 214 Transformation applied MUST be added by an intermediate cache or proxy if it applies any transformation changing the content-coding (as specified in the Content-Encoding header) or media-type (as specified in the Content-Type header) of the response, or the entity-body of the response, unless this Warning code already appears in the response. 299 Miscellaneous persistent warning The warning text MAY include arbitrary information to be presented to a human user, or logged. A system receiving this warning MUST NOT take any automated action. If an implementation sends a message with one or more Warning headers whose version is HTTP/1.0 or lower, then the sender MUST include in each warning-value a warn-date that matches the date in the response. If an implementation receives a message with a warning-value that includes a warn-date, and that warn-date is different from the Date value in the response, then that warning-value MUST be deleted from the message before storing, forwarding, or using it. (This prevents bad consequences of naive caching of Warning header fields.) If all of the warning-values are deleted for this reason, the Warning header MUST be deleted as well. 14.47 WWW-Authenticate The WWW-Authenticate response-header field MUST be included in 401 (Unauthorized) response messages. The field value consists of at least one challenge that indicates the authentication scheme(s) and parameters applicable to the Request-URI. WWW-Authenticate = "WWW-Authenticate" ":" 1#challenge The HTTP access authentication process is described in "HTTP Authentication: Basic and Digest Access Authentication" [43]. User agents are advised to take special care in parsing the WWW- Authenticate field value as it might contain more than one challenge, or if more than one WWW-Authenticate header field is provided, the contents of a challenge itself can contain a comma-separated list of authentication parameters. 15 Security Considerations This section is meant to inform application developers, information providers, and users of the security limitations in HTTP/1.1 as described by this document. The discussion does not include definitive solutions to the problems revealed, though it does make some suggestions for reducing security risks. Fielding, et al. Standards Track [Page 150] RFC 2616 HTTP/1.1 June 1999 15.1 Personal Information HTTP clients are often privy to large amounts of personal information (e.g. the user's name, location, mail address, passwords, encryption keys, etc.), and SHOULD be very careful to prevent unintentional leakage of this information via the HTTP protocol to other sources. We very strongly recommend that a convenient interface be provided for the user to control dissemination of such information, and that designers and implementors be particularly careful in this area. History shows that errors in this area often create serious security and/or privacy problems and generate highly adverse publicity for the implementor's company. 15.1.1 Abuse of Server Log Information A server is in the position to save personal data about a user's requests which might identify their reading patterns or subjects of interest. This information is clearly confidential in nature and its handling can be constrained by law in certain countries. People using the HTTP protocol to provide data are responsible for ensuring that such material is not distributed without the permission of any individuals that are identifiable by the published results. 15.1.2 Transfer of Sensitive Information Like any generic data transfer protocol, HTTP cannot regulate the content of the data that is transferred, nor is there any a priori method of determining the sensitivity of any particular piece of information within the context of any given request. Therefore, applications SHOULD supply as much control over this information as possible to the provider of that information. Four header fields are worth special mention in this context: Server, Via, Referer and From. Revealing the specific software version of the server might allow the server machine to become more vulnerable to attacks against software that is known to contain security holes. Implementors SHOULD make the Server header field a configurable option. Proxies which serve as a portal through a network firewall SHOULD take special precautions regarding the transfer of header information that identifies the hosts behind the firewall. In particular, they SHOULD remove, or replace with sanitized versions, any Via fields generated behind the firewall. The Referer header allows reading patterns to be studied and reverse links drawn. Although it can be very useful, its power can be abused if user details are not separated from the information contained in Fielding, et al. Standards Track [Page 151] RFC 2616 HTTP/1.1 June 1999 the Referer. Even when the personal information has been removed, the Referer header might indicate a private document's URI whose publication would be inappropriate. The information sent in the From field might conflict with the user's privacy interests or their site's security policy, and hence it SHOULD NOT be transmitted without the user being able to disable, enable, and modify the contents of the field. The user MUST be able to set the contents of this field within a user preference or application defaults configuration. We suggest, though do not require, that a convenient toggle interface be provided for the user to enable or disable the sending of From and Referer information. The User-Agent (section 14.43) or Server (section 14.38) header fields can sometimes be used to determine that a specific client or server have a particular security hole which might be exploited. Unfortunately, this same information is often used for other valuable purposes for which HTTP currently has no better mechanism. 15.1.3 Encoding Sensitive Information in URI's Because the source of a link might be private information or might reveal an otherwise private information source, it is strongly recommended that the user be able to select whether or not the Referer field is sent. For example, a browser client could have a toggle switch for browsing openly/anonymously, which would respectively enable/disable the sending of Referer and From information. Clients SHOULD NOT include a Referer header field in a (non-secure) HTTP request if the referring page was transferred with a secure protocol. Authors of services which use the HTTP protocol SHOULD NOT use GET based forms for the submission of sensitive data, because this will cause this data to be encoded in the Request-URI. Many existing servers, proxies, and user agents will log the request URI in some place where it might be visible to third parties. Servers can use POST-based form submission instead 15.1.4 Privacy Issues Connected to Accept Headers Accept request-headers can reveal information about the user to all servers which are accessed. The Accept-Language header in particular can reveal information the user would consider to be of a private nature, because the understanding of particular languages is often Fielding, et al. Standards Track [Page 152] RFC 2616 HTTP/1.1 June 1999 strongly correlated to the membership of a particular ethnic group. User agents which offer the option to configure the contents of an Accept-Language header to be sent in every request are strongly encouraged to let the configuration process include a message which makes the user aware of the loss of privacy involved. An approach that limits the loss of privacy would be for a user agent to omit the sending of Accept-Language headers by default, and to ask the user whether or not to start sending Accept-Language headers to a server if it detects, by looking for any Vary response-header fields generated by the server, that such sending could improve the quality of service. Elaborate user-customized accept header fields sent in every request, in particular if these include quality values, can be used by servers as relatively reliable and long-lived user identifiers. Such user identifiers would allow content providers to do click-trail tracking, and would allow collaborating content providers to match cross-server click-trails or form submissions of individual users. Note that for many users not behind a proxy, the network address of the host running the user agent will also serve as a long-lived user identifier. In environments where proxies are used to enhance privacy, user agents ought to be conservative in offering accept header configuration options to end users. As an extreme privacy measure, proxies could filter the accept headers in relayed requests. General purpose user agents which provide a high degree of header configurability SHOULD warn users about the loss of privacy which can be involved. 15.2 Attacks Based On File and Path Names Implementations of HTTP origin servers SHOULD be careful to restrict the documents returned by HTTP requests to be only those that were intended by the server administrators. If an HTTP server translates HTTP URIs directly into file system calls, the server MUST take special care not to serve files that were not intended to be delivered to HTTP clients. For example, UNIX, Microsoft Windows, and other operating systems use ".." as a path component to indicate a directory level above the current one. On such a system, an HTTP server MUST disallow any such construct in the Request-URI if it would otherwise allow access to a resource outside those intended to be accessible via the HTTP server. Similarly, files intended for reference only internally to the server (such as access control files, configuration files, and script code) MUST be protected from inappropriate retrieval, since they might contain sensitive information. Experience has shown that minor bugs in such HTTP server implementations have turned into security risks. Fielding, et al. Standards Track [Page 153] RFC 2616 HTTP/1.1 June 1999 15.3 DNS Spoofing Clients using HTTP rely heavily on the Domain Name Service, and are thus generally prone to security attacks based on the deliberate mis-association of IP addresses and DNS names. Clients need to be cautious in assuming the continuing validity of an IP number/DNS name association. In particular, HTTP clients SHOULD rely on their name resolver for confirmation of an IP number/DNS name association, rather than caching the result of previous host name lookups. Many platforms already can cache host name lookups locally when appropriate, and they SHOULD be configured to do so. It is proper for these lookups to be cached, however, only when the TTL (Time To Live) information reported by the name server makes it likely that the cached information will remain useful. If HTTP clients cache the results of host name lookups in order to achieve a performance improvement, they MUST observe the TTL information reported by DNS. If HTTP clients do not observe this rule, they could be spoofed when a previously-accessed server's IP address changes. As network renumbering is expected to become increasingly common [24], the possibility of this form of attack will grow. Observing this requirement thus reduces this potential security vulnerability. This requirement also improves the load-balancing behavior of clients for replicated servers using the same DNS name and reduces the likelihood of a user's experiencing failure in accessing sites which use that strategy. 15.4 Location Headers and Spoofing If a single server supports multiple organizations that do not trust one another, then it MUST check the values of Location and Content- Location headers in responses that are generated under control of said organizations to make sure that they do not attempt to invalidate resources over which they have no authority. 15.5 Content-Disposition Issues RFC 1806 [35], from which the often implemented Content-Disposition (see section 19.5.1) header in HTTP is derived, has a number of very serious security considerations. Content-Disposition is not part of the HTTP standard, but since it is widely implemented, we are documenting its use and risks for implementors. See RFC 2183 [49] (which updates RFC 1806) for details. Fielding, et al. Standards Track [Page 154] RFC 2616 HTTP/1.1 June 1999 15.6 Authentication Credentials and Idle Clients Existing HTTP clients and user agents typically retain authentication information indefinitely. HTTP/1.1. does not provide a method for a server to direct clients to discard these cached credentials. This is a significant defect that requires further extensions to HTTP. Circumstances under which credential caching can interfere with the application's security model include but are not limited to: - Clients which have been idle for an extended period following which the server might wish to cause the client to reprompt the user for credentials. - Applications which include a session termination indication (such as a `logout' or `commit' button on a page) after which the server side of the application `knows' that there is no further reason for the client to retain the credentials. This is currently under separate study. There are a number of work- arounds to parts of this problem, and we encourage the use of password protection in screen savers, idle time-outs, and other methods which mitigate the security problems inherent in this problem. In particular, user agents which cache credentials are encouraged to provide a readily accessible mechanism for discarding cached credentials under user control. 15.7 Proxies and Caching By their very nature, HTTP proxies are men-in-the-middle, and represent an opportunity for man-in-the-middle attacks. Compromise of the systems on which the proxies run can result in serious security and privacy problems. Proxies have access to security-related information, personal information about individual users and organizations, and proprietary information belonging to users and content providers. A compromised proxy, or a proxy implemented or configured without regard to security and privacy considerations, might be used in the commission of a wide range of potential attacks. Proxy operators should protect the systems on which proxies run as they would protect any system that contains or transports sensitive information. In particular, log information gathered at proxies often contains highly sensitive personal information, and/or information about organizations. Log information should be carefully guarded, and appropriate guidelines for use developed and followed. (Section 15.1.1). Fielding, et al. Standards Track [Page 155] RFC 2616 HTTP/1.1 June 1999 Caching proxies provide additional potential vulnerabilities, since the contents of the cache represent an attractive target for malicious exploitation. Because cache contents persist after an HTTP request is complete, an attack on the cache can reveal information long after a user believes that the information has been removed from the network. Therefore, cache contents should be protected as sensitive information. Proxy implementors should consider the privacy and security implications of their design and coding decisions, and of the configuration options they provide to proxy operators (especially the default configuration). Users of a proxy need to be aware that they are no trustworthier than the people who run the proxy; HTTP itself cannot solve this problem. The judicious use of cryptography, when appropriate, may suffice to protect against a broad range of security and privacy attacks. Such cryptography is beyond the scope of the HTTP/1.1 specification. 15.7.1 Denial of Service Attacks on Proxies They exist. They are hard to defend against. Research continues. Beware. 16 Acknowledgments This specification makes heavy use of the augmented BNF and generic constructs defined by David H. Crocker for RFC 822 [9]. Similarly, it reuses many of the definitions provided by Nathaniel Borenstein and Ned Freed for MIME [7]. We hope that their inclusion in this specification will help reduce past confusion over the relationship between HTTP and Internet mail message formats. The HTTP protocol has evolved considerably over the years. It has benefited from a large and active developer community--the many people who have participated on the www-talk mailing list--and it is that community which has been most responsible for the success of HTTP and of the World-Wide Web in general. Marc Andreessen, Robert Cailliau, Daniel W. Connolly, Bob Denny, John Franks, Jean-Francois Groff, Phillip M. Hallam-Baker, Hakon W. Lie, Ari Luotonen, Rob McCool, Lou Montulli, Dave Raggett, Tony Sanders, and Marc VanHeyningen deserve special recognition for their efforts in defining early aspects of the protocol. This document has benefited greatly from the comments of all those participating in the HTTP-WG. In addition to those already mentioned, the following individuals have contributed to this specification: Fielding, et al. Standards Track [Page 156] RFC 2616 HTTP/1.1 June 1999 Gary Adams Ross Patterson Harald Tveit Alvestrand Albert Lunde Keith Ball John C. Mallery Brian Behlendorf Jean-Philippe Martin-Flatin Paul Burchard Mitra Maurizio Codogno David Morris Mike Cowlishaw Gavin Nicol Roman Czyborra Bill Perry Michael A. Dolan Jeffrey Perry David J. Fiander Scott Powers Alan Freier Owen Rees Marc Hedlund Luigi Rizzo Greg Herlihy David Robinson Koen Holtman Marc Salomon Alex Hopmann Rich Salz Bob Jernigan Allan M. Schiffman Shel Kaphan Jim Seidman Rohit Khare Chuck Shotton John Klensin Eric W. Sink Martijn Koster Simon E. Spero Alexei Kosut Richard N. Taylor David M. Kristol Robert S. Thau Daniel LaLiberte Bill (BearHeart) Weinman Ben Laurie Francois Yergeau Paul J. Leach Mary Ellen Zurko Daniel DuBois Josh Cohen Much of the content and presentation of the caching design is due to suggestions and comments from individuals including: Shel Kaphan, Paul Leach, Koen Holtman, David Morris, and Larry Masinter. Most of the specification of ranges is based on work originally done by Ari Luotonen and John Franks, with additional input from Steve Zilles. Thanks to the "cave men" of Palo Alto. You know who you are. Jim Gettys (the current editor of this document) wishes particularly to thank Roy Fielding, the previous editor of this document, along with John Klensin, Jeff Mogul, Paul Leach, Dave Kristol, Koen Holtman, John Franks, Josh Cohen, Alex Hopmann, Scott Lawrence, and Larry Masinter for their help. And thanks go particularly to Jeff Mogul and Scott Lawrence for performing the "MUST/MAY/SHOULD" audit. Fielding, et al. Standards Track [Page 157] RFC 2616 HTTP/1.1 June 1999 The Apache Group, Anselm Baird-Smith, author of Jigsaw, and Henrik Frystyk implemented RFC 2068 early, and we wish to thank them for the discovery of many of the problems that this document attempts to rectify. 17 References [1] Alvestrand, H., "Tags for the Identification of Languages", RFC 1766, March 1995. [2] Anklesaria, F., McCahill, M., Lindner, P., Johnson, D., Torrey, D. and B. Alberti, "The Internet Gopher Protocol (a distributed document search and retrieval protocol)", RFC 1436, March 1993. [3] Berners-Lee, T., "Universal Resource Identifiers in WWW", RFC 1630, June 1994. [4] Berners-Lee, T., Masinter, L. and M. McCahill, "Uniform Resource Locators (URL)", RFC 1738, December 1994. [5] Berners-Lee, T. and D. Connolly, "Hypertext Markup Language - 2.0", RFC 1866, November 1995. [6] Berners-Lee, T., Fielding, R. and H. Frystyk, "Hypertext Transfer Protocol -- HTTP/1.0", RFC 1945, May 1996. [7] Freed, N. and N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies", RFC 2045, November 1996. [8] Braden, R., "Requirements for Internet Hosts -- Communication Layers", STD 3, RFC 1123, October 1989. [9] Crocker, D., "Standard for The Format of ARPA Internet Text Messages", STD 11, RFC 822, August 1982. [10] Davis, F., Kahle, B., Morris, H., Salem, J., Shen, T., Wang, R., Sui, J., and M. Grinbaum, "WAIS Interface Protocol Prototype Functional Specification," (v1.5), Thinking Machines Corporation, April 1990. [11] Fielding, R., "Relative Uniform Resource Locators", RFC 1808, June 1995. [12] Horton, M. and R. Adams, "Standard for Interchange of USENET Messages", RFC 1036, December 1987. Fielding, et al. Standards Track [Page 158] RFC 2616 HTTP/1.1 June 1999 [13] Kantor, B. and P. Lapsley, "Network News Transfer Protocol", RFC 977, February 1986. [14] Moore, K., "MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text", RFC 2047, November 1996. [15] Nebel, E. and L. Masinter, "Form-based File Upload in HTML", RFC 1867, November 1995. [16] Postel, J., "Simple Mail Transfer Protocol", STD 10, RFC 821, August 1982. [17] Postel, J., "Media Type Registration Procedure", RFC 1590, November 1996. [18] Postel, J. and J. Reynolds, "File Transfer Protocol", STD 9, RFC 959, October 1985. [19] Reynolds, J. and J. Postel, "Assigned Numbers", STD 2, RFC 1700, October 1994. [20] Sollins, K. and L. Masinter, "Functional Requirements for Uniform Resource Names", RFC 1737, December 1994. [21] US-ASCII. Coded Character Set - 7-Bit American Standard Code for Information Interchange. Standard ANSI X3.4-1986, ANSI, 1986. [22] ISO-8859. International Standard -- Information Processing -- 8-bit Single-Byte Coded Graphic Character Sets -- Part 1: Latin alphabet No. 1, ISO-8859-1:1987. Part 2: Latin alphabet No. 2, ISO-8859-2, 1987. Part 3: Latin alphabet No. 3, ISO-8859-3, 1988. Part 4: Latin alphabet No. 4, ISO-8859-4, 1988. Part 5: Latin/Cyrillic alphabet, ISO-8859-5, 1988. Part 6: Latin/Arabic alphabet, ISO-8859-6, 1987. Part 7: Latin/Greek alphabet, ISO-8859-7, 1987. Part 8: Latin/Hebrew alphabet, ISO-8859-8, 1988. Part 9: Latin alphabet No. 5, ISO-8859-9, 1990. [23] Meyers, J. and M. Rose, "The Content-MD5 Header Field", RFC 1864, October 1995. [24] Carpenter, B. and Y. Rekhter, "Renumbering Needs Work", RFC 1900, February 1996. [25] Deutsch, P., "GZIP file format specification version 4.3", RFC 1952, May 1996. Fielding, et al. Standards Track [Page 159] RFC 2616 HTTP/1.1 June 1999 [26] Venkata N. Padmanabhan, and Jeffrey C. Mogul. "Improving HTTP Latency", Computer Networks and ISDN Systems, v. 28, pp. 25-35, Dec. 1995. Slightly revised version of paper in Proc. 2nd International WWW Conference '94: Mosaic and the Web, Oct. 1994, which is available at http://www.ncsa.uiuc.edu/SDG/IT94/Proceedings/DDay/mogul/HTTPLat ency.html. [27] Joe Touch, John Heidemann, and Katia Obraczka. "Analysis of HTTP Performance", <URL: http://www.isi.edu/touch/pubs/http-perf96/>, ISI Research Report ISI/RR-98-463, (original report dated Aug. 1996), USC/Information Sciences Institute, August 1998. [28] Mills, D., "Network Time Protocol (Version 3) Specification, Implementation and Analysis", RFC 1305, March 1992. [29] Deutsch, P., "DEFLATE Compressed Data Format Specification version 1.3", RFC 1951, May 1996. [30] S. Spero, "Analysis of HTTP Performance Problems," http://sunsite.unc.edu/mdma-release/http-prob.html. [31] Deutsch, P. and J. Gailly, "ZLIB Compressed Data Format Specification version 3.3", RFC 1950, May 1996. [32] Franks, J., Hallam-Baker, P., Hostetler, J., Leach, P., Luotonen, A., Sink, E. and L. Stewart, "An Extension to HTTP: Digest Access Authentication", RFC 2069, January 1997. [33] Fielding, R., Gettys, J., Mogul, J., Frystyk, H. and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2068, January 1997. [34] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [35] Troost, R. and Dorner, S., "Communicating Presentation Information in Internet Messages: The Content-Disposition Header", RFC 1806, June 1995. [36] Mogul, J., Fielding, R., Gettys, J. and H. Frystyk, "Use and Interpretation of HTTP Version Numbers", RFC 2145, May 1997. [jg639] [37] Palme, J., "Common Internet Message Headers", RFC 2076, February 1997. [jg640] Fielding, et al. Standards Track [Page 160] RFC 2616 HTTP/1.1 June 1999 [38] Yergeau, F., "UTF-8, a transformation format of Unicode and ISO-10646", RFC 2279, January 1998. [jg641] [39] Nielsen, H.F., Gettys, J., Baird-Smith, A., Prud'hommeaux, E., Lie, H., and C. Lilley. "Network Performance Effects of HTTP/1.1, CSS1, and PNG," Proceedings of ACM SIGCOMM '97, Cannes France, September 1997.[jg642] [40] Freed, N. and N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types", RFC 2046, November 1996. [jg643] [41] Alvestrand, H., "IETF Policy on Character Sets and Languages", BCP 18, RFC 2277, January 1998. [jg644] [42] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform Resource Identifiers (URI): Generic Syntax and Semantics", RFC 2396, August 1998. [jg645] [43] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A., Sink, E. and L. Stewart, "HTTP Authentication: Basic and Digest Access Authentication", RFC 2617, June 1999. [jg646] [44] Luotonen, A., "Tunneling TCP based protocols through Web proxy servers," Work in Progress. [jg647] [45] Palme, J. and A. Hopmann, "MIME E-mail Encapsulation of Aggregate Documents, such as HTML (MHTML)", RFC 2110, March 1997. [46] Bradner, S., "The Internet Standards Process -- Revision 3", BCP 9, RFC 2026, October 1996. [47] Masinter, L., "Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)", RFC 2324, 1 April 1998. [48] Freed, N. and N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples", RFC 2049, November 1996. [49] Troost, R., Dorner, S. and K. Moore, "Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field", RFC 2183, August 1997. Fielding, et al. Standards Track [Page 161] RFC 2616 HTTP/1.1 June 1999 18 Authors' Addresses Roy T. Fielding Information and Computer Science University of California, Irvine Irvine, CA 92697-3425, USA Fax: +1 (949) 824-1715 EMail: fielding@ics.uci.edu James Gettys World Wide Web Consortium MIT Laboratory for Computer Science 545 Technology Square Cambridge, MA 02139, USA Fax: +1 (617) 258 8682 EMail: jg@w3.org Jeffrey C. Mogul Western Research Laboratory Compaq Computer Corporation 250 University Avenue Palo Alto, California, 94305, USA EMail: mogul@wrl.dec.com Henrik Frystyk Nielsen World Wide Web Consortium MIT Laboratory for Computer Science 545 Technology Square Cambridge, MA 02139, USA Fax: +1 (617) 258 8682 EMail: frystyk@w3.org Larry Masinter Xerox Corporation 3333 Coyote Hill Road Palo Alto, CA 94034, USA EMail: masinter@parc.xerox.com Fielding, et al. Standards Track [Page 162] RFC 2616 HTTP/1.1 June 1999 Paul J. Leach Microsoft Corporation 1 Microsoft Way Redmond, WA 98052, USA EMail: paulle@microsoft.com Tim Berners-Lee Director, World Wide Web Consortium MIT Laboratory for Computer Science 545 Technology Square Cambridge, MA 02139, USA Fax: +1 (617) 258 8682 EMail: timbl@w3.org Fielding, et al. Standards Track [Page 163] RFC 2616 HTTP/1.1 June 1999 19 Appendices 19.1 Internet Media Type message/http and application/http In addition to defining the HTTP/1.1 protocol, this document serves as the specification for the Internet media type "message/http" and "application/http". The message/http type can be used to enclose a single HTTP request or response message, provided that it obeys the MIME restrictions for all "message" types regarding line length and encodings. The application/http type can be used to enclose a pipeline of one or more HTTP request or response messages (not intermixed). The following is to be registered with IANA [17]. Media Type name: message Media subtype name: http Required parameters: none Optional parameters: version, msgtype version: The HTTP-Version number of the enclosed message (e.g., "1.1"). If not present, the version can be determined from the first line of the body. msgtype: The message type -- "request" or "response". If not present, the type can be determined from the first line of the body. Encoding considerations: only "7bit", "8bit", or "binary" are permitted Security considerations: none Media Type name: application Media subtype name: http Required parameters: none Optional parameters: version, msgtype version: The HTTP-Version number of the enclosed messages (e.g., "1.1"). If not present, the version can be determined from the first line of the body. msgtype: The message type -- "request" or "response". If not present, the type can be determined from the first line of the body. Encoding considerations: HTTP messages enclosed by this type are in "binary" format; use of an appropriate Content-Transfer-Encoding is required when transmitted via E-mail. Security considerations: none Fielding, et al. Standards Track [Page 164] RFC 2616 HTTP/1.1 June 1999 19.2 Internet Media Type multipart/byteranges When an HTTP 206 (Partial Content) response message includes the content of multiple ranges (a response to a request for multiple non-overlapping ranges), these are transmitted as a multipart message-body. The media type for this purpose is called "multipart/byteranges". The multipart/byteranges media type includes two or more parts, each with its own Content-Type and Content-Range fields. The required boundary parameter specifies the boundary string used to separate each body-part. Media Type name: multipart Media subtype name: byteranges Required parameters: boundary Optional parameters: none Encoding considerations: only "7bit", "8bit", or "binary" are permitted Security considerations: none For example: HTTP/1.1 206 Partial Content Date: Wed, 15 Nov 1995 06:25:24 GMT Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT Content-type: multipart/byteranges; boundary=THIS_STRING_SEPARATES --THIS_STRING_SEPARATES Content-type: application/pdf Content-range: bytes 500-999/8000 ...the first range... --THIS_STRING_SEPARATES Content-type: application/pdf Content-range: bytes 7000-7999/8000 ...the second range --THIS_STRING_SEPARATES-- Notes: 1) Additional CRLFs may precede the first boundary string in the entity. Fielding, et al. Standards Track [Page 165] RFC 2616 HTTP/1.1 June 1999 2) Although RFC 2046 [40] permits the boundary string to be quoted, some existing implementations handle a quoted boundary string incorrectly. 3) A number of browsers and servers were coded to an early draft of the byteranges specification to use a media type of multipart/x-byteranges, which is almost, but not quite compatible with the version documented in HTTP/1.1. 19.3 Tolerant Applications Although this document specifies the requirements for the generation of HTTP/1.1 messages, not all applications will be correct in their implementation. We therefore recommend that operational applications be tolerant of deviations whenever those deviations can be interpreted unambiguously. Clients SHOULD be tolerant in parsing the Status-Line and servers tolerant when parsing the Request-Line. In particular, they SHOULD accept any amount of SP or HT characters between fields, even though only a single SP is required. The line terminator for message-header fields is the sequence CRLF. However, we recommend that applications, when parsing such headers, recognize a single LF as a line terminator and ignore the leading CR. The character set of an entity-body SHOULD be labeled as the lowest common denominator of the character codes used within that body, with the exception that not labeling the entity is preferred over labeling the entity with the labels US-ASCII or ISO-8859-1. See section 3.7.1 and 3.4.1. Additional rules for requirements on parsing and encoding of dates and other potential problems with date encodings include: - HTTP/1.1 clients and caches SHOULD assume that an RFC-850 date which appears to be more than 50 years in the future is in fact in the past (this helps solve the "year 2000" problem). - An HTTP/1.1 implementation MAY internally represent a parsed Expires date as earlier than the proper value, but MUST NOT internally represent a parsed Expires date as later than the proper value. - All expiration-related calculations MUST be done in GMT. The local time zone MUST NOT influence the calculation or comparison of an age or expiration time. Fielding, et al. Standards Track [Page 166] RFC 2616 HTTP/1.1 June 1999 - If an HTTP header incorrectly carries a date value with a time zone other than GMT, it MUST be converted into GMT using the most conservative possible conversion. 19.4 Differences Between HTTP Entities and RFC 2045 Entities HTTP/1.1 uses many of the constructs defined for Internet Mail (RFC 822 [9]) and the Multipurpose Internet Mail Extensions (MIME [7]) to allow entities to be transmitted in an open variety of representations and with extensible mechanisms. However, RFC 2045 discusses mail, and HTTP has a few features that are different from those described in RFC 2045. These differences were carefully chosen to optimize performance over binary connections, to allow greater freedom in the use of new media types, to make date comparisons easier, and to acknowledge the practice of some early HTTP servers and clients. This appendix describes specific areas where HTTP differs from RFC 2045. Proxies and gateways to strict MIME environments SHOULD be aware of these differences and provide the appropriate conversions where necessary. Proxies and gateways from MIME environments to HTTP also need to be aware of the differences because some conversions might be required. 19.4.1 MIME-Version HTTP is not a MIME-compliant protocol. However, HTTP/1.1 messages MAY include a single MIME-Version general-header field to indicate what version of the MIME protocol was used to construct the message. Use of the MIME-Version header field indicates that the message is in full compliance with the MIME protocol (as defined in RFC 2045[7]). Proxies/gateways are responsible for ensuring full compliance (where possible) when exporting HTTP messages to strict MIME environments. MIME-Version = "MIME-Version" ":" 1*DIGIT "." 1*DIGIT MIME version "1.0" is the default for use in HTTP/1.1. However, HTTP/1.1 message parsing and semantics are defined by this document and not the MIME specification. 19.4.2 Conversion to Canonical Form RFC 2045 [7] requires that an Internet mail entity be converted to canonical form prior to being transferred, as described in section 4 of RFC 2049 [48]. Section 3.7.1 of this document describes the forms allowed for subtypes of the "text" media type when transmitted over HTTP. RFC 2046 requires that content with a type of "text" represent line breaks as CRLF and forbids the use of CR or LF outside of line Fielding, et al. Standards Track [Page 167] RFC 2616 HTTP/1.1 June 1999 break sequences. HTTP allows CRLF, bare CR, and bare LF to indicate a line break within text content when a message is transmitted over HTTP. Where it is possible, a proxy or gateway from HTTP to a strict MIME environment SHOULD translate all line breaks within the text media types described in section 3.7.1 of this document to the RFC 2049 canonical form of CRLF. Note, however, that this might be complicated by the presence of a Content-Encoding and by the fact that HTTP allows the use of some character sets which do not use octets 13 and 10 to represent CR and LF, as is the case for some multi-byte character sets. Implementors should note that conversion will break any cryptographic checksums applied to the original content unless the original content is already in canonical form. Therefore, the canonical form is recommended for any content that uses such checksums in HTTP. 19.4.3 Conversion of Date Formats HTTP/1.1 uses a restricted set of date formats (section 3.3.1) to simplify the process of date comparison. Proxies and gateways from other protocols SHOULD ensure that any Date header field present in a message conforms to one of the HTTP/1.1 formats and rewrite the date if necessary. 19.4.4 Introduction of Content-Encoding RFC 2045 does not include any concept equivalent to HTTP/1.1's Content-Encoding header field. Since this acts as a modifier on the media type, proxies and gateways from HTTP to MIME-compliant protocols MUST either change the value of the Content-Type header field or decode the entity-body before forwarding the message. (Some experimental applications of Content-Type for Internet mail have used a media-type parameter of ";conversions=<content-coding>" to perform a function equivalent to Content-Encoding. However, this parameter is not part of RFC 2045.) 19.4.5 No Content-Transfer-Encoding HTTP does not use the Content-Transfer-Encoding (CTE) field of RFC 2045. Proxies and gateways from MIME-compliant protocols to HTTP MUST remove any non-identity CTE ("quoted-printable" or "base64") encoding prior to delivering the response message to an HTTP client. Proxies and gateways from HTTP to MIME-compliant protocols are responsible for ensuring that the message is in the correct format and encoding for safe transport on that protocol, where "safe Fielding, et al. Standards Track [Page 168] RFC 2616 HTTP/1.1 June 1999 transport" is defined by the limitations of the protocol being used. Such a proxy or gateway SHOULD label the data with an appropriate Content-Transfer-Encoding if doing so will improve the likelihood of safe transport over the destination protocol. 19.4.6 Introduction of Transfer-Encoding HTTP/1.1 introduces the Transfer-Encoding header field (section 14.41). Proxies/gateways MUST remove any transfer-coding prior to forwarding a message via a MIME-compliant protocol. A process for decoding the "chunked" transfer-coding (section 3.6) can be represented in pseudo-code as: length := 0 read chunk-size, chunk-extension (if any) and CRLF while (chunk-size > 0) { read chunk-data and CRLF append chunk-data to entity-body length := length + chunk-size read chunk-size and CRLF } read entity-header while (entity-header not empty) { append entity-header to existing header fields read entity-header } Content-Length := length Remove "chunked" from Transfer-Encoding 19.4.7 MHTML and Line Length Limitations HTTP implementations which share code with MHTML [45] implementations need to be aware of MIME line length limitations. Since HTTP does not have this limitation, HTTP does not fold long lines. MHTML messages being transported by HTTP follow all conventions of MHTML, including line length limitations and folding, canonicalization, etc., since HTTP transports all message-bodies as payload (see section 3.7.2) and does not interpret the content or any MIME header lines that might be contained therein. 19.5 Additional Features RFC 1945 and RFC 2068 document protocol elements used by some existing HTTP implementations, but not consistently and correctly across most HTTP/1.1 applications. Implementors are advised to be aware of these features, but cannot rely upon their presence in, or interoperability with, other HTTP/1.1 applications. Some of these Fielding, et al. Standards Track [Page 169] RFC 2616 HTTP/1.1 June 1999 describe proposed experimental features, and some describe features that experimental deployment found lacking that are now addressed in the base HTTP/1.1 specification. A number of other headers, such as Content-Disposition and Title, from SMTP and MIME are also often implemented (see RFC 2076 [37]). 19.5.1 Content-Disposition The Content-Disposition response-header field has been proposed as a means for the origin server to suggest a default filename if the user requests that the content is saved to a file. This usage is derived from the definition of Content-Disposition in RFC 1806 [35]. content-disposition = "Content-Disposition" ":" disposition-type *( ";" disposition-parm ) disposition-type = "attachment" | disp-extension-token disposition-parm = filename-parm | disp-extension-parm filename-parm = "filename" "=" quoted-string disp-extension-token = token disp-extension-parm = token "=" ( token | quoted-string ) An example is Content-Disposition: attachment; filename="fname.ext" The receiving user agent SHOULD NOT respect any directory path information present in the filename-parm parameter, which is the only parameter believed to apply to HTTP implementations at this time. The filename SHOULD be treated as a terminal component only. If this header is used in a response with the application/octet- stream content-type, the implied suggestion is that the user agent should not display the response, but directly enter a `save response as...' dialog. See section 15.5 for Content-Disposition security issues. 19.6 Compatibility with Previous Versions It is beyond the scope of a protocol specification to mandate compliance with previous versions. HTTP/1.1 was deliberately designed, however, to make supporting previous versions easy. It is worth noting that, at the time of composing this specification (1996), we would expect commercial HTTP/1.1 servers to: - recognize the format of the Request-Line for HTTP/0.9, 1.0, and 1.1 requests; Fielding, et al. Standards Track [Page 170] RFC 2616 HTTP/1.1 June 1999 - understand any valid request in the format of HTTP/0.9, 1.0, or 1.1; - respond appropriately with a message in the same major version used by the client. And we would expect HTTP/1.1 clients to: - recognize the format of the Status-Line for HTTP/1.0 and 1.1 responses; - understand any valid response in the format of HTTP/0.9, 1.0, or 1.1. For most implementations of HTTP/1.0, each connection is established by the client prior to the request and closed by the server after sending the response. Some implementations implement the Keep-Alive version of persistent connections described in section 19.7.1 of RFC 2068 [33]. 19.6.1 Changes from HTTP/1.0 This section summarizes major differences between versions HTTP/1.0 and HTTP/1.1. 19.6.1.1 Changes to Simplify Multi-homed Web Servers and Conserve IP Addresses The requirements that clients and servers support the Host request- header, report an error if the Host request-header (section 14.23) is missing from an HTTP/1.1 request, and accept absolute URIs (section 5.1.2) are among the most important changes defined by this specification. Older HTTP/1.0 clients assumed a one-to-one relationship of IP addresses and servers; there was no other established mechanism for distinguishing the intended server of a request than the IP address to which that request was directed. The changes outlined above will allow the Internet, once older HTTP clients are no longer common, to support multiple Web sites from a single IP address, greatly simplifying large operational Web servers, where allocation of many IP addresses to a single host has created serious problems. The Internet will also be able to recover the IP addresses that have been allocated for the sole purpose of allowing special-purpose domain names to be used in root-level HTTP URLs. Given the rate of growth of the Web, and the number of servers already deployed, it is extremely Fielding, et al. Standards Track [Page 171] RFC 2616 HTTP/1.1 June 1999 important that all implementations of HTTP (including updates to existing HTTP/1.0 applications) correctly implement these requirements: - Both clients and servers MUST support the Host request-header. - A client that sends an HTTP/1.1 request MUST send a Host header. - Servers MUST report a 400 (Bad Request) error if an HTTP/1.1 request does not include a Host request-header. - Servers MUST accept absolute URIs. 19.6.2 Compatibility with HTTP/1.0 Persistent Connections Some clients and servers might wish to be compatible with some previous implementations of persistent connections in HTTP/1.0 clients and servers. Persistent connections in HTTP/1.0 are explicitly negotiated as they are not the default behavior. HTTP/1.0 experimental implementations of persistent connections are faulty, and the new facilities in HTTP/1.1 are designed to rectify these problems. The problem was that some existing 1.0 clients may be sending Keep-Alive to a proxy server that doesn't understand Connection, which would then erroneously forward it to the next inbound server, which would establish the Keep-Alive connection and result in a hung HTTP/1.0 proxy waiting for the close on the response. The result is that HTTP/1.0 clients must be prevented from using Keep-Alive when talking to proxies. However, talking to proxies is the most important use of persistent connections, so that prohibition is clearly unacceptable. Therefore, we need some other mechanism for indicating a persistent connection is desired, which is safe to use even when talking to an old proxy that ignores Connection. Persistent connections are the default for HTTP/1.1 messages; we introduce a new keyword (Connection: close) for declaring non-persistence. See section 14.10. The original HTTP/1.0 form of persistent connections (the Connection: Keep-Alive and Keep-Alive header) is documented in RFC 2068. [33] 19.6.3 Changes from RFC 2068 This specification has been carefully audited to correct and disambiguate key word usage; RFC 2068 had many problems in respect to the conventions laid out in RFC 2119 [34]. Clarified which error code should be used for inbound server failures (e.g. DNS failures). (Section 10.5.5). Fielding, et al. Standards Track [Page 172] RFC 2616 HTTP/1.1 June 1999 CREATE had a race that required an Etag be sent when a resource is first created. (Section 10.2.2). Content-Base was deleted from the specification: it was not implemented widely, and there is no simple, safe way to introduce it without a robust extension mechanism. In addition, it is used in a similar, but not identical fashion in MHTML [45]. Transfer-coding and message lengths all interact in ways that required fixing exactly when chunked encoding is used (to allow for transfer encoding that may not be self delimiting); it was important to straighten out exactly how message lengths are computed. (Sections 3.6, 4.4, 7.2.2, 13.5.2, 14.13, 14.16) A content-coding of "identity" was introduced, to solve problems discovered in caching. (section 3.5) Quality Values of zero should indicate that "I don't want something" to allow clients to refuse a representation. (Section 3.9) The use and interpretation of HTTP version numbers has been clarified by RFC 2145. Require proxies to upgrade requests to highest protocol version they support to deal with problems discovered in HTTP/1.0 implementations (Section 3.1) Charset wildcarding is introduced to avoid explosion of character set names in accept headers. (Section 14.2) A case was missed in the Cache-Control model of HTTP/1.1; s-maxage was introduced to add this missing case. (Sections 13.4, 14.8, 14.9, 14.9.3) The Cache-Control: max-age directive was not properly defined for responses. (Section 14.9.3) There are situations where a server (especially a proxy) does not know the full length of a response but is capable of serving a byterange request. We therefore need a mechanism to allow byteranges with a content-range not indicating the full length of the message. (Section 14.16) Range request responses would become very verbose if all meta-data were always returned; by allowing the server to only send needed headers in a 206 response, this problem can be avoided. (Section 10.2.7, 13.5.3, and 14.27) Fielding, et al. Standards Track [Page 173] RFC 2616 HTTP/1.1 June 1999 Fix problem with unsatisfiable range requests; there are two cases: syntactic problems, and range doesn't exist in the document. The 416 status code was needed to resolve this ambiguity needed to indicate an error for a byte range request that falls outside of the actual contents of a document. (Section 10.4.17, 14.16) Rewrite of message transmission requirements to make it much harder for implementors to get it wrong, as the consequences of errors here can have significant impact on the Internet, and to deal with the following problems: 1. Changing "HTTP/1.1 or later" to "HTTP/1.1", in contexts where this was incorrectly placing a requirement on the behavior of an implementation of a future version of HTTP/1.x 2. Made it clear that user-agents should retry requests, not "clients" in general. 3. Converted requirements for clients to ignore unexpected 100 (Continue) responses, and for proxies to forward 100 responses, into a general requirement for 1xx responses. 4. Modified some TCP-specific language, to make it clearer that non-TCP transports are possible for HTTP. 5. Require that the origin server MUST NOT wait for the request body before it sends a required 100 (Continue) response. 6. Allow, rather than require, a server to omit 100 (Continue) if it has already seen some of the request body. 7. Allow servers to defend against denial-of-service attacks and broken clients. This change adds the Expect header and 417 status code. The message transmission requirements fixes are in sections 8.2, 10.4.18, 8.1.2.2, 13.11, and 14.20. Proxies should be able to add Content-Length when appropriate. (Section 13.5.2) Clean up confusion between 403 and 404 responses. (Section 10.4.4, 10.4.5, and 10.4.11) Warnings could be cached incorrectly, or not updated appropriately. (Section 13.1.2, 13.2.4, 13.5.2, 13.5.3, 14.9.3, and 14.46) Warning also needed to be a general header, as PUT or other methods may have need for it in requests. Fielding, et al. Standards Track [Page 174] RFC 2616 HTTP/1.1 June 1999 Transfer-coding had significant problems, particularly with interactions with chunked encoding. The solution is that transfer- codings become as full fledged as content-codings. This involves adding an IANA registry for transfer-codings (separate from content codings), a new header field (TE) and enabling trailer headers in the future. Transfer encoding is a major performance benefit, so it was worth fixing [39]. TE also solves another, obscure, downward interoperability problem that could have occurred due to interactions between authentication trailers, chunked encoding and HTTP/1.0 clients.(Section 3.6, 3.6.1, and 14.39) The PATCH, LINK, UNLINK methods were defined but not commonly implemented in previous versions of this specification. See RFC 2068 [33]. The Alternates, Content-Version, Derived-From, Link, URI, Public and Content-Base header fields were defined in previous versions of this specification, but not commonly implemented. See RFC 2068 [33]. 20 Index Please see the PostScript version of this RFC for the INDEX. Fielding, et al. Standards Track [Page 175] RFC 2616 HTTP/1.1 June 1999 21. Full Copyright Statement Copyright (C) The Internet Society (1999). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Acknowledgement Funding for the RFC Editor function is currently provided by the Internet Society. Fielding, et al. Standards Track [Page 176] |
Added doc/rfc2617.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 | Network Working Group J. Franks Request for Comments: 2617 Northwestern University Obsoletes: 2069 P. Hallam-Baker Category: Standards Track Verisign, Inc. J. Hostetler AbiSource, Inc. S. Lawrence Agranat Systems, Inc. P. Leach Microsoft Corporation A. Luotonen Netscape Communications Corporation L. Stewart Open Market, Inc. June 1999 HTTP Authentication: Basic and Digest Access Authentication Status of this Memo This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "Internet Official Protocol Standards" (STD 1) for the standardization state and status of this protocol. Distribution of this memo is unlimited. Copyright Notice Copyright (C) The Internet Society (1999). All Rights Reserved. Abstract "HTTP/1.0", includes the specification for a Basic Access Authentication scheme. This scheme is not considered to be a secure method of user authentication (unless used in conjunction with some external secure system such as SSL [5]), as the user name and password are passed over the network as cleartext. This document also provides the specification for HTTP's authentication framework, the original Basic authentication scheme and a scheme based on cryptographic hashes, referred to as "Digest Access Authentication". It is therefore also intended to serve as a replacement for RFC 2069 [6]. Some optional elements specified by RFC 2069 have been removed from this specification due to problems found since its publication; other new elements have been added for compatibility, those new elements have been made optional, but are strongly recommended. Franks, et al. Standards Track [Page 1] RFC 2617 HTTP Authentication June 1999 Like Basic, Digest access authentication verifies that both parties to a communication know a shared secret (a password); unlike Basic, this verification can be done without sending the password in the clear, which is Basic's biggest weakness. As with most other authentication protocols, the greatest sources of risks are usually found not in the core protocol itself but in policies and procedures surrounding its use. Table of Contents 1 Access Authentication................................ 3 1.1 Reliance on the HTTP/1.1 Specification............ 3 1.2 Access Authentication Framework................... 3 2 Basic Authentication Scheme.......................... 5 3 Digest Access Authentication Scheme.................. 6 3.1 Introduction...................................... 6 3.1.1 Purpose......................................... 6 3.1.2 Overall Operation............................... 6 3.1.3 Representation of digest values................. 7 3.1.4 Limitations..................................... 7 3.2 Specification of Digest Headers................... 7 3.2.1 The WWW-Authenticate Response Header............ 8 3.2.2 The Authorization Request Header................ 11 3.2.3 The Authentication-Info Header.................. 15 3.3 Digest Operation.................................. 17 3.4 Security Protocol Negotiation..................... 18 3.5 Example........................................... 18 3.6 Proxy-Authentication and Proxy-Authorization...... 19 4 Security Considerations.............................. 19 4.1 Authentication of Clients using Basic Authentication.................................... 19 4.2 Authentication of Clients using Digest Authentication.................................... 20 4.3 Limited Use Nonce Values.......................... 21 4.4 Comparison of Digest with Basic Authentication.... 22 4.5 Replay Attacks.................................... 22 4.6 Weakness Created by Multiple Authentication Schemes........................................... 23 4.7 Online dictionary attacks......................... 23 4.8 Man in the Middle................................. 24 4.9 Chosen plaintext attacks.......................... 24 4.10 Precomputed dictionary attacks.................... 25 4.11 Batch brute force attacks......................... 25 4.12 Spoofing by Counterfeit Servers................... 25 4.13 Storing passwords................................. 26 4.14 Summary........................................... 26 5 Sample implementation................................ 27 6 Acknowledgments...................................... 31 Franks, et al. Standards Track [Page 2] RFC 2617 HTTP Authentication June 1999 7 References........................................... 31 8 Authors' Addresses................................... 32 9 Full Copyright Statement............................. 34 1 Access Authentication 1.1 Reliance on the HTTP/1.1 Specification This specification is a companion to the HTTP/1.1 specification [2]. It uses the augmented BNF section 2.1 of that document, and relies on both the non-terminals defined in that document and other aspects of the HTTP/1.1 specification. 1.2 Access Authentication Framework HTTP provides a simple challenge-response authentication mechanism that MAY be used by a server to challenge a client request and by a client to provide authentication information. It uses an extensible, case-insensitive token to identify the authentication scheme, followed by a comma-separated list of attribute-value pairs which carry the parameters necessary for achieving authentication via that scheme. auth-scheme = token auth-param = token "=" ( token | quoted-string ) The 401 (Unauthorized) response message is used by an origin server to challenge the authorization of a user agent. This response MUST include a WWW-Authenticate header field containing at least one challenge applicable to the requested resource. The 407 (Proxy Authentication Required) response message is used by a proxy to challenge the authorization of a client and MUST include a Proxy- Authenticate header field containing at least one challenge applicable to the proxy for the requested resource. challenge = auth-scheme 1*SP 1#auth-param Note: User agents will need to take special care in parsing the WWW- Authenticate or Proxy-Authenticate header field value if it contains more than one challenge, or if more than one WWW-Authenticate header field is provided, since the contents of a challenge may itself contain a comma-separated list of authentication parameters. The authentication parameter realm is defined for all authentication schemes: realm = "realm" "=" realm-value realm-value = quoted-string Franks, et al. Standards Track [Page 3] RFC 2617 HTTP Authentication June 1999 The realm directive (case-insensitive) is required for all authentication schemes that issue a challenge. The realm value (case-sensitive), in combination with the canonical root URL (the absoluteURI for the server whose abs_path is empty; see section 5.1.2 of [2]) of the server being accessed, defines the protection space. These realms allow the protected resources on a server to be partitioned into a set of protection spaces, each with its own authentication scheme and/or authorization database. The realm value is a string, generally assigned by the origin server, which may have additional semantics specific to the authentication scheme. Note that there may be multiple challenges with the same auth-scheme but different realms. A user agent that wishes to authenticate itself with an origin server--usually, but not necessarily, after receiving a 401 (Unauthorized)--MAY do so by including an Authorization header field with the request. A client that wishes to authenticate itself with a proxy--usually, but not necessarily, after receiving a 407 (Proxy Authentication Required)--MAY do so by including a Proxy- Authorization header field with the request. Both the Authorization field value and the Proxy-Authorization field value consist of credentials containing the authentication information of the client for the realm of the resource being requested. The user agent MUST choose to use one of the challenges with the strongest auth-scheme it understands and request credentials from the user based upon that challenge. credentials = auth-scheme #auth-param Note that many browsers will only recognize Basic and will require that it be the first auth-scheme presented. Servers should only include Basic if it is minimally acceptable. The protection space determines the domain over which credentials can be automatically applied. If a prior request has been authorized, the same credentials MAY be reused for all other requests within that protection space for a period of time determined by the authentication scheme, parameters, and/or user preference. Unless otherwise defined by the authentication scheme, a single protection space cannot extend outside the scope of its server. If the origin server does not wish to accept the credentials sent with a request, it SHOULD return a 401 (Unauthorized) response. The response MUST include a WWW-Authenticate header field containing at least one (possibly new) challenge applicable to the requested resource. If a proxy does not accept the credentials sent with a request, it SHOULD return a 407 (Proxy Authentication Required). The response MUST include a Proxy-Authenticate header field containing a Franks, et al. Standards Track [Page 4] RFC 2617 HTTP Authentication June 1999 (possibly new) challenge applicable to the proxy for the requested resource. The HTTP protocol does not restrict applications to this simple challenge-response mechanism for access authentication. Additional mechanisms MAY be used, such as encryption at the transport level or via message encapsulation, and with additional header fields specifying authentication information. However, these additional mechanisms are not defined by this specification. Proxies MUST be completely transparent regarding user agent authentication by origin servers. That is, they must forward the WWW-Authenticate and Authorization headers untouched, and follow the rules found in section 14.8 of [2]. Both the Proxy-Authenticate and the Proxy-Authorization header fields are hop-by-hop headers (see section 13.5.1 of [2]). 2 Basic Authentication Scheme The "basic" authentication scheme is based on the model that the client must authenticate itself with a user-ID and a password for each realm. The realm value should be considered an opaque string which can only be compared for equality with other realms on that server. The server will service the request only if it can validate the user-ID and password for the protection space of the Request-URI. There are no optional authentication parameters. For Basic, the framework above is utilized as follows: challenge = "Basic" realm credentials = "Basic" basic-credentials Upon receipt of an unauthorized request for a URI within the protection space, the origin server MAY respond with a challenge like the following: WWW-Authenticate: Basic realm="WallyWorld" where "WallyWorld" is the string assigned by the server to identify the protection space of the Request-URI. A proxy may respond with the same challenge using the Proxy-Authenticate header field. To receive authorization, the client sends the userid and password, separated by a single colon (":") character, within a base64 [7] encoded string in the credentials. basic-credentials = base64-user-pass base64-user-pass = <base64 [4] encoding of user-pass, Franks, et al. Standards Track [Page 5] RFC 2617 HTTP Authentication June 1999 except not limited to 76 char/line> user-pass = userid ":" password userid = *<TEXT excluding ":"> password = *TEXT Userids might be case sensitive. If the user agent wishes to send the userid "Aladdin" and password "open sesame", it would use the following header field: Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== A client SHOULD assume that all paths at or deeper than the depth of the last symbolic element in the path field of the Request-URI also are within the protection space specified by the Basic realm value of the current challenge. A client MAY preemptively send the corresponding Authorization header with requests for resources in that space without receipt of another challenge from the server. Similarly, when a client sends a request to a proxy, it may reuse a userid and password in the Proxy-Authorization header field without receiving another challenge from the proxy server. See section 4 for security considerations associated with Basic authentication. 3 Digest Access Authentication Scheme 3.1 Introduction 3.1.1 Purpose The protocol referred to as "HTTP/1.0" includes the specification for a Basic Access Authentication scheme[1]. That scheme is not considered to be a secure method of user authentication, as the user name and password are passed over the network in an unencrypted form. This section provides the specification for a scheme that does not send the password in cleartext, referred to as "Digest Access Authentication". The Digest Access Authentication scheme is not intended to be a complete answer to the need for security in the World Wide Web. This scheme provides no encryption of message content. The intent is simply to create an access authentication method that avoids the most serious flaws of Basic authentication. 3.1.2 Overall Operation Like Basic Access Authentication, the Digest scheme is based on a simple challenge-response paradigm. The Digest scheme challenges using a nonce value. A valid response contains a checksum (by Franks, et al. Standards Track [Page 6] RFC 2617 HTTP Authentication June 1999 default, the MD5 checksum) of the username, the password, the given nonce value, the HTTP method, and the requested URI. In this way, the password is never sent in the clear. Just as with the Basic scheme, the username and password must be prearranged in some fashion not addressed by this document. 3.1.3 Representation of digest values An optional header allows the server to specify the algorithm used to create the checksum or digest. By default the MD5 algorithm is used and that is the only algorithm described in this document. For the purposes of this document, an MD5 digest of 128 bits is represented as 32 ASCII printable characters. The bits in the 128 bit digest are converted from most significant to least significant bit, four bits at a time to their ASCII presentation as follows. Each four bits is represented by its familiar hexadecimal notation from the characters 0123456789abcdef. That is, binary 0000 gets represented by the character '0', 0001, by '1', and so on up to the representation of 1111 as 'f'. 3.1.4 Limitations The Digest authentication scheme described in this document suffers from many known limitations. It is intended as a replacement for Basic authentication and nothing more. It is a password-based system and (on the server side) suffers from all the same problems of any password system. In particular, no provision is made in this protocol for the initial secure arrangement between user and server to establish the user's password. Users and implementors should be aware that this protocol is not as secure as Kerberos, and not as secure as any client-side private-key scheme. Nevertheless it is better than nothing, better than what is commonly used with telnet and ftp, and better than Basic authentication. 3.2 Specification of Digest Headers The Digest Access Authentication scheme is conceptually similar to the Basic scheme. The formats of the modified WWW-Authenticate header line and the Authorization header line are specified below. In addition, a new header, Authentication-Info, is specified. Franks, et al. Standards Track [Page 7] RFC 2617 HTTP Authentication June 1999 3.2.1 The WWW-Authenticate Response Header If a server receives a request for an access-protected object, and an acceptable Authorization header is not sent, the server responds with a "401 Unauthorized" status code, and a WWW-Authenticate header as per the framework defined above, which for the digest scheme is utilized as follows: challenge = "Digest" digest-challenge digest-challenge = 1#( realm | [ domain ] | nonce | [ opaque ] |[ stale ] | [ algorithm ] | [ qop-options ] | [auth-param] ) domain = "domain" "=" <"> URI ( 1*SP URI ) <"> URI = absoluteURI | abs_path nonce = "nonce" "=" nonce-value nonce-value = quoted-string opaque = "opaque" "=" quoted-string stale = "stale" "=" ( "true" | "false" ) algorithm = "algorithm" "=" ( "MD5" | "MD5-sess" | token ) qop-options = "qop" "=" <"> 1#qop-value <"> qop-value = "auth" | "auth-int" | token The meanings of the values of the directives used above are as follows: realm A string to be displayed to users so they know which username and password to use. This string should contain at least the name of the host performing the authentication and might additionally indicate the collection of users who might have access. An example might be "registered_users@gotham.news.com". domain A quoted, space-separated list of URIs, as specified in RFC XURI [7], that define the protection space. If a URI is an abs_path, it is relative to the canonical root URL (see section 1.2 above) of the server being accessed. An absoluteURI in this list may refer to a different server than the one being accessed. The client can use this list to determine the set of URIs for which the same authentication information may be sent: any URI that has a URI in this list as a prefix (after both have been made absolute) may be assumed to be in the same protection space. If this directive is omitted or its value is empty, the client should assume that the protection space consists of all URIs on the responding server. Franks, et al. Standards Track [Page 8] RFC 2617 HTTP Authentication June 1999 This directive is not meaningful in Proxy-Authenticate headers, for which the protection space is always the entire proxy; if present it should be ignored. nonce A server-specified data string which should be uniquely generated each time a 401 response is made. It is recommended that this string be base64 or hexadecimal data. Specifically, since the string is passed in the header lines as a quoted string, the double-quote character is not allowed. The contents of the nonce are implementation dependent. The quality of the implementation depends on a good choice. A nonce might, for example, be constructed as the base 64 encoding of time-stamp H(time-stamp ":" ETag ":" private-key) where time-stamp is a server-generated time or other non-repeating value, ETag is the value of the HTTP ETag header associated with the requested entity, and private-key is data known only to the server. With a nonce of this form a server would recalculate the hash portion after receiving the client authentication header and reject the request if it did not match the nonce from that header or if the time-stamp value is not recent enough. In this way the server can limit the time of the nonce's validity. The inclusion of the ETag prevents a replay request for an updated version of the resource. (Note: including the IP address of the client in the nonce would appear to offer the server the ability to limit the reuse of the nonce to the same client that originally got it. However, that would break proxy farms, where requests from a single user often go through different proxies in the farm. Also, IP address spoofing is not that hard.) An implementation might choose not to accept a previously used nonce or a previously used digest, in order to protect against a replay attack. Or, an implementation might choose to use one-time nonces or digests for POST or PUT requests and a time-stamp for GET requests. For more details on the issues involved see section 4. of this document. The nonce is opaque to the client. opaque A string of data, specified by the server, which should be returned by the client unchanged in the Authorization header of subsequent requests with URIs in the same protection space. It is recommended that this string be base64 or hexadecimal data. Franks, et al. Standards Track [Page 9] RFC 2617 HTTP Authentication June 1999 stale A flag, indicating that the previous request from the client was rejected because the nonce value was stale. If stale is TRUE (case-insensitive), the client may wish to simply retry the request with a new encrypted response, without reprompting the user for a new username and password. The server should only set stale to TRUE if it receives a request for which the nonce is invalid but with a valid digest for that nonce (indicating that the client knows the correct username/password). If stale is FALSE, or anything other than TRUE, or the stale directive is not present, the username and/or password are invalid, and new values must be obtained. algorithm A string indicating a pair of algorithms used to produce the digest and a checksum. If this is not present it is assumed to be "MD5". If the algorithm is not understood, the challenge should be ignored (and a different one used, if there is more than one). In this document the string obtained by applying the digest algorithm to the data "data" with secret "secret" will be denoted by KD(secret, data), and the string obtained by applying the checksum algorithm to the data "data" will be denoted H(data). The notation unq(X) means the value of the quoted-string X without the surrounding quotes. For the "MD5" and "MD5-sess" algorithms H(data) = MD5(data) and KD(secret, data) = H(concat(secret, ":", data)) i.e., the digest is the MD5 of the secret concatenated with a colon concatenated with the data. The "MD5-sess" algorithm is intended to allow efficient 3rd party authentication servers; for the difference in usage, see the description in section 3.2.2.2. qop-options This directive is optional, but is made so only for backward compatibility with RFC 2069 [6]; it SHOULD be used by all implementations compliant with this version of the Digest scheme. If present, it is a quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection; see the Franks, et al. Standards Track [Page 10] RFC 2617 HTTP Authentication June 1999 descriptions below for calculating the response directive value for the application of this choice. Unrecognized options MUST be ignored. auth-param This directive allows for future extensions. Any unrecognized directive MUST be ignored. 3.2.2 The Authorization Request Header The client is expected to retry the request, passing an Authorization header line, which is defined according to the framework above, utilized as follows. credentials = "Digest" digest-response digest-response = 1#( username | realm | nonce | digest-uri | response | [ algorithm ] | [cnonce] | [opaque] | [message-qop] | [nonce-count] | [auth-param] ) username = "username" "=" username-value username-value = quoted-string digest-uri = "uri" "=" digest-uri-value digest-uri-value = request-uri ; As specified by HTTP/1.1 message-qop = "qop" "=" qop-value cnonce = "cnonce" "=" cnonce-value cnonce-value = nonce-value nonce-count = "nc" "=" nc-value nc-value = 8LHEX response = "response" "=" request-digest request-digest = <"> 32LHEX <"> LHEX = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "a" | "b" | "c" | "d" | "e" | "f" The values of the opaque and algorithm fields must be those supplied in the WWW-Authenticate response header for the entity being requested. response A string of 32 hex digits computed as defined below, which proves that the user knows a password username The user's name in the specified realm. Franks, et al. Standards Track [Page 11] RFC 2617 HTTP Authentication June 1999 digest-uri The URI from Request-URI of the Request-Line; duplicated here because proxies are allowed to change the Request-Line in transit. qop Indicates what "quality of protection" the client has applied to the message. If present, its value MUST be one of the alternatives the server indicated it supports in the WWW-Authenticate header. These values affect the computation of the request-digest. Note that this is a single token, not a quoted list of alternatives as in WWW- Authenticate. This directive is optional in order to preserve backward compatibility with a minimal implementation of RFC 2069 [6], but SHOULD be used if the server indicated that qop is supported by providing a qop directive in the WWW-Authenticate header field. cnonce This MUST be specified if a qop directive is sent (see above), and MUST NOT be specified if the server did not send a qop directive in the WWW-Authenticate header field. The cnonce-value is an opaque quoted string value provided by the client and used by both client and server to avoid chosen plaintext attacks, to provide mutual authentication, and to provide some message integrity protection. See the descriptions below of the calculation of the response- digest and request-digest values. nonce-count This MUST be specified if a qop directive is sent (see above), and MUST NOT be specified if the server did not send a qop directive in the WWW-Authenticate header field. The nc-value is the hexadecimal count of the number of requests (including the current request) that the client has sent with the nonce value in this request. For example, in the first request sent in response to a given nonce value, the client sends "nc=00000001". The purpose of this directive is to allow the server to detect request replays by maintaining its own copy of this count - if the same nc-value is seen twice, then the request is a replay. See the description below of the construction of the request-digest value. auth-param This directive allows for future extensions. Any unrecognized directive MUST be ignored. If a directive or its value is improper, or required directives are missing, the proper response is 400 Bad Request. If the request- digest is invalid, then a login failure should be logged, since repeated login failures from a single client may indicate an attacker attempting to guess passwords. Franks, et al. Standards Track [Page 12] RFC 2617 HTTP Authentication June 1999 The definition of request-digest above indicates the encoding for its value. The following definitions show how the value is computed. 3.2.2.1 Request-Digest If the "qop" value is "auth" or "auth-int": request-digest = <"> < KD ( H(A1), unq(nonce-value) ":" nc-value ":" unq(cnonce-value) ":" unq(qop-value) ":" H(A2) ) <"> If the "qop" directive is not present (this construction is for compatibility with RFC 2069): request-digest = <"> < KD ( H(A1), unq(nonce-value) ":" H(A2) ) > <"> See below for the definitions for A1 and A2. 3.2.2.2 A1 If the "algorithm" directive's value is "MD5" or is unspecified, then A1 is: A1 = unq(username-value) ":" unq(realm-value) ":" passwd where passwd = < user's password > If the "algorithm" directive's value is "MD5-sess", then A1 is calculated only once - on the first request by the client following receipt of a WWW-Authenticate challenge from the server. It uses the server nonce from that challenge, and the first client nonce value to construct A1 as follows: A1 = H( unq(username-value) ":" unq(realm-value) ":" passwd ) ":" unq(nonce-value) ":" unq(cnonce-value) This creates a 'session key' for the authentication of subsequent requests and responses which is different for each "authentication session", thus limiting the amount of material hashed with any one key. (Note: see further discussion of the authentication session in Franks, et al. Standards Track [Page 13] RFC 2617 HTTP Authentication June 1999 section 3.3.) Because the server need only use the hash of the user credentials in order to create the A1 value, this construction could be used in conjunction with a third party authentication service so that the web server would not need the actual password value. The specification of such a protocol is beyond the scope of this specification. 3.2.2.3 A2 If the "qop" directive's value is "auth" or is unspecified, then A2 is: A2 = Method ":" digest-uri-value If the "qop" value is "auth-int", then A2 is: A2 = Method ":" digest-uri-value ":" H(entity-body) 3.2.2.4 Directive values and quoted-string Note that the value of many of the directives, such as "username- value", are defined as a "quoted-string". However, the "unq" notation indicates that surrounding quotation marks are removed in forming the string A1. Thus if the Authorization header includes the fields username="Mufasa", realm=myhost@testrealm.com and the user Mufasa has password "Circle Of Life" then H(A1) would be H(Mufasa:myhost@testrealm.com:Circle Of Life) with no quotation marks in the digested string. No white space is allowed in any of the strings to which the digest function H() is applied unless that white space exists in the quoted strings or entity body whose contents make up the string to be digested. For example, the string A1 illustrated above must be Mufasa:myhost@testrealm.com:Circle Of Life with no white space on either side of the colons, but with the white space between the words used in the password value. Likewise, the other strings digested by H() must not have white space on either side of the colons which delimit their fields unless that white space was in the quoted strings or entity body being digested. Also note that if integrity protection is applied (qop=auth-int), the H(entity-body) is the hash of the entity body, not the message body - it is computed before any transfer encoding is applied by the sender Franks, et al. Standards Track [Page 14] RFC 2617 HTTP Authentication June 1999 and after it has been removed by the recipient. Note that this includes multipart boundaries and embedded headers in each part of any multipart content-type. 3.2.2.5 Various considerations The "Method" value is the HTTP request method as specified in section 5.1.1 of [2]. The "request-uri" value is the Request-URI from the request line as specified in section 5.1.2 of [2]. This may be "*", an "absoluteURL" or an "abs_path" as specified in section 5.1.2 of [2], but it MUST agree with the Request-URI. In particular, it MUST be an "absoluteURL" if the Request-URI is an "absoluteURL". The "cnonce-value" is an optional client-chosen value whose purpose is to foil chosen plaintext attacks. The authenticating server must assure that the resource designated by the "uri" directive is the same as the resource specified in the Request-Line; if they are not, the server SHOULD return a 400 Bad Request error. (Since this may be a symptom of an attack, server implementers may want to consider logging such errors.) The purpose of duplicating information from the request URL in this field is to deal with the possibility that an intermediate proxy may alter the client's Request-Line. This altered (but presumably semantically equivalent) request would not result in the same digest as that calculated by the client. Implementers should be aware of how authenticated transactions interact with shared caches. The HTTP/1.1 protocol specifies that when a shared cache (see section 13.7 of [2]) has received a request containing an Authorization header and a response from relaying that request, it MUST NOT return that response as a reply to any other request, unless one of two Cache-Control (see section 14.9 of [2]) directives was present in the response. If the original response included the "must-revalidate" Cache-Control directive, the cache MAY use the entity of that response in replying to a subsequent request, but MUST first revalidate it with the origin server, using the request headers from the new request to allow the origin server to authenticate the new request. Alternatively, if the original response included the "public" Cache-Control directive, the response entity MAY be returned in reply to any subsequent request. 3.2.3 The Authentication-Info Header The Authentication-Info header is used by the server to communicate some information regarding the successful authentication in the response. Franks, et al. Standards Track [Page 15] RFC 2617 HTTP Authentication June 1999 AuthenticationInfo = "Authentication-Info" ":" auth-info auth-info = 1#(nextnonce | [ message-qop ] | [ response-auth ] | [ cnonce ] | [nonce-count] ) nextnonce = "nextnonce" "=" nonce-value response-auth = "rspauth" "=" response-digest response-digest = <"> *LHEX <"> The value of the nextnonce directive is the nonce the server wishes the client to use for a future authentication response. The server may send the Authentication-Info header with a nextnonce field as a means of implementing one-time or otherwise changing nonces. If the nextnonce field is present the client SHOULD use it when constructing the Authorization header for its next request. Failure of the client to do so may result in a request to re-authenticate from the server with the "stale=TRUE". Server implementations should carefully consider the performance implications of the use of this mechanism; pipelined requests will not be possible if every response includes a nextnonce directive that must be used on the next request received by the server. Consideration should be given to the performance vs. security tradeoffs of allowing an old nonce value to be used for a limited time to permit request pipelining. Use of the nonce-count can retain most of the security advantages of a new server nonce without the deleterious affects on pipelining. message-qop Indicates the "quality of protection" options applied to the response by the server. The value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. The server SHOULD use the same value for the message- qop directive in the response as was sent by the client in the corresponding request. The optional response digest in the "response-auth" directive supports mutual authentication -- the server proves that it knows the user's secret, and with qop=auth-int also provides limited integrity protection of the response. The "response-digest" value is calculated as for the "request-digest" in the Authorization header, except that if "qop=auth" or is not specified in the Authorization header for the request, A2 is A2 = ":" digest-uri-value and if "qop=auth-int", then A2 is A2 = ":" digest-uri-value ":" H(entity-body) Franks, et al. Standards Track [Page 16] RFC 2617 HTTP Authentication June 1999 where "digest-uri-value" is the value of the "uri" directive on the Authorization header in the request. The "cnonce-value" and "nc- value" MUST be the ones for the client request to which this message is the response. The "response-auth", "cnonce", and "nonce-count" directives MUST BE present if "qop=auth" or "qop=auth-int" is specified. The Authentication-Info header is allowed in the trailer of an HTTP message transferred via chunked transfer-coding. 3.3 Digest Operation Upon receiving the Authorization header, the server may check its validity by looking up the password that corresponds to the submitted username. Then, the server must perform the same digest operation (e.g., MD5) performed by the client, and compare the result to the given request-digest value. Note that the HTTP server does not actually need to know the user's cleartext password. As long as H(A1) is available to the server, the validity of an Authorization header may be verified. The client response to a WWW-Authenticate challenge for a protection space starts an authentication session with that protection space. The authentication session lasts until the client receives another WWW-Authenticate challenge from any server in the protection space. A client should remember the username, password, nonce, nonce count and opaque values associated with an authentication session to use to construct the Authorization header in future requests within that protection space. The Authorization header may be included preemptively; doing so improves server efficiency and avoids extra round trips for authentication challenges. The server may choose to accept the old Authorization header information, even though the nonce value included might not be fresh. Alternatively, the server may return a 401 response with a new nonce value, causing the client to retry the request; by specifying stale=TRUE with this response, the server tells the client to retry with the new nonce, but without prompting for a new username and password. Because the client is required to return the value of the opaque directive given to it by the server for the duration of a session, the opaque data may be used to transport authentication session state information. (Note that any such use can also be accomplished more easily and safely by including the state in the nonce.) For example, a server could be responsible for authenticating content that actually sits on another server. It would achieve this by having the first 401 response include a domain directive whose value includes a URI on the second server, and an opaque directive whose value Franks, et al. Standards Track [Page 17] RFC 2617 HTTP Authentication June 1999 contains the state information. The client will retry the request, at which time the server might respond with a 301/302 redirection, pointing to the URI on the second server. The client will follow the redirection, and pass an Authorization header , including the <opaque> data. As with the basic scheme, proxies must be completely transparent in the Digest access authentication scheme. That is, they must forward the WWW-Authenticate, Authentication-Info and Authorization headers untouched. If a proxy wants to authenticate a client before a request is forwarded to the server, it can be done using the Proxy- Authenticate and Proxy-Authorization headers described in section 3.6 below. 3.4 Security Protocol Negotiation It is useful for a server to be able to know which security schemes a client is capable of handling. It is possible that a server may want to require Digest as its authentication method, even if the server does not know that the client supports it. A client is encouraged to fail gracefully if the server specifies only authentication schemes it cannot handle. 3.5 Example The following example assumes that an access-protected document is being requested from the server via a GET request. The URI of the document is "http://www.nowhere.org/dir/index.html". Both client and server know that the username for this document is "Mufasa", and the password is "Circle Of Life" (with one space between each of the three words). The first time the client requests the document, no Authorization header is sent, so the server responds with: HTTP/1.1 401 Unauthorized WWW-Authenticate: Digest realm="testrealm@host.com", qop="auth,auth-int", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="5ccc069c403ebaf9f0171e9517f40e41" The client may prompt the user for the username and password, after which it will respond with a new request, including the following Authorization header: Franks, et al. Standards Track [Page 18] RFC 2617 HTTP Authentication June 1999 Authorization: Digest username="Mufasa", realm="testrealm@host.com", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", uri="/dir/index.html", qop=auth, nc=00000001, cnonce="0a4f113b", response="6629fae49393a05397450978507c4ef1", opaque="5ccc069c403ebaf9f0171e9517f40e41" 3.6 Proxy-Authentication and Proxy-Authorization The digest authentication scheme may also be used for authenticating users to proxies, proxies to proxies, or proxies to origin servers by use of the Proxy-Authenticate and Proxy-Authorization headers. These headers are instances of the Proxy-Authenticate and Proxy- Authorization headers specified in sections 10.33 and 10.34 of the HTTP/1.1 specification [2] and their behavior is subject to restrictions described there. The transactions for proxy authentication are very similar to those already described. Upon receiving a request which requires authentication, the proxy/server must issue the "407 Proxy Authentication Required" response with a "Proxy-Authenticate" header. The digest-challenge used in the Proxy-Authenticate header is the same as that for the WWW- Authenticate header as defined above in section 3.2.1. The client/proxy must then re-issue the request with a Proxy- Authorization header, with directives as specified for the Authorization header in section 3.2.2 above. On subsequent responses, the server sends Proxy-Authentication-Info with directives the same as those for the Authentication-Info header field. Note that in principle a client could be asked to authenticate itself to both a proxy and an end-server, but never in the same response. 4 Security Considerations 4.1 Authentication of Clients using Basic Authentication The Basic authentication scheme is not a secure method of user authentication, nor does it in any way protect the entity, which is transmitted in cleartext across the physical network used as the carrier. HTTP does not prevent additional authentication schemes and encryption mechanisms from being employed to increase security or the addition of enhancements (such as schemes to use one-time passwords) to Basic authentication. Franks, et al. Standards Track [Page 19] RFC 2617 HTTP Authentication June 1999 The most serious flaw in Basic authentication is that it results in the essentially cleartext transmission of the user's password over the physical network. It is this problem which Digest Authentication attempts to address. Because Basic authentication involves the cleartext transmission of passwords it SHOULD NOT be used (without enhancements) to protect sensitive or valuable information. A common use of Basic authentication is for identification purposes -- requiring the user to provide a user name and password as a means of identification, for example, for purposes of gathering accurate usage statistics on a server. When used in this way it is tempting to think that there is no danger in its use if illicit access to the protected documents is not a major concern. This is only correct if the server issues both user name and password to the users and in particular does not allow the user to choose his or her own password. The danger arises because naive users frequently reuse a single password to avoid the task of maintaining multiple passwords. If a server permits users to select their own passwords, then the threat is not only unauthorized access to documents on the server but also unauthorized access to any other resources on other systems that the user protects with the same password. Furthermore, in the server's password database, many of the passwords may also be users' passwords for other sites. The owner or administrator of such a system could therefore expose all users of the system to the risk of unauthorized access to all those sites if this information is not maintained in a secure fashion. Basic Authentication is also vulnerable to spoofing by counterfeit servers. If a user can be led to believe that he is connecting to a host containing information protected by Basic authentication when, in fact, he is connecting to a hostile server or gateway, then the attacker can request a password, store it for later use, and feign an error. This type of attack is not possible with Digest Authentication. Server implementers SHOULD guard against the possibility of this sort of counterfeiting by gateways or CGI scripts. In particular it is very dangerous for a server to simply turn over a connection to a gateway. That gateway can then use the persistent connection mechanism to engage in multiple transactions with the client while impersonating the original server in a way that is not detectable by the client. 4.2 Authentication of Clients using Digest Authentication Digest Authentication does not provide a strong authentication mechanism, when compared to public key based mechanisms, for example. Franks, et al. Standards Track [Page 20] RFC 2617 HTTP Authentication June 1999 However, it is significantly stronger than (e.g.) CRAM-MD5, which has been proposed for use with LDAP [10], POP and IMAP (see RFC 2195 [9]). It is intended to replace the much weaker and even more dangerous Basic mechanism. Digest Authentication offers no confidentiality protection beyond protecting the actual password. All of the rest of the request and response are available to an eavesdropper. Digest Authentication offers only limited integrity protection for the messages in either direction. If qop=auth-int mechanism is used, those parts of the message used in the calculation of the WWW- Authenticate and Authorization header field response directive values (see section 3.2 above) are protected. Most header fields and their values could be modified as a part of a man-in-the-middle attack. Many needs for secure HTTP transactions cannot be met by Digest Authentication. For those needs TLS or SHTTP are more appropriate protocols. In particular Digest authentication cannot be used for any transaction requiring confidentiality protection. Nevertheless many functions remain for which Digest authentication is both useful and appropriate. Any service in present use that uses Basic should be switched to Digest as soon as practical. 4.3 Limited Use Nonce Values The Digest scheme uses a server-specified nonce to seed the generation of the request-digest value (as specified in section 3.2.2.1 above). As shown in the example nonce in section 3.2.1, the server is free to construct the nonce such that it may only be used from a particular client, for a particular resource, for a limited period of time or number of uses, or any other restrictions. Doing so strengthens the protection provided against, for example, replay attacks (see 4.5). However, it should be noted that the method chosen for generating and checking the nonce also has performance and resource implications. For example, a server may choose to allow each nonce value to be used only once by maintaining a record of whether or not each recently issued nonce has been returned and sending a next-nonce directive in the Authentication-Info header field of every response. This protects against even an immediate replay attack, but has a high cost checking nonce values, and perhaps more important will cause authentication failures for any pipelined requests (presumably returning a stale nonce indication). Similarly, incorporating a request-specific element such as the Etag value for a resource limits the use of the nonce to that version of the resource and also defeats pipelining. Thus it may be useful to do so for methods with side effects but have unacceptable performance for those that do not. Franks, et al. Standards Track [Page 21] RFC 2617 HTTP Authentication June 1999 4.4 Comparison of Digest with Basic Authentication Both Digest and Basic Authentication are very much on the weak end of the security strength spectrum. But a comparison between the two points out the utility, even necessity, of replacing Basic by Digest. The greatest threat to the type of transactions for which these protocols are used is network snooping. This kind of transaction might involve, for example, online access to a database whose use is restricted to paying subscribers. With Basic authentication an eavesdropper can obtain the password of the user. This not only permits him to access anything in the database, but, often worse, will permit access to anything else the user protects with the same password. By contrast, with Digest Authentication the eavesdropper only gets access to the transaction in question and not to the user's password. The information gained by the eavesdropper would permit a replay attack, but only with a request for the same document, and even that may be limited by the server's choice of nonce. 4.5 Replay Attacks A replay attack against Digest authentication would usually be pointless for a simple GET request since an eavesdropper would already have seen the only document he could obtain with a replay. This is because the URI of the requested document is digested in the client request and the server will only deliver that document. By contrast under Basic Authentication once the eavesdropper has the user's password, any document protected by that password is open to him. Thus, for some purposes, it is necessary to protect against replay attacks. A good Digest implementation can do this in various ways. The server created "nonce" value is implementation dependent, but if it contains a digest of the client IP, a time-stamp, the resource ETag, and a private server key (as recommended above) then a replay attack is not simple. An attacker must convince the server that the request is coming from a false IP address and must cause the server to deliver the document to an IP address different from the address to which it believes it is sending the document. An attack can only succeed in the period before the time-stamp expires. Digesting the client IP and time-stamp in the nonce permits an implementation which does not maintain state between transactions. For applications where no possibility of replay attack can be tolerated the server can use one-time nonce values which will not be honored for a second use. This requires the overhead of the server Franks, et al. Standards Track [Page 22] RFC 2617 HTTP Authentication June 1999 remembering which nonce values have been used until the nonce time- stamp (and hence the digest built with it) has expired, but it effectively protects against replay attacks. An implementation must give special attention to the possibility of replay attacks with POST and PUT requests. Unless the server employs one-time or otherwise limited-use nonces and/or insists on the use of the integrity protection of qop=auth-int, an attacker could replay valid credentials from a successful request with counterfeit form data or other message body. Even with the use of integrity protection most metadata in header fields is not protected. Proper nonce generation and checking provides some protection against replay of previously used valid credentials, but see 4.8. 4.6 Weakness Created by Multiple Authentication Schemes An HTTP/1.1 server may return multiple challenges with a 401 (Authenticate) response, and each challenge may use a different auth-scheme. A user agent MUST choose to use the strongest auth- scheme it understands and request credentials from the user based upon that challenge. Note that many browsers will only recognize Basic and will require that it be the first auth-scheme presented. Servers should only include Basic if it is minimally acceptable. When the server offers choices of authentication schemes using the WWW-Authenticate header, the strength of the resulting authentication is only as good as that of the of the weakest of the authentication schemes. See section 4.8 below for discussion of particular attack scenarios that exploit multiple authentication schemes. 4.7 Online dictionary attacks If the attacker can eavesdrop, then it can test any overheard nonce/response pairs against a list of common words. Such a list is usually much smaller than the total number of possible passwords. The cost of computing the response for each password on the list is paid once for each challenge. The server can mitigate this attack by not allowing users to select passwords that are in a dictionary. Franks, et al. Standards Track [Page 23] RFC 2617 HTTP Authentication June 1999 4.8 Man in the Middle Both Basic and Digest authentication are vulnerable to "man in the middle" (MITM) attacks, for example, from a hostile or compromised proxy. Clearly, this would present all the problems of eavesdropping. But it also offers some additional opportunities to the attacker. A possible man-in-the-middle attack would be to add a weak authentication scheme to the set of choices, hoping that the client will use one that exposes the user's credentials (e.g. password). For this reason, the client should always use the strongest scheme that it understands from the choices offered. An even better MITM attack would be to remove all offered choices, replacing them with a challenge that requests only Basic authentication, then uses the cleartext credentials from the Basic authentication to authenticate to the origin server using the stronger scheme it requested. A particularly insidious way to mount such a MITM attack would be to offer a "free" proxy caching service to gullible users. User agents should consider measures such as presenting a visual indication at the time of the credentials request of what authentication scheme is to be used, or remembering the strongest authentication scheme ever requested by a server and produce a warning message before using a weaker one. It might also be a good idea for the user agent to be configured to demand Digest authentication in general, or from specific sites. Or, a hostile proxy might spoof the client into making a request the attacker wanted rather than one the client wanted. Of course, this is still much harder than a comparable attack against Basic Authentication. 4.9 Chosen plaintext attacks With Digest authentication, a MITM or a malicious server can arbitrarily choose the nonce that the client will use to compute the response. This is called a "chosen plaintext" attack. The ability to choose the nonce is known to make cryptanalysis much easier [8]. However, no way to analyze the MD5 one-way function used by Digest using chosen plaintext is currently known. The countermeasure against this attack is for clients to be configured to require the use of the optional "cnonce" directive; this allows the client to vary the input to the hash in a way not chosen by the attacker. Franks, et al. Standards Track [Page 24] RFC 2617 HTTP Authentication June 1999 4.10 Precomputed dictionary attacks With Digest authentication, if the attacker can execute a chosen plaintext attack, the attacker can precompute the response for many common words to a nonce of its choice, and store a dictionary of (response, password) pairs. Such precomputation can often be done in parallel on many machines. It can then use the chosen plaintext attack to acquire a response corresponding to that challenge, and just look up the password in the dictionary. Even if most passwords are not in the dictionary, some might be. Since the attacker gets to pick the challenge, the cost of computing the response for each password on the list can be amortized over finding many passwords. A dictionary with 100 million password/response pairs would take about 3.2 gigabytes of disk storage. The countermeasure against this attack is to for clients to be configured to require the use of the optional "cnonce" directive. 4.11 Batch brute force attacks With Digest authentication, a MITM can execute a chosen plaintext attack, and can gather responses from many users to the same nonce. It can then find all the passwords within any subset of password space that would generate one of the nonce/response pairs in a single pass over that space. It also reduces the time to find the first password by a factor equal to the number of nonce/response pairs gathered. This search of the password space can often be done in parallel on many machines, and even a single machine can search large subsets of the password space very quickly -- reports exist of searching all passwords with six or fewer letters in a few hours. The countermeasure against this attack is to for clients to be configured to require the use of the optional "cnonce" directive. 4.12 Spoofing by Counterfeit Servers Basic Authentication is vulnerable to spoofing by counterfeit servers. If a user can be led to believe that she is connecting to a host containing information protected by a password she knows, when in fact she is connecting to a hostile server, then the hostile server can request a password, store it away for later use, and feign an error. This type of attack is more difficult with Digest Authentication -- but the client must know to demand that Digest authentication be used, perhaps using some of the techniques described above to counter "man-in-the-middle" attacks. Again, the user can be helped in detecting this attack by a visual indication of the authentication mechanism in use with appropriate guidance in interpreting the implications of each scheme. Franks, et al. Standards Track [Page 25] RFC 2617 HTTP Authentication June 1999 4.13 Storing passwords Digest authentication requires that the authenticating agent (usually the server) store some data derived from the user's name and password in a "password file" associated with a given realm. Normally this might contain pairs consisting of username and H(A1), where H(A1) is the digested value of the username, realm, and password as described above. The security implications of this are that if this password file is compromised, then an attacker gains immediate access to documents on the server using this realm. Unlike, say a standard UNIX password file, this information need not be decrypted in order to access documents in the server realm associated with this file. On the other hand, decryption, or more likely a brute force attack, would be necessary to obtain the user's password. This is the reason that the realm is part of the digested data stored in the password file. It means that if one Digest authentication password file is compromised, it does not automatically compromise others with the same username and password (though it does expose them to brute force attack). There are two important security consequences of this. First the password file must be protected as if it contained unencrypted passwords, because for the purpose of accessing documents in its realm, it effectively does. A second consequence of this is that the realm string should be unique among all realms which any single user is likely to use. In particular a realm string should include the name of the host doing the authentication. The inability of the client to authenticate the server is a weakness of Digest Authentication. 4.14 Summary By modern cryptographic standards Digest Authentication is weak. But for a large range of purposes it is valuable as a replacement for Basic Authentication. It remedies some, but not all, weaknesses of Basic Authentication. Its strength may vary depending on the implementation. In particular the structure of the nonce (which is dependent on the server implementation) may affect the ease of mounting a replay attack. A range of server options is appropriate since, for example, some implementations may be willing to accept the server overhead of one-time nonces or digests to eliminate the possibility of replay. Others may satisfied with a nonce like the one recommended above restricted to a single IP address and a single ETag or with a limited lifetime. Franks, et al. Standards Track [Page 26] RFC 2617 HTTP Authentication June 1999 The bottom line is that *any* compliant implementation will be relatively weak by cryptographic standards, but *any* compliant implementation will be far superior to Basic Authentication. 5 Sample implementation The following code implements the calculations of H(A1), H(A2), request-digest and response-digest, and a test program which computes the values used in the example of section 3.5. It uses the MD5 implementation from RFC 1321. File "digcalc.h": #define HASHLEN 16 typedef char HASH[HASHLEN]; #define HASHHEXLEN 32 typedef char HASHHEX[HASHHEXLEN+1]; #define IN #define OUT /* calculate H(A1) as per HTTP Digest spec */ void DigestCalcHA1( IN char * pszAlg, IN char * pszUserName, IN char * pszRealm, IN char * pszPassword, IN char * pszNonce, IN char * pszCNonce, OUT HASHHEX SessionKey ); /* calculate request-digest/response-digest as per HTTP Digest spec */ void DigestCalcResponse( IN HASHHEX HA1, /* H(A1) */ IN char * pszNonce, /* nonce from server */ IN char * pszNonceCount, /* 8 hex digits */ IN char * pszCNonce, /* client nonce */ IN char * pszQop, /* qop-value: "", "auth", "auth-int" */ IN char * pszMethod, /* method from the request */ IN char * pszDigestUri, /* requested URL */ IN HASHHEX HEntity, /* H(entity body) if qop="auth-int" */ OUT HASHHEX Response /* request-digest or response-digest */ ); File "digcalc.c": #include <global.h> #include <md5.h> Franks, et al. Standards Track [Page 27] RFC 2617 HTTP Authentication June 1999 #include <string.h> #include "digcalc.h" void CvtHex( IN HASH Bin, OUT HASHHEX Hex ) { unsigned short i; unsigned char j; for (i = 0; i < HASHLEN; i++) { j = (Bin[i] >> 4) & 0xf; if (j <= 9) Hex[i*2] = (j + '0'); else Hex[i*2] = (j + 'a' - 10); j = Bin[i] & 0xf; if (j <= 9) Hex[i*2+1] = (j + '0'); else Hex[i*2+1] = (j + 'a' - 10); }; Hex[HASHHEXLEN] = '\0'; }; /* calculate H(A1) as per spec */ void DigestCalcHA1( IN char * pszAlg, IN char * pszUserName, IN char * pszRealm, IN char * pszPassword, IN char * pszNonce, IN char * pszCNonce, OUT HASHHEX SessionKey ) { MD5_CTX Md5Ctx; HASH HA1; MD5Init(&Md5Ctx); MD5Update(&Md5Ctx, pszUserName, strlen(pszUserName)); MD5Update(&Md5Ctx, ":", 1); MD5Update(&Md5Ctx, pszRealm, strlen(pszRealm)); MD5Update(&Md5Ctx, ":", 1); MD5Update(&Md5Ctx, pszPassword, strlen(pszPassword)); MD5Final(HA1, &Md5Ctx); if (stricmp(pszAlg, "md5-sess") == 0) { Franks, et al. Standards Track [Page 28] RFC 2617 HTTP Authentication June 1999 MD5Init(&Md5Ctx); MD5Update(&Md5Ctx, HA1, HASHLEN); MD5Update(&Md5Ctx, ":", 1); MD5Update(&Md5Ctx, pszNonce, strlen(pszNonce)); MD5Update(&Md5Ctx, ":", 1); MD5Update(&Md5Ctx, pszCNonce, strlen(pszCNonce)); MD5Final(HA1, &Md5Ctx); }; CvtHex(HA1, SessionKey); }; /* calculate request-digest/response-digest as per HTTP Digest spec */ void DigestCalcResponse( IN HASHHEX HA1, /* H(A1) */ IN char * pszNonce, /* nonce from server */ IN char * pszNonceCount, /* 8 hex digits */ IN char * pszCNonce, /* client nonce */ IN char * pszQop, /* qop-value: "", "auth", "auth-int" */ IN char * pszMethod, /* method from the request */ IN char * pszDigestUri, /* requested URL */ IN HASHHEX HEntity, /* H(entity body) if qop="auth-int" */ OUT HASHHEX Response /* request-digest or response-digest */ ) { MD5_CTX Md5Ctx; HASH HA2; HASH RespHash; HASHHEX HA2Hex; // calculate H(A2) MD5Init(&Md5Ctx); MD5Update(&Md5Ctx, pszMethod, strlen(pszMethod)); MD5Update(&Md5Ctx, ":", 1); MD5Update(&Md5Ctx, pszDigestUri, strlen(pszDigestUri)); if (stricmp(pszQop, "auth-int") == 0) { MD5Update(&Md5Ctx, ":", 1); MD5Update(&Md5Ctx, HEntity, HASHHEXLEN); }; MD5Final(HA2, &Md5Ctx); CvtHex(HA2, HA2Hex); // calculate response MD5Init(&Md5Ctx); MD5Update(&Md5Ctx, HA1, HASHHEXLEN); MD5Update(&Md5Ctx, ":", 1); MD5Update(&Md5Ctx, pszNonce, strlen(pszNonce)); MD5Update(&Md5Ctx, ":", 1); if (*pszQop) { Franks, et al. Standards Track [Page 29] RFC 2617 HTTP Authentication June 1999 MD5Update(&Md5Ctx, pszNonceCount, strlen(pszNonceCount)); MD5Update(&Md5Ctx, ":", 1); MD5Update(&Md5Ctx, pszCNonce, strlen(pszCNonce)); MD5Update(&Md5Ctx, ":", 1); MD5Update(&Md5Ctx, pszQop, strlen(pszQop)); MD5Update(&Md5Ctx, ":", 1); }; MD5Update(&Md5Ctx, HA2Hex, HASHHEXLEN); MD5Final(RespHash, &Md5Ctx); CvtHex(RespHash, Response); }; File "digtest.c": #include <stdio.h> #include "digcalc.h" void main(int argc, char ** argv) { char * pszNonce = "dcd98b7102dd2f0e8b11d0f600bfb0c093"; char * pszCNonce = "0a4f113b"; char * pszUser = "Mufasa"; char * pszRealm = "testrealm@host.com"; char * pszPass = "Circle Of Life"; char * pszAlg = "md5"; char szNonceCount[9] = "00000001"; char * pszMethod = "GET"; char * pszQop = "auth"; char * pszURI = "/dir/index.html"; HASHHEX HA1; HASHHEX HA2 = ""; HASHHEX Response; DigestCalcHA1(pszAlg, pszUser, pszRealm, pszPass, pszNonce, pszCNonce, HA1); DigestCalcResponse(HA1, pszNonce, szNonceCount, pszCNonce, pszQop, pszMethod, pszURI, HA2, Response); printf("Response = %s\n", Response); }; Franks, et al. Standards Track [Page 30] RFC 2617 HTTP Authentication June 1999 6 Acknowledgments Eric W. Sink, of AbiSource, Inc., was one of the original authors before the specification underwent substantial revision. In addition to the authors, valuable discussion instrumental in creating this document has come from Peter J. Churchyard, Ned Freed, and David M. Kristol. Jim Gettys and Larry Masinter edited this document for update. 7 References [1] Berners-Lee, T., Fielding, R. and H. Frystyk, "Hypertext Transfer Protocol -- HTTP/1.0", RFC 1945, May 1996. [2] Fielding, R., Gettys, J., Mogul, J., Frysyk, H., Masinter, L., Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. [3] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, April 1992. [4] Freed, N. and N. Borenstein. "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies", RFC 2045, November 1996. [5] Dierks, T. and C. Allen "The TLS Protocol, Version 1.0", RFC 2246, January 1999. [6] Franks, J., Hallam-Baker, P., Hostetler, J., Leach, P., Luotonen, A., Sink, E. and L. Stewart, "An Extension to HTTP : Digest Access Authentication", RFC 2069, January 1997. [7] Berners Lee, T, Fielding, R. and L. Masinter, "Uniform Resource Identifiers (URI): Generic Syntax", RFC 2396, August 1998. [8] Kaliski, B.,Robshaw, M., "Message Authentication with MD5", CryptoBytes, Sping 1995, RSA Inc, (http://www.rsa.com/rsalabs/pubs/cryptobytes/spring95/md5.htm) [9] Klensin, J., Catoe, R. and P. Krumviede, "IMAP/POP AUTHorize Extension for Simple Challenge/Response", RFC 2195, September 1997. [10] Morgan, B., Alvestrand, H., Hodges, J., Wahl, M., "Authentication Methods for LDAP", Work in Progress. Franks, et al. Standards Track [Page 31] RFC 2617 HTTP Authentication June 1999 8 Authors' Addresses John Franks Professor of Mathematics Department of Mathematics Northwestern University Evanston, IL 60208-2730, USA EMail: john@math.nwu.edu Phillip M. Hallam-Baker Principal Consultant Verisign Inc. 301 Edgewater Place Suite 210 Wakefield MA 01880, USA EMail: pbaker@verisign.com Jeffery L. Hostetler Software Craftsman AbiSource, Inc. 6 Dunlap Court Savoy, IL 61874 EMail: jeff@AbiSource.com Scott D. Lawrence Agranat Systems, Inc. 5 Clocktower Place, Suite 400 Maynard, MA 01754, USA EMail: lawrence@agranat.com Paul J. Leach Microsoft Corporation 1 Microsoft Way Redmond, WA 98052, USA EMail: paulle@microsoft.com Franks, et al. Standards Track [Page 32] RFC 2617 HTTP Authentication June 1999 Ari Luotonen Member of Technical Staff Netscape Communications Corporation 501 East Middlefield Road Mountain View, CA 94043, USA Lawrence C. Stewart Open Market, Inc. 215 First Street Cambridge, MA 02142, USA EMail: stewart@OpenMarket.com Franks, et al. Standards Track [Page 33] RFC 2617 HTTP Authentication June 1999 9. Full Copyright Statement Copyright (C) The Internet Society (1999). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Acknowledgement Funding for the RFC Editor function is currently provided by the Internet Society. Franks, et al. Standards Track [Page 34] |
Added doc/rfc2818.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 | Network Working Group E. Rescorla Request for Comments: 2818 RTFM, Inc. Category: Informational May 2000 HTTP Over TLS Status of this Memo This memo provides information for the Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited. Copyright Notice Copyright (C) The Internet Society (2000). All Rights Reserved. Abstract This memo describes how to use TLS to secure HTTP connections over the Internet. Current practice is to layer HTTP over SSL (the predecessor to TLS), distinguishing secured traffic from insecure traffic by the use of a different server port. This document documents that practice using TLS. A companion document describes a method for using HTTP/TLS over the same port as normal HTTP [RFC2817]. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . 2 1.1. Requirements Terminology . . . . . . . . . . . . . . . 2 2. HTTP Over TLS . . . . . . . . . . . . . . . . . . . . . . 2 2.1. Connection Initiation . . . . . . . . . . . . . . . . . 2 2.2. Connection Closure . . . . . . . . . . . . . . . . . . 2 2.2.1. Client Behavior . . . . . . . . . . . . . . . . . . . 3 2.2.2. Server Behavior . . . . . . . . . . . . . . . . . . . 3 2.3. Port Number . . . . . . . . . . . . . . . . . . . . . . 4 2.4. URI Format . . . . . . . . . . . . . . . . . . . . . . 4 3. Endpoint Identification . . . . . . . . . . . . . . . . . 4 3.1. Server Identity . . . . . . . . . . . . . . . . . . . . 4 3.2. Client Identity . . . . . . . . . . . . . . . . . . . . 5 References . . . . . . . . . . . . . . . . . . . . . . . . . 6 Security Considerations . . . . . . . . . . . . . . . . . . 6 Author's Address . . . . . . . . . . . . . . . . . . . . . . 6 Full Copyright Statement . . . . . . . . . . . . . . . . . . 7 Rescorla Informational [Page 1] RFC 2818 HTTP Over TLS May 2000 1. Introduction HTTP [RFC2616] was originally used in the clear on the Internet. However, increased use of HTTP for sensitive applications has required security measures. SSL, and its successor TLS [RFC2246] were designed to provide channel-oriented security. This document describes how to use HTTP over TLS. 1.1. Requirements Terminology Keywords "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT" and "MAY" that appear in this document are to be interpreted as described in [RFC2119]. 2. HTTP Over TLS Conceptually, HTTP/TLS is very simple. Simply use HTTP over TLS precisely as you would use HTTP over TCP. 2.1. Connection Initiation The agent acting as the HTTP client should also act as the TLS client. It should initiate a connection to the server on the appropriate port and then send the TLS ClientHello to begin the TLS handshake. When the TLS handshake has finished. The client may then initiate the first HTTP request. All HTTP data MUST be sent as TLS "application data". Normal HTTP behavior, including retained connections should be followed. 2.2. Connection Closure TLS provides a facility for secure connection closure. When a valid closure alert is received, an implementation can be assured that no further data will be received on that connection. TLS implementations MUST initiate an exchange of closure alerts before closing a connection. A TLS implementation MAY, after sending a closure alert, close the connection without waiting for the peer to send its closure alert, generating an "incomplete close". Note that an implementation which does this MAY choose to reuse the session. This SHOULD only be done when the application knows (typically through detecting HTTP message boundaries) that it has received all the message data that it cares about. As specified in [RFC2246], any implementation which receives a connection close without first receiving a valid closure alert (a "premature close") MUST NOT reuse that session. Note that a premature close does not call into question the security of the data already received, but simply indicates that subsequent data might Rescorla Informational [Page 2] RFC 2818 HTTP Over TLS May 2000 have been truncated. Because TLS is oblivious to HTTP request/response boundaries, it is necessary to examine the HTTP data itself (specifically the Content-Length header) to determine whether the truncation occurred inside a message or between messages. 2.2.1. Client Behavior Because HTTP uses connection closure to signal end of server data, client implementations MUST treat any premature closes as errors and the data received as potentially truncated. While in some cases the HTTP protocol allows the client to find out whether truncation took place so that, if it received the complete reply, it may tolerate such errors following the principle to "[be] strict when sending and tolerant when receiving" [RFC1958], often truncation does not show in the HTTP protocol data; two cases in particular deserve special note: A HTTP response without a Content-Length header. Since data length in this situation is signalled by connection close a premature close generated by the server cannot be distinguished from a spurious close generated by an attacker. A HTTP response with a valid Content-Length header closed before all data has been read. Because TLS does not provide document oriented protection, it is impossible to determine whether the server has miscomputed the Content-Length or an attacker has truncated the connection. There is one exception to the above rule. When encountering a premature close, a client SHOULD treat as completed all requests for which it has received as much data as specified in the Content-Length header. A client detecting an incomplete close SHOULD recover gracefully. It MAY resume a TLS session closed in this fashion. Clients MUST send a closure alert before closing the connection. Clients which are unprepared to receive any more data MAY choose not to wait for the server's closure alert and simply close the connection, thus generating an incomplete close on the server side. 2.2.2. Server Behavior RFC 2616 permits an HTTP client to close the connection at any time, and requires servers to recover gracefully. In particular, servers SHOULD be prepared to receive an incomplete close from the client, since the client can often determine when the end of server data is. Servers SHOULD be willing to resume TLS sessions closed in this fashion. Rescorla Informational [Page 3] RFC 2818 HTTP Over TLS May 2000 Implementation note: In HTTP implementations which do not use persistent connections, the server ordinarily expects to be able to signal end of data by closing the connection. When Content-Length is used, however, the client may have already sent the closure alert and dropped the connection. Servers MUST attempt to initiate an exchange of closure alerts with the client before closing the connection. Servers MAY close the connection after sending the closure alert, thus generating an incomplete close on the client side. 2.3. Port Number The first data that an HTTP server expects to receive from the client is the Request-Line production. The first data that a TLS server (and hence an HTTP/TLS server) expects to receive is the ClientHello. Consequently, common practice has been to run HTTP/TLS over a separate port in order to distinguish which protocol is being used. When HTTP/TLS is being run over a TCP/IP connection, the default port is 443. This does not preclude HTTP/TLS from being run over another transport. TLS only presumes a reliable connection-oriented data stream. 2.4. URI Format HTTP/TLS is differentiated from HTTP URIs by using the 'https' protocol identifier in place of the 'http' protocol identifier. An example URI specifying HTTP/TLS is: https://www.example.com/~smith/home.html 3. Endpoint Identification 3.1. Server Identity In general, HTTP/TLS requests are generated by dereferencing a URI. As a consequence, the hostname for the server is known to the client. If the hostname is available, the client MUST check it against the server's identity as presented in the server's Certificate message, in order to prevent man-in-the-middle attacks. If the client has external information as to the expected identity of the server, the hostname check MAY be omitted. (For instance, a client may be connecting to a machine whose address and hostname are dynamic but the client knows the certificate that the server will present.) In such cases, it is important to narrow the scope of acceptable certificates as much as possible in order to prevent man Rescorla Informational [Page 4] RFC 2818 HTTP Over TLS May 2000 in the middle attacks. In special cases, it may be appropriate for the client to simply ignore the server's identity, but it must be understood that this leaves the connection open to active attack. If a subjectAltName extension of type dNSName is present, that MUST be used as the identity. Otherwise, the (most specific) Common Name field in the Subject field of the certificate MUST be used. Although the use of the Common Name is existing practice, it is deprecated and Certification Authorities are encouraged to use the dNSName instead. Matching is performed using the matching rules specified by [RFC2459]. If more than one identity of a given type is present in the certificate (e.g., more than one dNSName name, a match in any one of the set is considered acceptable.) Names may contain the wildcard character * which is considered to match any single domain name component or component fragment. E.g., *.a.com matches foo.a.com but not bar.foo.a.com. f*.com matches foo.com but not bar.com. In some cases, the URI is specified as an IP address rather than a hostname. In this case, the iPAddress subjectAltName must be present in the certificate and must exactly match the IP in the URI. If the hostname does not match the identity in the certificate, user oriented clients MUST either notify the user (clients MAY give the user the opportunity to continue with the connection in any case) or terminate the connection with a bad certificate error. Automated clients MUST log the error to an appropriate audit log (if available) and SHOULD terminate the connection (with a bad certificate error). Automated clients MAY provide a configuration setting that disables this check, but MUST provide a setting which enables it. Note that in many cases the URI itself comes from an untrusted source. The above-described check provides no protection against attacks where this source is compromised. For example, if the URI was obtained by clicking on an HTML page which was itself obtained without using HTTP/TLS, a man in the middle could have replaced the URI. In order to prevent this form of attack, users should carefully examine the certificate presented by the server to determine if it meets their expectations. 3.2. Client Identity Typically, the server has no external knowledge of what the client's identity ought to be and so checks (other than that the client has a certificate chain rooted in an appropriate CA) are not possible. If a server has such knowledge (typically from some source external to HTTP or TLS) it SHOULD check the identity as described above. Rescorla Informational [Page 5] RFC 2818 HTTP Over TLS May 2000 References [RFC2459] Housley, R., Ford, W., Polk, W. and D. Solo, "Internet Public Key Infrastructure: Part I: X.509 Certificate and CRL Profile", RFC 2459, January 1999. [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol, HTTP/1.1", RFC 2616, June 1999. [RFC2119] Bradner, S., "Key Words for use in RFCs to indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC2246] Dierks, T. and C. Allen, "The TLS Protocol", RFC 2246, January 1999. [RFC2817] Khare, R. and S. Lawrence, "Upgrading to TLS Within HTTP/1.1", RFC 2817, May 2000. Security Considerations This entire document is about security. Author's Address Eric Rescorla RTFM, Inc. 30 Newell Road, #16 East Palo Alto, CA 94303 Phone: (650) 328-8631 EMail: ekr@rtfm.com Rescorla Informational [Page 6] RFC 2818 HTTP Over TLS May 2000 Full Copyright Statement Copyright (C) The Internet Society (2000). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Acknowledgement Funding for the RFC Editor function is currently provided by the Internet Society. Rescorla Informational [Page 7] |
Added doc/rfc2964.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 | Network Working Group K. Moore Request for Comments: 2964 University of Tennessee BCP: 44 N. Freed Category: Best Current Practice Innosoft October 2000 Use of HTTP State Management Status of this Memo This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements. Distribution of this memo is unlimited. Copyright Notice Copyright (C) The Internet Society (2000). All Rights Reserved. IESG Note The IESG notes that this mechanism makes use of the .local top-level domain (TLD) internally when handling host names that don't contain any dots, and that this mechanism might not work in the expected way should an actual .local TLD ever be registered. Abstract The mechanisms described in "HTTP State Management Mechanism" (RFC- 2965), and its predecessor (RFC-2109), can be used for many different purposes. However, some current and potential uses of the protocol are controversial because they have significant user privacy and security implications. This memo identifies specific uses of Hypertext Transfer Protocol (HTTP) State Management protocol which are either (a) not recommended by the IETF, or (b) believed to be harmful, and discouraged. This memo also details additional privacy considerations which are not covered by the HTTP State Management protocol specification. 1. Introduction The HTTP State Management mechanism is both useful and controversial. It is useful because numerous applications of HTTP benefit from the ability to save state between HTTP transactions, without encoding such state in URLs. It is controversial because the mechanism has been used to accomplish things for which it was not designed and is not well-suited. Some of these uses have attracted a great deal of public criticism because they threaten to violate the privacy of web Moore & Freed Best Current Practice [Page 1] RFC 2964 Use of HTTP State Management October 2000 users, specifically by leaking potentially sensitive information to third parties such as the Web sites a user has visited. There are also other uses of HTTP State Management which are inappropriate even though they do not threaten user privacy. This memo therefore identifies uses of the HTTP State Management protocol specified in RFC-2965 which are not recommended by the IETF, or which are believed to be harmful and are therefore discouraged. This document occasionally uses terms that appear in capital letters. When the terms "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY" appear capitalized, they are being used to indicate particular requirements of this specification. A discussion of the meanings of the terms "MUST", "SHOULD", and "MAY" appears in [RFC-1123]; the terms "MUST NOT" and "SHOULD NOT" are logical extensions of this usage. 2. Uses of HTTP State Management The purpose of HTTP State Management is to allow an HTTP-based service to create stateful "sessions" which persist across multiple HTTP transactions. A single session may involve transactions with multiple server hosts. Multiple client hosts may also be involved in a single session when the session data for a particular user is shared between client hosts (e.g., via a networked file system). In other words, the "session" retains state between a "user" and a "service", not between particular hosts. It's important to realize that similar capabilities may also be achieved using the "bare" HTTP protocol, and/or dynamically-generated HTML, without the State Management extensions. For example, state information can be transmitted from the service to the user by embedding a session identifier in one or more URLs which appear in HTTP redirects, or dynamically generated HTML; and the state information may be returned from the user to the service when such URLs appear in a GET or POST request. HTML forms can also be used to pass state information from the service to the user and back, without the user being aware of this happening. However, the HTTP State Management facility does provide an increase in functionality over ordinary HTTP and HTML. In practice, this additional functionality includes: (1) The ability to exchange URLs between users, of resources accessed during stateful sessions, without leaking the state information associated with those sessions. (e.g. "Here's the URL for the FooCorp web catalog entry for those sandals that you wanted.") Moore & Freed Best Current Practice [Page 2] RFC 2964 Use of HTTP State Management October 2000 (2) The ability to maintain session state without "cache-busting". That is, separating the session state from the URL allows a web cache to maintain only a single copy of the named resource. If the state is maintained in session-specific URLs, the cache would likely have to maintain several identical copies of the resource. (3) The ability to implement sessions with minimal server configuration and minimal protocol overhead, as compared to other techniques of maintaining session state. (4) The ability to associate the user with session state whenever a user accesses the service, regardless of whether the user enters through a particular "home page" or "portal". (5) The ability to save session information in stable storage, so that a "session" can be maintained across client invocations, system reboots, and client or system crashes. 2.1. Recommended Uses Use of HTTP State Management is appropriate whenever it is desirable to maintain state between a user and a service across multiple HTTP transactions, provided that: (1) the user is aware that session state is being maintained and consents to it, (2) the user has the ability to delete the state associated with such a session at any time, (3) the information obtained through the ability to track the user's usage of the service is not disclosed to other parties without the user's explicit consent, and (4) session information itself cannot contain sensitive information and cannot be used to obtain sensitive information that is not otherwise available to an eavesdropper. This last point is important because cookies are usually sent in the clear and hence are readily available to eavesdroppers. An example of such a recommended use would be a "shopping cart", where the existence of the shopping cart is explicitly made known to the user, the user can explicitly "empty" his or her shopping cart (either by requesting that it be emptied or by purchasing those Moore & Freed Best Current Practice [Page 3] RFC 2964 Use of HTTP State Management October 2000 items) and thus cause the shared state to be discarded, and the service asserts that it will not disclose the user's shopping or browsing habits to third parties without the user's consent. Note that the HTTP State Management protocol effectively allows a service provider to refuse to provide a service, or provide a reduced level of service, if the user or a user's client fails to honor a request to maintain session state. Absent legal prohibition to the contrary, the server MAY refuse to provide the service, or provide a reduced level of service, under these conditions. As a purely practical consideration, services designed to utilize HTTP State Management may be unable to function properly if the client does not provide it. Such servers SHOULD gracefully handle such conditions and explain to the user why the full level of service is not available. 2.2. Problematic Uses The following uses of HTTP State Management are deemed inappropriate and contrary to this specification: 2.2.1. Leakage of Information to Third Parties HTTP State Management MUST NOT be used to leak information about the user or the user's browsing habits to other parties besides the user or service, without the user's explicit consent. Such usage is prohibited even if the user's name or other externally-assigned identifier are not exposed to other parties, because the state management mechanism itself provides an identifier which can be used to compile information about the user. Because such practices encourage users to defeat HTTP State Management mechanisms, they tend to reduce the effectiveness of HTTP State Management, and are therefore considered detrimental to the operation of the web. 2.2.2. Use as an Authentication Mechanism It is generally inappropriate to use the HTTP State Management protocol as an authentication mechanism. HTTP State Management is not designed with such use in mind, and safeguards for protection of authentication credentials are lacking in both the protocol specification and in widely deployed HTTP clients and servers. Most HTTP sessions are not encrypted and "cookies" may therefore be exposed to passive eavesdroppers. Furthermore, HTTP clients and servers typically store "cookies" in cleartext with little or no protection against exposure. HTTP State Management therefore SHOULD Moore & Freed Best Current Practice [Page 4] RFC 2964 Use of HTTP State Management October 2000 NOT be used as an authentication mechanism to protect information from being exposed to unauthorized parties, even if the HTTP sessions are encrypted. The prohibition against using HTTP State Management for authentication includes both its use to protect information which is provided by the service, and its use to protect potentially sensitive information about the user which is entrusted to the service's care. For example, it would be inappropriate to expose a user's name, address, telephone number, or billing information to a client that merely presented a cookie which had been previously associated with the user. Similarly, HTTP State Management SHOULD NOT be used to authenticate user requests if unauthorized requests might have undesirable side- effects for the user, unless the user is aware of the potential for such side-effects and explicitly consents to such use. For example, a service which allowed a user to order merchandise with a single "click", based entirely on the user's stored "cookies", could inconvenience the user by requiring her to dispute charges to her credit card, and/or return the unwanted merchandise, in the event that the cookies were exposed to third parties. Some uses of HTTP State Management to identify users may be relatively harmless, for example, if the only information which can be thus exposed belongs to the service, and the service will suffer little harm from the exposure of such information. 3. User Interface Considerations for HTTP State Management HTTP State Management has been very controversial because of its potential to expose information about a user's browsing habits to third parties, without the knowledge or consent of the user. While such exposure is possible, this is less a flaw in the protocol itself than a failure of HTTP client implementations (and of some providers of HTTP-based services) to protect users' interests. As implied above, there are other ways to maintain session state than using HTTP State Management, and therefore other ways in which users' browsing habits can be tracked. Indeed, it is difficult to imagine how the HTTP protocol or an HTTP client could actually prevent a service from disclosing a user's "click trail" to other parties if the service chose to do so. Protection of such information from inappropriate exposure must therefore be the responsibility of the service. HTTP client implementations inherently cannot provide such protection, though they can implement countermeasures which make it more difficult for HTTP State Management to be used as the mechanism by which such information is exposed. Moore & Freed Best Current Practice [Page 5] RFC 2964 Use of HTTP State Management October 2000 It is arguable that HTTP clients should provide more protection in general against inappropriate exposure of tracking information, regardless of whether the exposure were facilitated by use of HTTP State Management or by some other means. However, issues related to other mechanisms are beyond the scope of this memo. 3.1. Capabilities Required of an HTTP Client A user's willingness to consent to use of HTTP State Management is likely to vary from one service to another, according to whether the user trusts the service to use the information appropriately and to limit its exposure to other parties. The user therefore SHOULD be able to control whether his client supports a service's request to use HTTP State Management, on a per-service basis. In particular: (1) Clients MUST NOT respond to HTTP State Management requests unless explicitly enabled by the user. (2) Clients SHOULD provide an effective interface which allows users to review, and approve or refuse, any particular requests from a server to maintain state information, before the client provides any state information to the server. (3) Clients SHOULD provide an effective interface which allows users to instruct their clients to ignore all requests from a particular service to maintain state information, on a per- service basis, immediately in response to any particular request from a server, before the client provides any state information to the server. (4) Clients SHOULD provide an effective interface which allows a user to disable future transmission of any state information to a service, and/or discard any saved state information for that service, even though the user has previously approved a service's request to maintain state information. (5) Clients SHOULD provide an effective interface which allows a user to terminate a previous request not to retain state management information for a given service. 3.2. Limitations of the domain-match algorithm The domain-match algorithm in RFC-2965 section 2 is intended as a heuristic to allow a client to "guess" whether or not two domains are part of the same service. There are few rules about how domain names can be used, and the structure of domain names and how they are delegated varies from one top-level domain to another (i.e. the client cannot tell which part of the domain was assigned to the Moore & Freed Best Current Practice [Page 6] RFC 2964 Use of HTTP State Management October 2000 service). Therefore NO string comparison algorithm (including the domain-match algorithm) can be relied on to distinguish a domain that belongs to a particular service, from a domain that belongs to another party. As stated above, each service is ultimately responsible for ensuring that user information is not inappropriately leaked to third parties. Leaking information to third parties via State Management by careful selection of domain names, or by assigning domain names to hosts maintained by third parties, is at least as inappropriate as leaking the same information by other means. 4. Security Considerations This entire memo is about security considerations. 5. Authors' Addresses Keith Moore University of Tennessee Computer Science Department 1122 Volunteer Blvd, Suite 203 Knoxville TN, 37996-3450 EMail: moore@cs.utk.edu Ned Freed Innosoft International, Inc. 1050 Lakes Drive West Covina, CA 81790 EMail: ned.freed@innosoft.com 6. References [RFC 1123] Braden, R., "Requirements for Internet Hosts -- Application and Support", STD 3, RFC 1123, October 1989. [RFC 2965] Kristol, D. and L. Montulli, "HTTP State Management Mechanism", RFC 2965, October 2000. [RFC 2109] Kristol, D. and L. Montulli, "HTTP State Management Mechanism", RFC 2109, February 1997. Moore & Freed Best Current Practice [Page 7] RFC 2964 Use of HTTP State Management October 2000 7. Full Copyright Statement Copyright (C) The Internet Society (2000). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Acknowledgement Funding for the RFC Editor function is currently provided by the Internet Society. Moore & Freed Best Current Practice [Page 8] |
Added doc/rfc2965.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 | Network Working Group D. Kristol Request for Comments: 2965 Bell Laboratories, Lucent Technologies Obsoletes: 2109 L. Montulli Category: Standards Track Epinions.com, Inc. October 2000 HTTP State Management Mechanism Status of this Memo This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "Internet Official Protocol Standards" (STD 1) for the standardization state and status of this protocol. Distribution of this memo is unlimited. Copyright Notice Copyright (C) The Internet Society (2000). All Rights Reserved. IESG Note The IESG notes that this mechanism makes use of the .local top-level domain (TLD) internally when handling host names that don't contain any dots, and that this mechanism might not work in the expected way should an actual .local TLD ever be registered. Abstract This document specifies a way to create a stateful session with Hypertext Transfer Protocol (HTTP) requests and responses. It describes three new headers, Cookie, Cookie2, and Set-Cookie2, which carry state information between participating origin servers and user agents. The method described here differs from Netscape's Cookie proposal [Netscape], but it can interoperate with HTTP/1.0 user agents that use Netscape's method. (See the HISTORICAL section.) This document reflects implementation experience with RFC 2109 and obsoletes it. 1. TERMINOLOGY The terms user agent, client, server, proxy, origin server, and http_URL have the same meaning as in the HTTP/1.1 specification [RFC2616]. The terms abs_path and absoluteURI have the same meaning as in the URI Syntax specification [RFC2396]. Kristol & Montulli Standards Track [Page 1] RFC 2965 HTTP State Management Mechanism October 2000 Host name (HN) means either the host domain name (HDN) or the numeric Internet Protocol (IP) address of a host. The fully qualified domain name is preferred; use of numeric IP addresses is strongly discouraged. The terms request-host and request-URI refer to the values the client would send to the server as, respectively, the host (but not port) and abs_path portions of the absoluteURI (http_URL) of the HTTP request line. Note that request-host is a HN. The term effective host name is related to host name. If a host name contains no dots, the effective host name is that name with the string .local appended to it. Otherwise the effective host name is the same as the host name. Note that all effective host names contain at least one dot. The term request-port refers to the port portion of the absoluteURI (http_URL) of the HTTP request line. If the absoluteURI has no explicit port, the request-port is the HTTP default, 80. The request-port of a cookie is the request-port of the request in which a Set-Cookie2 response header was returned to the user agent. Host names can be specified either as an IP address or a HDN string. Sometimes we compare one host name with another. (Such comparisons SHALL be case-insensitive.) Host A's name domain-matches host B's if * their host name strings string-compare equal; or * A is a HDN string and has the form NB, where N is a non-empty name string, B has the form .B', and B' is a HDN string. (So, x.y.com domain-matches .Y.com but not Y.com.) Note that domain-match is not a commutative operation: a.b.c.com domain-matches .c.com, but not the reverse. The reach R of a host name H is defined as follows: * If - H is the host domain name of a host; and, - H has the form A.B; and - A has no embedded (that is, interior) dots; and - B has at least one embedded dot, or B is the string "local". then the reach of H is .B. Kristol & Montulli Standards Track [Page 2] RFC 2965 HTTP State Management Mechanism October 2000 * Otherwise, the reach of H is H. For two strings that represent paths, P1 and P2, P1 path-matches P2 if P2 is a prefix of P1 (including the case where P1 and P2 string- compare equal). Thus, the string /tec/waldo path-matches /tec. Because it was used in Netscape's original implementation of state management, we will use the term cookie to refer to the state information that passes between an origin server and user agent, and that gets stored by the user agent. 1.1 Requirements The key words "MAY", "MUST", "MUST NOT", "OPTIONAL", "RECOMMENDED", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT" in this document are to be interpreted as described in RFC 2119 [RFC2119]. 2. STATE AND SESSIONS This document describes a way to create stateful sessions with HTTP requests and responses. Currently, HTTP servers respond to each client request without relating that request to previous or subsequent requests; the state management mechanism allows clients and servers that wish to exchange state information to place HTTP requests and responses within a larger context, which we term a "session". This context might be used to create, for example, a "shopping cart", in which user selections can be aggregated before purchase, or a magazine browsing system, in which a user's previous reading affects which offerings are presented. Neither clients nor servers are required to support cookies. A server MAY refuse to provide content to a client that does not return the cookies it sends. 3. DESCRIPTION We describe here a way for an origin server to send state information to the user agent, and for the user agent to return the state information to the origin server. The goal is to have a minimal impact on HTTP and user agents. 3.1 Syntax: General The two state management headers, Set-Cookie2 and Cookie, have common syntactic properties involving attribute-value pairs. The following grammar uses the notation, and tokens DIGIT (decimal digits), token Kristol & Montulli Standards Track [Page 3] RFC 2965 HTTP State Management Mechanism October 2000 (informally, a sequence of non-special, non-white space characters), and http_URL from the HTTP/1.1 specification [RFC2616] to describe their syntax. av-pairs = av-pair *(";" av-pair) av-pair = attr ["=" value] ; optional value attr = token value = token | quoted-string Attributes (names) (attr) are case-insensitive. White space is permitted between tokens. Note that while the above syntax description shows value as optional, most attrs require them. NOTE: The syntax above allows whitespace between the attribute and the = sign. 3.2 Origin Server Role 3.2.1 General The origin server initiates a session, if it so desires. To do so, it returns an extra response header to the client, Set-Cookie2. (The details follow later.) A user agent returns a Cookie request header (see below) to the origin server if it chooses to continue a session. The origin server MAY ignore it or use it to determine the current state of the session. It MAY send back to the client a Set-Cookie2 response header with the same or different information, or it MAY send no Set-Cookie2 header at all. The origin server effectively ends a session by sending the client a Set-Cookie2 header with Max-Age=0. Servers MAY return Set-Cookie2 response headers with any response. User agents SHOULD send Cookie request headers, subject to other rules detailed below, with every request. An origin server MAY include multiple Set-Cookie2 headers in a response. Note that an intervening gateway could fold multiple such headers into a single header. Kristol & Montulli Standards Track [Page 4] RFC 2965 HTTP State Management Mechanism October 2000 3.2.2 Set-Cookie2 Syntax The syntax for the Set-Cookie2 response header is set-cookie = "Set-Cookie2:" cookies cookies = 1#cookie cookie = NAME "=" VALUE *(";" set-cookie-av) NAME = attr VALUE = value set-cookie-av = "Comment" "=" value | "CommentURL" "=" <"> http_URL <"> | "Discard" | "Domain" "=" value | "Max-Age" "=" value | "Path" "=" value | "Port" [ "=" <"> portlist <"> ] | "Secure" | "Version" "=" 1*DIGIT portlist = 1#portnum portnum = 1*DIGIT Informally, the Set-Cookie2 response header comprises the token Set- Cookie2:, followed by a comma-separated list of one or more cookies. Each cookie begins with a NAME=VALUE pair, followed by zero or more semi-colon-separated attribute-value pairs. The syntax for attribute-value pairs was shown earlier. The specific attributes and the semantics of their values follows. The NAME=VALUE attribute- value pair MUST come first in each cookie. The others, if present, can occur in any order. If an attribute appears more than once in a cookie, the client SHALL use only the value associated with the first appearance of the attribute; a client MUST ignore values after the first. The NAME of a cookie MAY be the same as one of the attributes in this specification. However, because the cookie's NAME must come first in a Set-Cookie2 response header, the NAME and its VALUE cannot be confused with an attribute-value pair. NAME=VALUE REQUIRED. The name of the state information ("cookie") is NAME, and its value is VALUE. NAMEs that begin with $ are reserved and MUST NOT be used by applications. The VALUE is opaque to the user agent and may be anything the origin server chooses to send, possibly in a server-selected printable ASCII encoding. "Opaque" implies that the content is of interest and relevance only to the origin server. The content may, in fact, be readable by anyone that examines the Set-Cookie2 header. Kristol & Montulli Standards Track [Page 5] RFC 2965 HTTP State Management Mechanism October 2000 Comment=value OPTIONAL. Because cookies can be used to derive or store private information about a user, the value of the Comment attribute allows an origin server to document how it intends to use the cookie. The user can inspect the information to decide whether to initiate or continue a session with this cookie. Characters in value MUST be in UTF-8 encoding. [RFC2279] CommentURL="http_URL" OPTIONAL. Because cookies can be used to derive or store private information about a user, the CommentURL attribute allows an origin server to document how it intends to use the cookie. The user can inspect the information identified by the URL to decide whether to initiate or continue a session with this cookie. Discard OPTIONAL. The Discard attribute instructs the user agent to discard the cookie unconditionally when the user agent terminates. Domain=value OPTIONAL. The value of the Domain attribute specifies the domain for which the cookie is valid. If an explicitly specified value does not start with a dot, the user agent supplies a leading dot. Max-Age=value OPTIONAL. The value of the Max-Age attribute is delta-seconds, the lifetime of the cookie in seconds, a decimal non-negative integer. To handle cached cookies correctly, a client SHOULD calculate the age of the cookie according to the age calculation rules in the HTTP/1.1 specification [RFC2616]. When the age is greater than delta-seconds seconds, the client SHOULD discard the cookie. A value of zero means the cookie SHOULD be discarded immediately. Path=value OPTIONAL. The value of the Path attribute specifies the subset of URLs on the origin server to which this cookie applies. Port[="portlist"] OPTIONAL. The Port attribute restricts the port to which a cookie may be returned in a Cookie request header. Note that the syntax REQUIREs quotes around the OPTIONAL portlist even if there is only one portnum in portlist. Kristol & Montulli Standards Track [Page 6] RFC 2965 HTTP State Management Mechanism October 2000 Secure OPTIONAL. The Secure attribute (with no value) directs the user agent to use only (unspecified) secure means to contact the origin server whenever it sends back this cookie, to protect the confidentially and authenticity of the information in the cookie. The user agent (possibly with user interaction) MAY determine what level of security it considers appropriate for "secure" cookies. The Secure attribute should be considered security advice from the server to the user agent, indicating that it is in the session's interest to protect the cookie contents. When it sends a "secure" cookie back to a server, the user agent SHOULD use no less than the same level of security as was used when it received the cookie from the server. Version=value REQUIRED. The value of the Version attribute, a decimal integer, identifies the version of the state management specification to which the cookie conforms. For this specification, Version=1 applies. 3.2.3 Controlling Caching An origin server must be cognizant of the effect of possible caching of both the returned resource and the Set-Cookie2 header. Caching "public" documents is desirable. For example, if the origin server wants to use a public document such as a "front door" page as a sentinel to indicate the beginning of a session for which a Set-Cookie2 response header must be generated, the page SHOULD be stored in caches "pre-expired" so that the origin server will see further requests. "Private documents", for example those that contain information strictly private to a session, SHOULD NOT be cached in shared caches. If the cookie is intended for use by a single user, the Set-Cookie2 header SHOULD NOT be cached. A Set-Cookie2 header that is intended to be shared by multiple users MAY be cached. The origin server SHOULD send the following additional HTTP/1.1 response headers, depending on circumstances: * To suppress caching of the Set-Cookie2 header: Cache-control: no-cache="set-cookie2" and one of the following: * To suppress caching of a private document in shared caches: Cache-control: private Kristol & Montulli Standards Track [Page 7] RFC 2965 HTTP State Management Mechanism October 2000 * To allow caching of a document and require that it be validated before returning it to the client: Cache-Control: must-revalidate, max-age=0 * To allow caching of a document, but to require that proxy caches (not user agent caches) validate it before returning it to the client: Cache-Control: proxy-revalidate, max-age=0 * To allow caching of a document and request that it be validated before returning it to the client (by "pre-expiring" it): Cache-control: max-age=0 Not all caches will revalidate the document in every case. HTTP/1.1 servers MUST send Expires: old-date (where old-date is a date long in the past) on responses containing Set-Cookie2 response headers unless they know for certain (by out of band means) that there are no HTTP/1.0 proxies in the response chain. HTTP/1.1 servers MAY send other Cache-Control directives that permit caching by HTTP/1.1 proxies in addition to the Expires: old-date directive; the Cache-Control directive will override the Expires: old-date for HTTP/1.1 proxies. 3.3 User Agent Role 3.3.1 Interpreting Set-Cookie2 The user agent keeps separate track of state information that arrives via Set-Cookie2 response headers from each origin server (as distinguished by name or IP address and port). The user agent MUST ignore attribute-value pairs whose attribute it does not recognize. The user agent applies these defaults for optional attributes that are missing: Discard The default behavior is dictated by the presence or absence of a Max-Age attribute. Domain Defaults to the effective request-host. (Note that because there is no dot at the beginning of effective request-host, the default Domain can only domain-match itself.) Max-Age The default behavior is to discard the cookie when the user agent exits. Path Defaults to the path of the request URL that generated the Set-Cookie2 response, up to and including the right-most /. Kristol & Montulli Standards Track [Page 8] RFC 2965 HTTP State Management Mechanism October 2000 Port The default behavior is that a cookie MAY be returned to any request-port. Secure If absent, the user agent MAY send the cookie over an insecure channel. 3.3.2 Rejecting Cookies To prevent possible security or privacy violations, a user agent rejects a cookie according to rules below. The goal of the rules is to try to limit the set of servers for which a cookie is valid, based on the values of the Path, Domain, and Port attributes and the request-URI, request-host and request-port. A user agent rejects (SHALL NOT store its information) if the Version attribute is missing. Moreover, a user agent rejects (SHALL NOT store its information) if any of the following is true of the attributes explicitly present in the Set-Cookie2 response header: * The value for the Path attribute is not a prefix of the request-URI. * The value for the Domain attribute contains no embedded dots, and the value is not .local. * The effective host name that derives from the request-host does not domain-match the Domain attribute. * The request-host is a HDN (not IP address) and has the form HD, where D is the value of the Domain attribute, and H is a string that contains one or more dots. * The Port attribute has a "port-list", and the request-port was not in the list. Examples: * A Set-Cookie2 from request-host y.x.foo.com for Domain=.foo.com would be rejected, because H is y.x and contains a dot. * A Set-Cookie2 from request-host x.foo.com for Domain=.foo.com would be accepted. * A Set-Cookie2 with Domain=.com or Domain=.com., will always be rejected, because there is no embedded dot. * A Set-Cookie2 with Domain=ajax.com will be accepted, and the value for Domain will be taken to be .ajax.com, because a dot gets prepended to the value. Kristol & Montulli Standards Track [Page 9] RFC 2965 HTTP State Management Mechanism October 2000 * A Set-Cookie2 with Port="80,8000" will be accepted if the request was made to port 80 or 8000 and will be rejected otherwise. * A Set-Cookie2 from request-host example for Domain=.local will be accepted, because the effective host name for the request- host is example.local, and example.local domain-matches .local. 3.3.3 Cookie Management If a user agent receives a Set-Cookie2 response header whose NAME is the same as that of a cookie it has previously stored, the new cookie supersedes the old when: the old and new Domain attribute values compare equal, using a case- insensitive string-compare; and, the old and new Path attribute values string-compare equal (case-sensitive). However, if the Set- Cookie2 has a value for Max-Age of zero, the (old and new) cookie is discarded. Otherwise a cookie persists (resources permitting) until whichever happens first, then gets discarded: its Max-Age lifetime is exceeded; or, if the Discard attribute is set, the user agent terminates the session. Because user agents have finite space in which to store cookies, they MAY also discard older cookies to make space for newer ones, using, for example, a least-recently-used algorithm, along with constraints on the maximum number of cookies that each origin server may set. If a Set-Cookie2 response header includes a Comment attribute, the user agent SHOULD store that information in a human-readable form with the cookie and SHOULD display the comment text as part of a cookie inspection user interface. If a Set-Cookie2 response header includes a CommentURL attribute, the user agent SHOULD store that information in a human-readable form with the cookie, or, preferably, SHOULD allow the user to follow the http_URL link as part of a cookie inspection user interface. The cookie inspection user interface may include a facility whereby a user can decide, at the time the user agent receives the Set-Cookie2 response header, whether or not to accept the cookie. A potentially confusing situation could arise if the following sequence occurs: * the user agent receives a cookie that contains a CommentURL attribute; * the user agent's cookie inspection interface is configured so that it presents a dialog to the user before the user agent accepts the cookie; Kristol & Montulli Standards Track [Page 10] RFC 2965 HTTP State Management Mechanism October 2000 * the dialog allows the user to follow the CommentURL link when the user agent receives the cookie; and, * when the user follows the CommentURL link, the origin server (or another server, via other links in the returned content) returns another cookie. The user agent SHOULD NOT send any cookies in this context. The user agent MAY discard any cookie it receives in this context that the user has not, through some user agent mechanism, deemed acceptable. User agents SHOULD allow the user to control cookie destruction, but they MUST NOT extend the cookie's lifetime beyond that controlled by the Discard and Max-Age attributes. An infrequently-used cookie may function as a "preferences file" for network applications, and a user may wish to keep it even if it is the least-recently-used cookie. One possible implementation would be an interface that allows the permanent storage of a cookie through a checkbox (or, conversely, its immediate destruction). Privacy considerations dictate that the user have considerable control over cookie management. The PRIVACY section contains more information. 3.3.4 Sending Cookies to the Origin Server When it sends a request to an origin server, the user agent includes a Cookie request header if it has stored cookies that are applicable to the request, based on * the request-host and request-port; * the request-URI; * the cookie's age. The syntax for the header is: cookie = "Cookie:" cookie-version 1*((";" | ",") cookie-value) cookie-value = NAME "=" VALUE [";" path] [";" domain] [";" port] cookie-version = "$Version" "=" value NAME = attr VALUE = value path = "$Path" "=" value domain = "$Domain" "=" value port = "$Port" [ "=" <"> value <"> ] The value of the cookie-version attribute MUST be the value from the Version attribute of the corresponding Set-Cookie2 response header. Otherwise the value for cookie-version is 0. The value for the path Kristol & Montulli Standards Track [Page 11] RFC 2965 HTTP State Management Mechanism October 2000 attribute MUST be the value from the Path attribute, if one was present, of the corresponding Set-Cookie2 response header. Otherwise the attribute SHOULD be omitted from the Cookie request header. The value for the domain attribute MUST be the value from the Domain attribute, if one was present, of the corresponding Set-Cookie2 response header. Otherwise the attribute SHOULD be omitted from the Cookie request header. The port attribute of the Cookie request header MUST mirror the Port attribute, if one was present, in the corresponding Set-Cookie2 response header. That is, the port attribute MUST be present if the Port attribute was present in the Set-Cookie2 header, and it MUST have the same value, if any. Otherwise, if the Port attribute was absent from the Set-Cookie2 header, the attribute likewise MUST be omitted from the Cookie request header. Note that there is neither a Comment nor a CommentURL attribute in the Cookie request header corresponding to the ones in the Set- Cookie2 response header. The user agent does not return the comment information to the origin server. The user agent applies the following rules to choose applicable cookie-values to send in Cookie request headers from among all the cookies it has received. Domain Selection The origin server's effective host name MUST domain-match the Domain attribute of the cookie. Port Selection There are three possible behaviors, depending on the Port attribute in the Set-Cookie2 response header: 1. By default (no Port attribute), the cookie MAY be sent to any port. 2. If the attribute is present but has no value (e.g., Port), the cookie MUST only be sent to the request-port it was received from. 3. If the attribute has a port-list, the cookie MUST only be returned if the new request-port is one of those listed in port-list. Path Selection The request-URI MUST path-match the Path attribute of the cookie. Kristol & Montulli Standards Track [Page 12] RFC 2965 HTTP State Management Mechanism October 2000 Max-Age Selection Cookies that have expired should have been discarded and thus are not forwarded to an origin server. If multiple cookies satisfy the criteria above, they are ordered in the Cookie header such that those with more specific Path attributes precede those with less specific. Ordering with respect to other attributes (e.g., Domain) is unspecified. Note: For backward compatibility, the separator in the Cookie header is semi-colon (;) everywhere. A server SHOULD also accept comma (,) as the separator between cookie-values for future compatibility. 3.3.5 Identifying What Version is Understood: Cookie2 The Cookie2 request header facilitates interoperation between clients and servers that understand different versions of the cookie specification. When the client sends one or more cookies to an origin server, if at least one of those cookies contains a $Version attribute whose value is different from the version that the client understands, then the client MUST also send a Cookie2 request header, the syntax for which is cookie2 = "Cookie2:" cookie-version Here the value for cookie-version is the highest version of cookie specification (currently 1) that the client understands. The client needs to send at most one such request header per request. 3.3.6 Sending Cookies in Unverifiable Transactions Users MUST have control over sessions in order to ensure privacy. (See PRIVACY section below.) To simplify implementation and to prevent an additional layer of complexity where adequate safeguards exist, however, this document distinguishes between transactions that are verifiable and those that are unverifiable. A transaction is verifiable if the user, or a user-designated agent, has the option to review the request-URI prior to its use in the transaction. A transaction is unverifiable if the user does not have that option. Unverifiable transactions typically arise when a user agent automatically requests inlined or embedded entities or when it resolves redirection (3xx) responses from an origin server. Typically the origin transaction, the transaction that the user initiates, is verifiable, and that transaction may directly or indirectly induce the user agent to make unverifiable transactions. An unverifiable transaction is to a third-party host if its request- host U does not domain-match the reach R of the request-host O in the origin transaction. Kristol & Montulli Standards Track [Page 13] RFC 2965 HTTP State Management Mechanism October 2000 When it makes an unverifiable transaction, a user agent MUST disable all cookie processing (i.e., MUST NOT send cookies, and MUST NOT accept any received cookies) if the transaction is to a third-party host. This restriction prevents a malicious service author from using unverifiable transactions to induce a user agent to start or continue a session with a server in a different domain. The starting or continuation of such sessions could be contrary to the privacy expectations of the user, and could also be a security problem. User agents MAY offer configurable options that allow the user agent, or any autonomous programs that the user agent executes, to ignore the above rule, so long as these override options default to "off". (N.B. Mechanisms may be proposed that will automate overriding the third-party restrictions under controlled conditions.) Many current user agents already provide a review option that would render many links verifiable. For instance, some user agents display the URL that would be referenced for a particular link when the mouse pointer is placed over that link. The user can therefore determine whether to visit that site before causing the browser to do so. (Though not implemented on current user agents, a similar technique could be used for a button used to submit a form -- the user agent could display the action to be taken if the user were to select that button.) However, even this would not make all links verifiable; for example, links to automatically loaded images would not normally be subject to "mouse pointer" verification. Many user agents also provide the option for a user to view the HTML source of a document, or to save the source to an external file where it can be viewed by another application. While such an option does provide a crude review mechanism, some users might not consider it acceptable for this purpose. 3.4 How an Origin Server Interprets the Cookie Header A user agent returns much of the information in the Set-Cookie2 header to the origin server when the request-URI path-matches the Path attribute of the cookie. When it receives a Cookie header, the origin server SHOULD treat cookies with NAMEs whose prefix is $ specially, as an attribute for the cookie. Kristol & Montulli Standards Track [Page 14] RFC 2965 HTTP State Management Mechanism October 2000 3.5 Caching Proxy Role One reason for separating state information from both a URL and document content is to facilitate the scaling that caching permits. To support cookies, a caching proxy MUST obey these rules already in the HTTP specification: * Honor requests from the cache, if possible, based on cache validity rules. * Pass along a Cookie request header in any request that the proxy must make of another server. * Return the response to the client. Include any Set-Cookie2 response header. * Cache the received response subject to the control of the usual headers, such as Expires, Cache-control: no-cache and Cache-control: private * Cache the Set-Cookie2 subject to the control of the usual header, Cache-control: no-cache="set-cookie2" (The Set-Cookie2 header should usually not be cached.) Proxies MUST NOT introduce Set-Cookie2 (Cookie) headers of their own in proxy responses (requests). 4. EXAMPLES 4.1 Example 1 Most detail of request and response headers has been omitted. Assume the user agent has no stored cookies. 1. User Agent -> Server POST /acme/login HTTP/1.1 [form data] User identifies self via a form. Kristol & Montulli Standards Track [Page 15] RFC 2965 HTTP State Management Mechanism October 2000 2. Server -> User Agent HTTP/1.1 200 OK Set-Cookie2: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme" Cookie reflects user's identity. 3. User Agent -> Server POST /acme/pickitem HTTP/1.1 Cookie: $Version="1"; Customer="WILE_E_COYOTE"; $Path="/acme" [form data] User selects an item for "shopping basket". 4. Server -> User Agent HTTP/1.1 200 OK Set-Cookie2: Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme" Shopping basket contains an item. 5. User Agent -> Server POST /acme/shipping HTTP/1.1 Cookie: $Version="1"; Customer="WILE_E_COYOTE"; $Path="/acme"; Part_Number="Rocket_Launcher_0001"; $Path="/acme" [form data] User selects shipping method from form. 6. Server -> User Agent HTTP/1.1 200 OK Set-Cookie2: Shipping="FedEx"; Version="1"; Path="/acme" New cookie reflects shipping method. 7. User Agent -> Server POST /acme/process HTTP/1.1 Cookie: $Version="1"; Customer="WILE_E_COYOTE"; $Path="/acme"; Part_Number="Rocket_Launcher_0001"; $Path="/acme"; Shipping="FedEx"; $Path="/acme" [form data] Kristol & Montulli Standards Track [Page 16] RFC 2965 HTTP State Management Mechanism October 2000 User chooses to process order. 8. Server -> User Agent HTTP/1.1 200 OK Transaction is complete. The user agent makes a series of requests on the origin server, after each of which it receives a new cookie. All the cookies have the same Path attribute and (default) domain. Because the request-URIs all path-match /acme, the Path attribute of each cookie, each request contains all the cookies received so far. 4.2 Example 2 This example illustrates the effect of the Path attribute. All detail of request and response headers has been omitted. Assume the user agent has no stored cookies. Imagine the user agent has received, in response to earlier requests, the response headers Set-Cookie2: Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme" and Set-Cookie2: Part_Number="Riding_Rocket_0023"; Version="1"; Path="/acme/ammo" A subsequent request by the user agent to the (same) server for URLs of the form /acme/ammo/... would include the following request header: Cookie: $Version="1"; Part_Number="Riding_Rocket_0023"; $Path="/acme/ammo"; Part_Number="Rocket_Launcher_0001"; $Path="/acme" Note that the NAME=VALUE pair for the cookie with the more specific Path attribute, /acme/ammo, comes before the one with the less specific Path attribute, /acme. Further note that the same cookie name appears more than once. A subsequent request by the user agent to the (same) server for a URL of the form /acme/parts/ would include the following request header: Kristol & Montulli Standards Track [Page 17] RFC 2965 HTTP State Management Mechanism October 2000 Cookie: $Version="1"; Part_Number="Rocket_Launcher_0001"; $Path="/acme" Here, the second cookie's Path attribute /acme/ammo is not a prefix of the request URL, /acme/parts/, so the cookie does not get forwarded to the server. 5. IMPLEMENTATION CONSIDERATIONS Here we provide guidance on likely or desirable details for an origin server that implements state management. 5.1 Set-Cookie2 Content An origin server's content should probably be divided into disjoint application areas, some of which require the use of state information. The application areas can be distinguished by their request URLs. The Set-Cookie2 header can incorporate information about the application areas by setting the Path attribute for each one. The session information can obviously be clear or encoded text that describes state. However, if it grows too large, it can become unwieldy. Therefore, an implementor might choose for the session information to be a key to a server-side resource. Of course, using a database creates some problems that this state management specification was meant to avoid, namely: 1. keeping real state on the server side; 2. how and when to garbage-collect the database entry, in case the user agent terminates the session by, for example, exiting. 5.2 Stateless Pages Caching benefits the scalability of WWW. Therefore it is important to reduce the number of documents that have state embedded in them inherently. For example, if a shopping-basket-style application always displays a user's current basket contents on each page, those pages cannot be cached, because each user's basket's contents would be different. On the other hand, if each page contains just a link that allows the user to "Look at My Shopping Basket", the page can be cached. Kristol & Montulli Standards Track [Page 18] RFC 2965 HTTP State Management Mechanism October 2000 5.3 Implementation Limits Practical user agent implementations have limits on the number and size of cookies that they can store. In general, user agents' cookie support should have no fixed limits. They should strive to store as many frequently-used cookies as possible. Furthermore, general-use user agents SHOULD provide each of the following minimum capabilities individually, although not necessarily simultaneously: * at least 300 cookies * at least 4096 bytes per cookie (as measured by the characters that comprise the cookie non-terminal in the syntax description of the Set-Cookie2 header, and as received in the Set-Cookie2 header) * at least 20 cookies per unique host or domain name User agents created for specific purposes or for limited-capacity devices SHOULD provide at least 20 cookies of 4096 bytes, to ensure that the user can interact with a session-based origin server. The information in a Set-Cookie2 response header MUST be retained in its entirety. If for some reason there is inadequate space to store the cookie, it MUST be discarded, not truncated. Applications should use as few and as small cookies as possible, and they should cope gracefully with the loss of a cookie. 5.3.1 Denial of Service Attacks User agents MAY choose to set an upper bound on the number of cookies to be stored from a given host or domain name or on the size of the cookie information. Otherwise a malicious server could attempt to flood a user agent with many cookies, or large cookies, on successive responses, which would force out cookies the user agent had received from other servers. However, the minima specified above SHOULD still be supported. 6. PRIVACY Informed consent should guide the design of systems that use cookies. A user should be able to find out how a web site plans to use information in a cookie and should be able to choose whether or not those policies are acceptable. Both the user agent and the origin server must assist informed consent. Kristol & Montulli Standards Track [Page 19] RFC 2965 HTTP State Management Mechanism October 2000 6.1 User Agent Control An origin server could create a Set-Cookie2 header to track the path of a user through the server. Users may object to this behavior as an intrusive accumulation of information, even if their identity is not evident. (Identity might become evident, for example, if a user subsequently fills out a form that contains identifying information.) This state management specification therefore requires that a user agent give the user control over such a possible intrusion, although the interface through which the user is given this control is left unspecified. However, the control mechanisms provided SHALL at least allow the user * to completely disable the sending and saving of cookies. * to determine whether a stateful session is in progress. * to control the saving of a cookie on the basis of the cookie's Domain attribute. Such control could be provided, for example, by mechanisms * to notify the user when the user agent is about to send a cookie to the origin server, to offer the option not to begin a session. * to display a visual indication that a stateful session is in progress. * to let the user decide which cookies, if any, should be saved when the user concludes a window or user agent session. * to let the user examine and delete the contents of a cookie at any time. A user agent usually begins execution with no remembered state information. It SHOULD be possible to configure a user agent never to send Cookie headers, in which case it can never sustain state with an origin server. (The user agent would then behave like one that is unaware of how to handle Set-Cookie2 response headers.) When the user agent terminates execution, it SHOULD let the user discard all state information. Alternatively, the user agent MAY ask the user whether state information should be retained; the default should be "no". If the user chooses to retain state information, it would be restored the next time the user agent runs. Kristol & Montulli Standards Track [Page 20] RFC 2965 HTTP State Management Mechanism October 2000 NOTE: User agents should probably be cautious about using files to store cookies long-term. If a user runs more than one instance of the user agent, the cookies could be commingled or otherwise corrupted. 6.2 Origin Server Role An origin server SHOULD promote informed consent by adding CommentURL or Comment information to the cookies it sends. CommentURL is preferred because of the opportunity to provide richer information in a multiplicity of languages. 6.3 Clear Text The information in the Set-Cookie2 and Cookie headers is unprotected. As a consequence: 1. Any sensitive information that is conveyed in them is exposed to intruders. 2. A malicious intermediary could alter the headers as they travel in either direction, with unpredictable results. These facts imply that information of a personal and/or financial nature should only be sent over a secure channel. For less sensitive information, or when the content of the header is a database key, an origin server should be vigilant to prevent a bad Cookie value from causing failures. A user agent in a shared user environment poses a further risk. Using a cookie inspection interface, User B could examine the contents of cookies that were saved when User A used the machine. 7. SECURITY CONSIDERATIONS 7.1 Protocol Design The restrictions on the value of the Domain attribute, and the rules concerning unverifiable transactions, are meant to reduce the ways that cookies can "leak" to the "wrong" site. The intent is to restrict cookies to one host, or a closely related set of hosts. Therefore a request-host is limited as to what values it can set for Domain. We consider it acceptable for hosts host1.foo.com and host2.foo.com to share cookies, but not a.com and b.com. Similarly, a server can set a Path only for cookies that are related to the request-URI. Kristol & Montulli Standards Track [Page 21] RFC 2965 HTTP State Management Mechanism October 2000 7.2 Cookie Spoofing Proper application design can avoid spoofing attacks from related domains. Consider: 1. User agent makes request to victim.cracker.edu, gets back cookie session_id="1234" and sets the default domain victim.cracker.edu. 2. User agent makes request to spoof.cracker.edu, gets back cookie session-id="1111", with Domain=".cracker.edu". 3. User agent makes request to victim.cracker.edu again, and passes Cookie: $Version="1"; session_id="1234", $Version="1"; session_id="1111"; $Domain=".cracker.edu" The server at victim.cracker.edu should detect that the second cookie was not one it originated by noticing that the Domain attribute is not for itself and ignore it. 7.3 Unexpected Cookie Sharing A user agent SHOULD make every attempt to prevent the sharing of session information between hosts that are in different domains. Embedded or inlined objects may cause particularly severe privacy problems if they can be used to share cookies between disparate hosts. For example, a malicious server could embed cookie information for host a.com in a URI for a CGI on host b.com. User agent implementors are strongly encouraged to prevent this sort of exchange whenever possible. 7.4 Cookies For Account Information While it is common practice to use them this way, cookies are not designed or intended to be used to hold authentication information, such as account names and passwords. Unless such cookies are exchanged over an encrypted path, the account information they contain is highly vulnerable to perusal and theft. 8. OTHER, SIMILAR, PROPOSALS Apart from RFC 2109, three other proposals have been made to accomplish similar goals. This specification began as an amalgam of Kristol's State-Info proposal [DMK95] and Netscape's Cookie proposal [Netscape]. Kristol & Montulli Standards Track [Page 22] RFC 2965 HTTP State Management Mechanism October 2000 Brian Behlendorf proposed a Session-ID header that would be user- agent-initiated and could be used by an origin server to track "clicktrails". It would not carry any origin-server-defined state, however. Phillip Hallam-Baker has proposed another client-defined session ID mechanism for similar purposes. While both session IDs and cookies can provide a way to sustain stateful sessions, their intended purpose is different, and, consequently, the privacy requirements for them are different. A user initiates session IDs to allow servers to track progress through them, or to distinguish multiple users on a shared machine. Cookies are server-initiated, so the cookie mechanism described here gives users control over something that would otherwise take place without the users' awareness. Furthermore, cookies convey rich, server- selected information, whereas session IDs comprise user-selected, simple information. 9. HISTORICAL 9.1 Compatibility with Existing Implementations Existing cookie implementations, based on the Netscape specification, use the Set-Cookie (not Set-Cookie2) header. User agents that receive in the same response both a Set-Cookie and Set-Cookie2 response header for the same cookie MUST discard the Set-Cookie information and use only the Set-Cookie2 information. Furthermore, a user agent MUST assume, if it received a Set-Cookie2 response header, that the sending server complies with this document and will understand Cookie request headers that also follow this specification. New cookies MUST replace both equivalent old- and new-style cookies. That is, if a user agent that follows both this specification and Netscape's original specification receives a Set-Cookie2 response header, and the NAME and the Domain and Path attributes match (per the Cookie Management section) a Netscape-style cookie, the Netscape-style cookie MUST be discarded, and the user agent MUST retain only the cookie adhering to this specification. Older user agents that do not understand this specification, but that do understand Netscape's original specification, will not recognize the Set-Cookie2 response header and will receive and send cookies according to the older specification. Kristol & Montulli Standards Track [Page 23] RFC 2965 HTTP State Management Mechanism October 2000 A user agent that supports both this specification and Netscape-style cookies SHOULD send a Cookie request header that follows the older Netscape specification if it received the cookie in a Set-Cookie response header and not in a Set-Cookie2 response header. However, it SHOULD send the following request header as well: Cookie2: $Version="1" The Cookie2 header advises the server that the user agent understands new-style cookies. If the server understands new-style cookies, as well, it SHOULD continue the stateful session by sending a Set- Cookie2 response header, rather than Set-Cookie. A server that does not understand new-style cookies will simply ignore the Cookie2 request header. 9.2 Caching and HTTP/1.0 Some caches, such as those conforming to HTTP/1.0, will inevitably cache the Set-Cookie2 and Set-Cookie headers, because there was no mechanism to suppress caching of headers prior to HTTP/1.1. This caching can lead to security problems. Documents transmitted by an origin server along with Set-Cookie2 and Set-Cookie headers usually either will be uncachable, or will be "pre-expired". As long as caches obey instructions not to cache documents (following Expires: <a date in the past> or Pragma: no-cache (HTTP/1.0), or Cache- control: no-cache (HTTP/1.1)) uncachable documents present no problem. However, pre-expired documents may be stored in caches. They require validation (a conditional GET) on each new request, but some cache operators loosen the rules for their caches, and sometimes serve expired documents without first validating them. This combination of factors can lead to cookies meant for one user later being sent to another user. The Set-Cookie2 and Set-Cookie headers are stored in the cache, and, although the document is stale (expired), the cache returns the document in response to later requests, including cached headers. 10. ACKNOWLEDGEMENTS This document really represents the collective efforts of the HTTP Working Group of the IETF and, particularly, the following people, in addition to the authors: Roy Fielding, Yaron Goland, Marc Hedlund, Ted Hardie, Koen Holtman, Shel Kaphan, Rohit Khare, Foteos Macrides, David W. Morris. Kristol & Montulli Standards Track [Page 24] RFC 2965 HTTP State Management Mechanism October 2000 11. AUTHORS' ADDRESSES David M. Kristol Bell Laboratories, Lucent Technologies 600 Mountain Ave. Room 2A-333 Murray Hill, NJ 07974 Phone: (908) 582-2250 Fax: (908) 582-1239 EMail: dmk@bell-labs.com Lou Montulli Epinions.com, Inc. 2037 Landings Dr. Mountain View, CA 94301 EMail: lou@montulli.org 12. REFERENCES [DMK95] Kristol, D.M., "Proposed HTTP State-Info Mechanism", available at <http://portal.research.bell- labs.com/~dmk/state-info.html>, September, 1995. [Netscape] "Persistent Client State -- HTTP Cookies", available at <http://www.netscape.com/newsref/std/cookie_spec.html>, undated. [RFC2109] Kristol, D. and L. Montulli, "HTTP State Management Mechanism", RFC 2109, February 1997. [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC2279] Yergeau, F., "UTF-8, a transformation format of Unicode and ISO-10646", RFC 2279, January 1998. [RFC2396] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform Resource Identifiers (URI): Generic Syntax", RFC 2396, August 1998. [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H. and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. Kristol & Montulli Standards Track [Page 25] RFC 2965 HTTP State Management Mechanism October 2000 13. Full Copyright Statement Copyright (C) The Internet Society (2000). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Acknowledgement Funding for the RFC Editor function is currently provided by the Internet Society. Kristol & Montulli Standards Track [Page 26] |
Added doc/rfc3143.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 | Network Working Group I. Cooper Request for Comments: 3143 Equinix, Inc. Category: Informational J. Dilley Akamai Technologies, Inc. June 2001 Known HTTP Proxy/Caching Problems Status of this Memo This memo provides information for the Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited. Copyright Notice Copyright (C) The Internet Society (2001). All Rights Reserved. Abstract This document catalogs a number of known problems with World Wide Web (WWW) (caching) proxies and cache servers. The goal of the document is to provide a discussion of the problems and proposed workarounds, and ultimately to improve conditions by illustrating problems. The construction of this document is a joint effort of the Web caching community. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1 Problem Template . . . . . . . . . . . . . . . . . . . . . . 2 2. Known Problems . . . . . . . . . . . . . . . . . . . . . . . 4 2.1 Known Specification Problems . . . . . . . . . . . . . . . . 5 2.1.1 Vary header is underspecified and/or misleading . . . . . . 5 2.1.2 Client Chaining Loses Valuable Length Meta-Data . . . . . . 9 2.2 Known Architectural Problems . . . . . . . . . . . . . . . . 10 2.2.1 Interception proxies break client cache directives . . . . . 10 2.2.2 Interception proxies prevent introduction of new HTTP methods . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.3 Interception proxies break IP address-based authentication . 12 2.2.4 Caching proxy peer selection in heterogeneous networks . . . 13 2.2.5 ICP Performance . . . . . . . . . . . . . . . . . . . . . . 15 2.2.6 Caching proxy meshes can break HTTP serialization of content 16 2.3 Known Implementation Problems . . . . . . . . . . . . . . . 17 2.3.1 User agent/proxy failover . . . . . . . . . . . . . . . . . 17 2.3.2 Some servers send bad Content-Length headers for files that contain CR . . . . . . . . . . . . . . . . . . . . . . . 18 Cooper & Dilley Informational [Page 1] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 3. Security Considerations . . . . . . . . . . . . . . . . . . 18 References . . . . . . . . . . . . . . . . . . . . . . . . . 19 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 20 A. Archived Known Problems . . . . . . . . . . . . . . . . . . 21 A.1 Architectural . . . . . . . . . . . . . . . . . . . . . . . 21 A.1.1 Cannot specify multiple URIs for replicated resources . . . 21 A.1.2 Replica distance is unknown . . . . . . . . . . . . . . . . 22 A.1.3 Proxy resource location . . . . . . . . . . . . . . . . . . 23 A.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . 23 A.2.1 Use of Cache-Control headers . . . . . . . . . . . . . . . . 23 A.2.2 Lack of HTTP/1.1 compliance for caching proxies . . . . . . 24 A.2.3 ETag support . . . . . . . . . . . . . . . . . . . . . . . . 25 A.2.4 Servers and content should be optimized for caching . . . . 26 A.3 Administration . . . . . . . . . . . . . . . . . . . . . . . 27 A.3.1 Lack of fine-grained, standardized hierarchy controls . . . 27 A.3.2 Proxy/Server exhaustive log format standard for analysis . . 27 A.3.3 Trace log timestamps . . . . . . . . . . . . . . . . . . . . 28 A.3.4 Exchange format for log summaries . . . . . . . . . . . . . 29 Full Copyright Statement . . . . . . . . . . . . . . . . . . 32 1. Introduction This memo discusses problems with proxies - which act as application-level intermediaries for Web requests - and more specifically with caching proxies, which retain copies of previously requested resources in the hope of improving overall quality of service by serving the content locally. Commonly used terminology in this memo can be found in the "Internet Web Replication and Caching Taxonomy"[2]. No individual or organization has complete knowledge of the known problems in Web caching, and the editors are grateful to the contributors to this document. 1.1 Problem Template A common problem template is used within the following sections. We gratefully acknowledge RFC2525 [1] which helped define an initial format for this known problems list. The template format is summarized in the following table and described in more detail below. Name: short, descriptive name of the problem (3-5 words) Classification: classifies the problem: performance, security, etc Description: describes the problem succinctly Significance: magnitude of problem, environments where it exists Implications: the impact of the problem on systems and networks See Also: a reference to a related known problem Indications: states how to detect the presence of this problem Cooper & Dilley Informational [Page 2] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 Solution(s): describe the solution(s) to this problem, if any Workaround: practical workaround for the problem References: information about the problem or solution Contact: contact name and email address for this section Name A short, descriptive, name (3-5 words) name associated with the problem. Classification Problems are grouped into categories of similar problems for ease of reading of this memo. Choose the category that best describes the problem. The suggested categories include three general categories and several more specific categories. * Architecture: the fundamental design is incomplete, or incorrect * Specification: the spec is ambiguous, incomplete, or incorrect. * Implementation: the implementation of the spec is incorrect. * Performance: perceived page response at the client is excessive; network bandwidth consumption is excessive; demand on origin or proxy servers exceed reasonable bounds. * Administration: care and feeding of caches is, or causes, a problem. * Security: privacy, integrity, or authentication concerns. Description A definition of the problem, succinct but including necessary background information. Significance (High, Medium, Low) May include a brief summary of the environments for which the problem is significant. Implications Why the problem is viewed as a problem. What inappropriate behavior results from it? This section should substantiate the magnitude of any problem indicated with High significance. See Also Optional. List of other known problems that are related to this one. Cooper & Dilley Informational [Page 3] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 Indications How to detect the presence of the problem. This may include references to one or more substantiating documents that demonstrate the problem. This should include the network configuration that led to the problem such that it can be reproduced. Problems that are not reproducible will not appear in this memo. Solution(s) Solutions that permanently fix the problem, if such are known. For example, what version of the software does not exhibit the problem? Indicate if the solution is accepted by the community, one of several solutions pending agreement, or open possibly with experimental solutions. Workaround Practical workaround if no solution is available or usable. The workaround should have sufficient detail for someone experiencing the problem to get around it. References References to related information in technical publications or on the web. Where can someone interested in learning more go to find out more about this problem, its solution, or workarounds? Contact Contact name and email address of the person who supplied the information for this section. The editors are listed as contacts for anonymous submissions. 2. Known Problems The remaining sections of this document present the currently documented known problems. The problems are ordered by classification and significance. Issues with protocol specification or architecture are first, followed by implementation issues. Issues of high significance are first, followed by lower significance. Some of the problems initially identified in the previous versions of this document have been moved to Appendix A since they discuss issues where resolution primarily involves education rather than protocol work. A full list of the problems is available in the table of contents. Cooper & Dilley Informational [Page 4] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 2.1 Known Specification Problems 2.1.1 Vary header is underspecified and/or misleading Name The "Vary" header is underspecified and/or misleading Classification Specification Description The Vary header in HTTP/1.1 was designed to allow a caching proxy to safely cache responses even if the server's choice of variants is not entirely understood. As RFC 2616 says: The Vary header field can be used to express the parameters the server uses to select a representation that is subject to server-driven negotiation. One might expect that this mechanism is useful in general for extensions that change the response message based on some aspects of the request. However, that is not true. During the design of the HTTP delta encoding specification[9] it was realized that an HTTP/1.1 proxy that does not understand delta encoding might cache a delta-encoded response and then later deliver it to a non-delta-capable client, unless the extension included some mechanism to prevent this. Initially, it was thought that Vary would suffice, but the following scenario proves this wrong. NOTE: It is likely that other scenarios exhibiting the same basic problem with "Vary" could be devised, without reference to delta encoding. This is simply a concrete scenario used to explain the problem. A complete description of the IM and A-IM headers may be found in the "Delta encoding in HTTP" specification. For the purpose of this problem description, the relevant details are: 1. The concept of an "instance manipulation" is introduced. In some ways, this is similar to a content-coding, but there are differences. One example of an instance manipulation name is "vcdiff". 2. A client signals its willingness to accept one or more instance-manipulations using the A-IM header. Cooper & Dilley Informational [Page 5] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 3. A server indicates which instance-manipulations are used to encode the body of a response using the IM header. 4. Existing implementations will ignore the A-IM and IM headers, following the usual HTTP rules for handling unknown headers. 5. Responses encoded with an instance-manipulation are sent using the (proposed) 226 status code, "IM Used". 6. In response to a conditional request that carries an IM header, if the request-URI has been modified then a server may transmit a compact encoding of the modifications using a delta-encoding instead of a status-200 response. The encoded response cannot be understood by an implementation that does not support delta encodings. This summary omits many details. Suppose client A sends this request via proxy P: GET http://example.com/foo.html HTTP/1.1 Host: example.com If-None-Match: "abc" A-IM: vcdiff and the origin server returns, via P, this response: HTTP/1.1 226 IM Used Etag: "def" Date: Wed, 19 Apr 2000 18:46:13 GMT IM: vcdiff Cache-Control: max-age-60 Vary: A-IM, If-None-Match the body of which is a delta-encoded response (it encodes the difference between the Etag "abc" instance of foo.html, and the "def" instance). Assume that P stores this response in its cache, and that P does not understand the vcdiff encoding. Later, client B, also ignorant of delta-encoding, sends this request via P: GET http://example.com/foo.html HTTP/1.1 Host: example.com What can P do now? According to the specification for the Vary header in RFC2616, Cooper & Dilley Informational [Page 6] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 The Vary field value indicates the set of request-header fields that fully determines, while the response is fresh, whether a cache is permitted to use the response to reply to a subsequent request without revalidation. Implicitly, however, the cache would be allowed to use the stored response in response to client B WITH "revalidation". This is the potential bug. An obvious implementation of the proxy would send this request to test whether its cache entry is fresh (i.e., to revalidate the entry): GET /foo.html HTTP/1.1 Host: example.com If-None-Match: "def" That is, the proxy simply forwards the new request, after doing the usual transformation on the URL and tacking on the "obvious" If-None-Match header. If the origin server's Etag for the current instance is still "def", it would naturally respond: HTTP/1.1 304 Not Modified Etag: "def" Date: Wed, 19 Apr 2000 18:46:14 GMT thus telling the proxy P that it can use its stored response. But this cache response actually involves a delta-encoding that would not be sensible to client B, signaled by a header field that would be ignored by B, and so the client displays garbage. The problem here is that the original request (from client A) generated a response that is not sensible to client B, not merely one that is not "the appropriate representation" (as the result of server-driven negotiation). One might argue that the proxy P shouldn't be storing status-226 responses in the first place. True in theory, perhaps, but unfortunately RFC2616, section 13.4, says: A response received with any [status code other than 200, 203, 206, 300, 301 or 410] MUST NOT be returned in a reply to a subsequent request unless there are cache-control directives or another header(s) that explicitly allow it. For example, these Cooper & Dilley Informational [Page 7] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 include the following: an Expires header (section 14.21); a "max-age", "s-maxage", "must-revalidate", "proxy-revalidate", "public" or "private" cache-control directive (section 14.9). In other words, the specification allows caching of responses with yet-to-be-defined status codes if the response carries a plausible Cache-Control directive. So unless we ban servers implementing this kind of extension from using these Cache-Control directives at all, the Vary header just won't work. Significance Medium Implications Certain plausible extensions to the HTTP/1.1 protocol might not interoperate correctly with older HTTP/1.1 caches, if the extensions depend on an interpretation of Vary that is not the same as is used by the cache implementer. This would have the effect either of causing hard-to-debug cache transparency failures, or of discouraging the deployment of such extensions, or of encouraging the implementers of such extensions to disable caching entirely. Indications The problem is visible when hand-simulating plausible message exchanges, especially when using the proposed delta encoding extension. It probably has not been visible in practice yet. Solution(s) 1. Section 13.4 of the HTTP/1.1 specification should probably be changed to prohibit caching of responses with status codes that the cache doesn't understand, whether or not they include Expires headers and the like. (It might require some care to define what "understands" means, leaving room for future extensions with new status codes.) The behavior in this case needs to be defined as equivalent to "Cache-Control: no-store" rather than "no-cache", since the latter allows revalidation. Possibly the specification of Vary should require that it be treated as "Cache-Control: no-store" whenever the status code is unknown - that should solve the problem in the scenario given here. Cooper & Dilley Informational [Page 8] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 2. Designers of HTTP/1.1 extensions should consider using mechanisms other than Vary to prevent false caching. It is not clear whether the Vary mechanism is widely implemented in caches; if not, this favors solution #1. Workaround A cache could treat the presence of a Vary header in a response as an implicit "Cache-control: no-store", except for "known" status codes, even though this is not required by RFC 2616. This would avoid any transparency failures. "Known status codes" for basic HTTP/1.1 caches probably include: 200, 203, 206, 300, 301, 410 (although this list should be re-evaluated in light of the problem discussed here). References See [9] for the specification of the delta encoding extension, as well as for an example of the use of a Cache-Control extension instead of "Vary." Contact Jeff Mogul <mogul@pa.dec.com> 2.1.2 Client Chaining Loses Valuable Length Meta-Data Name Client Chaining Loses Valuable Length Meta-Data Classification Performance Description HTTP/1.1[3] implementations are prohibited from sending Content- Length headers with any message whose body has been Transfer- Encoded. Because 1.0 clients cannot accept chunked Transfer- Encodings, receiving 1.1 implementations must forward the body to 1.0 clients must do so without the benefit of information that was discarded earlier in the chain. Significance Low Implications Lacking either a chunked transfer encoding or Content-Length indication creates negative performance implications for how the proxy must forward the message body. Cooper & Dilley Informational [Page 9] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 In the case of response bodies, the server may either forward the response while closing the connection to indicate the end of the response or must utilize store and forward semantics to buffer the entire response in order to calculate a Content-Length. The former option defeats the performance benefits of persistent connections in HTTP/1.1 (and their Keep-Alive cousin in HTTP/1.0) as well as creating some ambiguously lengthed responses. The latter store and forward option may not even be feasible given the size of the resource and it will always introduce increased latency. Request bodies must undertake the store and forward process as 1.0 request bodies must be delimited by Content-Length headers. As with response bodies this may place unacceptable resource constraints on the proxy and the request may not be able to be satisfied. Indications The lack of HTTP/1.0 style persistent connections between 1.0 clients and 1.1 proxies, only when accessing 1.1 servers, is a strong indication of this problem. Solution(s) An HTTP specification clarification that would allow origin known identity document Content-Lengths to be carried end to end would alleviate this issue. Workaround None. Contact Patrick McManus <mcmanus@AppliedTheory.com> 2.2 Known Architectural Problems 2.2.1 Interception proxies break client cache directives Name Interception proxies break client cache directives Classification Architecture Description HTTP[3] is designed for the user agent to be aware if it is connected to an origin server or to a proxy. User agents believing they are transacting with an origin server but which are Cooper & Dilley Informational [Page 10] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 really in a connection with an interception proxy may fail to send critical cache-control information they would have otherwise included in their request. Significance High Implications Clients may receive data that is not synchronized with the origin even when they request an end to end refresh, because of the lack of inclusion of either a "Cache-control: no-cache" or "must- revalidate" header. These headers have no impact on origin server behavior so may not be included by the browser if it believes it is connected to that resource. Other related data implications are possible as well. For instance, data security may be compromised by the lack of inclusion of "private" or "no-store" clauses of the Cache-control header under similar conditions. Indications Easily detected by placing fresh (un-expired) content on a caching proxy while changing the authoritative copy, then requesting an end-to-end reload of the data through a proxy in both interception and explicit modes. Solution(s) Eliminate the need for interception proxies and IP spoofing, which will return correct context awareness to the client. Workaround Include relevant Cache-Control directives in every request at the cost of increased bandwidth and CPU requirements. Contact Patrick McManus <mcmanus@AppliedTheory.com> 2.2.2 Interception proxies prevent introduction of new HTTP methods Name Interception proxies prevent introduction of new HTTP methods Classification Architecture Description A proxy that receives a request with a method unknown to it is required to generate an HTTP 501 Error as a response. HTTP methods are designed to be extensible so there may be applications deployed with initial support just for the user agent and origin Cooper & Dilley Informational [Page 11] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 server. An interception proxy that hijacks requests which include new methods destined for servers that have implemented those methods creates a de-facto firewall where none may be intended. Significance Medium within interception proxy environments. Implications Renders new compliant applications useless unless modifications are made to proxy software. Because new methods are not required to be globally standardized it is impossible to keep up to date in the general case. Solution(s) Eliminate the need for interception proxies. A client receiving a 501 in a traditional HTTP environment may either choose to repeat the request to the origin server directly, or perhaps be configured to use a different proxy. Workaround Level 5 switches (sometimes called Level 7 or application layer switches) can be used to keep HTTP traffic with unknown methods out of the proxy. However, these devices have heavy buffering responsibilities, still require TCP sequence number spoofing, and do not interact well with persistent connections. The HTTP/1.1 specification allows a proxy to switch over to tunnel mode when it receives a request with a method or HTTP version it does not understand how to handle. Contact Patrick McManus <mcmanus@AppliedTheory.com> Henrik Nordstrom <hno@hem.passagen.se> (HTTP/1.1 clarification) 2.2.3 Interception proxies break IP address-based authentication Name Interception proxies break IP address-based authentication Classification Architecture Description Some web servers are not open for public access, but restrict themselves to accept only requests from certain IP address ranges for security reasons. Interception proxies alter the source (client) IP addresses to that of the proxy itself, without the Cooper & Dilley Informational [Page 12] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 knowledge of the client/user. This breaks such authentication mechanisms and prohibits otherwise allowed clients access to the servers. Significance Medium Implications Creates end user confusion and frustration. Indications Users may start to see refused connections to servers after interception proxies are deployed. Solution(s) Use user-based authentication instead of (IP) address-based authentication. Workaround Using IP filters at the intercepting device (L4 switch) and bypass all requests to such servers concerned. Contact Keith K. Chau <keithc@unitechnetworks.com> 2.2.4 Caching proxy peer selection in heterogeneous networks Name Caching proxy peer selection in heterogeneous networks Classification Architecture Description ICP[4] based caching proxy peer selection in networks with large variance in latency and bandwidth between peers can lead to non- optimal peer selection. For example take Proxy C with two siblings, Sib1 and Sib2, and the following network topology (summarized). * Cache C's link to Sib1, 2 Mbit/sec with 300 msec latency * Cache C's link to Sib2, 64 Kbit/sec with 10 msec latency. ICP[4] does not work well in this context. If a user submits a request to Proxy C for page P that results in a miss, C will send an ICP request to Sib1 and Sib2. Assume both siblings have the Cooper & Dilley Informational [Page 13] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 requested object P. The ICP_HIT reply will always come from Sib2 before Sib1. However, it is clear that the retrieval of large objects will be faster from Sib1, rather than Sib2. The problem is more complex because Sib1 and Sib2 can't have a 100% hit ratio. With a hit rate of 10%, it is more efficient to use Sib1 with resources larger than 48K. The best choice depends on at least the hit rate and link characteristics; maybe other parameters as well. Significance Medium Implications By using the first peer to respond, peer selection algorithms are not optimizing retrieval latency to end users. Furthermore they are causing more work for the high-latency peer since it must respond to such requests but will never be chosen to serve content if the lower latency peer has a copy. Indications Inherent in design of ICP v1, ICP v2, and any cache mesh protocol that selects peers based upon first response. This problem is not exhibited by cache digest or other protocols which (attempt to) maintain knowledge of peer contents and only hit peers that are believed to have a copy of the requested page. Solution(s) This problem is architectural with the peer selection protocols. Workaround Cache mesh design when using such a protocol should be done in such a way that there is not a high latency variance among peers. In the example presented in the above description the high latency high bandwidth peer could be used as a parent, but should not be used as a sibling. Contact Ivan Lovric <ivan.lovric@cnet.francetelecom.fr> John Dilley <jad@akamai.com> Cooper & Dilley Informational [Page 14] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 2.2.5 ICP Performance Name ICP performance Classification Architecture(ICP), Performance Description ICP[4] exhibits O(n^2) scaling properties, where n is the number of participating peer proxies. This can lead ICP traffic to dominate HTTP traffic within a network. Significance Medium Implications If a proxy has many ICP peers the bandwidth demand of ICP can be excessive. System managers must carefully regulate ICP peering. ICP also leads proxies to become homogeneous in what they serve; if your proxy does not have a document it is unlikely your peers will have it either. Therefore, ICP traffic requests are largely unable to locate a local copy of an object (see [6]). Indications Inherent in design of ICP v1, ICP v2. Solution(s) This problem is architectural - protocol redesign or replacement is required to solve it if ICP is to continue to be used. Workaround Implementation workarounds exist, for example to turn off use of ICP, to carefully regulate peering, or to use another mechanism if available, such as cache digests. A cache digest protocol shares a summary of cache contents using a Bloom Filter technique. This allows a cache to estimate whether a peer has a document. Filters are updated regularly but are not always up-to-date so cannot help when a spike in popularity occurs. They also increase traffic but not as much as ICP. Proxy clustering protocols organize proxies into a mesh provide another alternative solution. There is ongoing research on this topic. Contact John Dilley <jad@akamai.com> Cooper & Dilley Informational [Page 15] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 2.2.6 Caching proxy meshes can break HTTP serialization of content Name Caching proxy meshes can break HTTP serialization of content Classification Architecture (HTTP protocol) Description A caching proxy mesh where a request may travel different paths, depending on the state of the mesh and associated caches, can break HTTP content serialization, possibly causing the end user to receive older content than seen on an earlier request, where the request traversed another path in the mesh. Significance Medium Implications Can cause end user confusion. May in some situations (sibling cache hit, object has changed state from cacheable to uncacheable) be close to impossible to get the caches properly updated with the new content. Indications Older content is unexpectedly returned from a caching proxy mesh after some time. Solutions(s) Work with caching proxy vendors and researchers to find a suitable protocol for maintaining proxy relations and object state in a mesh. Workaround When designing a hierarchy/mesh, make sure that for each end- user/URL combination there is only one single path in the mesh during normal operation. Contact Henrik Nordstrom <hno@hem.passagen.se> Cooper & Dilley Informational [Page 16] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 2.3 Known Implementation Problems 2.3.1 User agent/proxy failover Name User agent/proxy failover Classification Implementation Description Failover between proxies at the user agent (using a proxy.pac[8] file) is erratic and no standard behavior is defined. Additionally, behavior is hard-coded into the browser, so that proxy administrators cannot use failover at the user agent effectively. Significance Medium Implications Architects are forced to implement failover at the proxy itself, when it may be more appropriate and economical to do it within the user agent. Indications If a browser detects that its primary proxy is down, it will wait n minutes before trying the next one it is configured to use. It will then wait y minutes before asking the user if they'd like to try the original proxy again. This is very confusing for end users. Solution(s) Work with browser vendors to establish standard extensions to JavaScript proxy.pac libraries that will allow configuration of these timeouts. Workaround User education; redundancy at the proxy level. Contact Mark Nottingham <mnot@mnot.net> Cooper & Dilley Informational [Page 17] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 2.3.2 Some servers send bad Content-Length headers for files that contain CR Name Some servers send bad Content-Length headers for files that contain CR Classification Implementation Description Certain web servers send a Content-length value that is larger than number of bytes in the HTTP message body. This happens when the server strips off CR characters from text files with lines terminated with CRLF as the file is written to the client. The server probably uses the stat() system call to get the file size for the Content-Length header. Servers that exhibit this behavior include the GN Web server (version 2.14 at least). Significance Low. Surveys indicate only a small number of sites run faulty servers. Implications In this case, an HTTP client (e.g., user agent or proxy) may believe it received a partial response. HTTP/1.1 [3] advises that caches MAY store partial responses. Indications Count the number of bytes in the message body and compare to the Content-length value. If they differ the server exhibits this problem. Solutions Upgrade or replace the buggy server. Workaround Some browsers and proxies use one TCP connection per object and ignore the Content-Length. The document end of file is identified by the close of the TCP socket. Contact Duane Wessels <wessels@measurement-factory.com> 3. Security Considerations This memo does not raise security considerations in itself. See the individual submissions for details of security concerns and issues. Cooper & Dilley Informational [Page 18] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 References [1] Paxson, V., Allman, M., Dawson, S., Fenner, W., Griner, J., Heavens, I., Lahey, K., Semke, J. and B. Volz, "Known TCP Implementation Problems", RFC 2525, March 1999. [2] Cooper, I., Melve, I. and G. Tomlinson, "Internet Web Replication and Caching Taxonomy", RFC 3040, January 2001. [3] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. [4] Wessels, D. and K. Claffy, "Internet Cache Protocol (ICP), Version 2", RFC 2186, September 1997. [5] Davison, B., "Web Traffic Logs: An Imperfect Resource for Evaluation", in Proceedings of the Ninth Annual Conference of the Internet Society (INET'99), July 1999. [6] Melve, I., "Relation Analysis, Cache Meshes", in Proceedings of the 3rd International WWW Caching Workshop, June 1998, <http://wwwcache.ja.net/events/workshop/29/magicnumber.html>. [7] Krishnamurthy, B. and M. Arlett, "PRO-COW: Protocol Compliance on the Web", AT&T Labs Technical Report #990803-05-TM, August 1999, <http://www.research.att.com/~bala/papers/procow-1.ps.gz>. [8] Netscape, Inc., "Navigator Proxy Auto-Config File Format", March 1996, http://home.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy- live.html [9] Mogul, J., Krishnamurthy, B., Douglis, F., Feldmann, A., Goland, Y., van Hoff, A. and D. Hellerstein, "HTTP Delta in HTTP", Work in Progress. Cooper & Dilley Informational [Page 19] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 Authors' Addresses Ian Cooper Equinix, Inc. 2450 Bayshore Parkway Mountain View, CA 94043 USA Phone: +1 650 316 6065 EMail: icooper@equinix.com John Dilley Akamai Technologies, Inc. 1400 Fashion Island Blvd Suite 703 San Mateo, CA 94404 USA Phone: +1 650 627 5244 EMail: jad@akamai.com Cooper & Dilley Informational [Page 20] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 Appendix A. Archived Known Problems The following sub-sections are an archive of problems identified in the initial production of this memo. These are typically problems requiring further work/research, or user education. They are included here for reference purposes only. A.1 Architectural A.1.1 Cannot specify multiple URIs for replicated resources Name Cannot specify multiple URIs for replicated resources Classification Architecture Description There is no way to specify that multiple URIs may be used for a single resource, one for each replica of the resource. Similarly, there is no way to say that some set of proxies (each identified by a URI) may be used to resolve a URI. Significance Medium Implications Forces users to understand the replication model and mechanism. Makes it difficult to create a replication framework without protocol support for replication and naming. Indications Inherent in HTTP/1.0, HTTP/1.1. Solution(s) Architectural - protocol design is necessary. Workaround Replication mechanisms force users to locate a replica or mirror site for replicated content. Contact Daniel LaLiberte <liberte@w3.org> Cooper & Dilley Informational [Page 21] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 A.1.2 Replica distance is unknown Name Replica distance is unknown Classification Architecture Description There is no recommended way to find out which of several servers or proxies is closer either to the requesting client or to another machine, either geographically or in the network topology. Significance Medium Implications Clients must guess which replica is closer to them when requesting a copy of a document that may be served from multiple locations. Users must know the set of servers that can serve a particular object. This in general is hard to determine and maintain. Users must understand network topology in order to choose the closest copy. Note that the closest copy is not always the one that will result in quickest service. A nearby but heavily loaded server may be slower than a more distant but lightly loaded server. Indications Inherent in HTTP/1.0, HTTP/1.1. Solution(s) Architectural - protocol work is necessary. This is a specific instance of a general problem in widely distributed systems. A general solution is unlikely, however a specific solution in the web context is possible. Workaround Servers can (many do) provide location hints in a replica selection web page. Users choose one based upon their location. Users can learn which replica server gives them best performance. Note that the closest replica geographically is not necessarily the closest in terms of network topology. Expecting users to understand network topology is unreasonable. Contact Daniel LaLiberte <liberte@w3.org> Cooper & Dilley Informational [Page 22] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 A.1.3 Proxy resource location Name Proxy resource location Classification Architecture Description There is no way for a client or server (including another proxy) to inform a proxy of an alternate address (perhaps including the proxy to use to reach that address) to use to fetch a resource. If the client does not trust where the redirected resource came from, it may need to validate it or validate where it came from. Significance Medium Implications Proxies have no systematic way to locate resources within other proxies or origin servers. This makes it more difficult to share information among proxies. Information sharing would improve global efficiency. Indications Inherent in HTTP/1.0, HTTP/1.1. Solution(s) Architectural - protocol design is necessary. Workaround Certain proxies share location hints in the form of summary digests of their contents (e.g., Squid). Certain proxy protocols enable a proxy query another for its contents (e.g., ICP). (See however "ICP Performance" issue (Section 2.2.5).) Contact Daniel LaLiberte <liberte@w3.org> A.2 Implementation A.2.1 Use of Cache-Control headers Name Use of Cache-Control headers Classification Implementation Cooper & Dilley Informational [Page 23] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 Description Many (if not most) implementations incorrectly interpret Cache- Control response headers. Significance High Implications Cache-Control headers will be spurned by end users if there are conflicting or non-standard implementations. Indications - Solution(s) Work with vendors and others to assure proper application Workaround None. Contact Mark Nottingham <mnot@mnot.net> A.2.2 Lack of HTTP/1.1 compliance for caching proxies Name Lack of HTTP/1.1 compliance for caching proxies Classification Implementation Description Although performance benchmarking of caches is starting to be explored, protocol compliance is just as important. Significance High Implications Caching proxy vendors implement their interpretation of the specification; because the specification is very large, sometimes vague and ambiguous, this can lead to inconsistent behavior between caching proxies. Caching proxies need to comply to the specification (or the specification needs to change). Cooper & Dilley Informational [Page 24] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 Indications There is no currently known compliance test being used. There is work underway to quantify how closely servers comply with the current specification. A joint technical report between AT&T and HP Labs [7] describes the compliance testing. This report examines how well each of a set of top traffic-producing sites support certain HTTP/1.1 features. The Measurement Factory (formerly IRCache) is working to develop protocol compliance testing software. Running such a conformance test suite against caching proxy products would measure compliance and ultimately would help assure they comply to the specification. Solution(s) Testing should commence and be reported in an open industry forum. Proxy implementations should conform to the specification. Workaround There is no workaround for non-compliance. Contact Mark Nottingham <mnot@mnot.net> Duane Wessels <wessels@measurement-factory.com> A.2.3 ETag support Name ETag support Classification Implementation Description Available caching proxies appear not to support ETag (strong) validation. Significance Medium Implications Last-Modified/If-Modified-Since validation is inappropriate for many requirements, both because of its weakness and its use of dates. Lack of a usable, strong coherency protocol leads developers and end users not to trust caches. Indications - Cooper & Dilley Informational [Page 25] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 Solution(s) Work with vendors to implement ETags; work for better validation protocols. Workaround Use Last-Modified/If-Modified-Since validation. Contact Mark Nottingham <mnot@mnot.net> A.2.4 Servers and content should be optimized for caching Name Servers and content should be optimized for caching Classification Implementation (Performance) Description Many web servers and much web content could be implemented to be more conducive to caching, reducing bandwidth demand and page load delay. Significance Medium Implications By making poor use of caches, origin servers encourage longer load times, greater load on caching proxies, and increased network demand. Indications The problem is most apparent for pages that have low or zero expires time, yet do not change. Solution(s) - Workaround Servers could start using unique object identifiers for write-only content: if an object changes it gets a new name, otherwise it is considered to be immutable and therefore have an infinite expire age. Certain hosting providers do this already. Contact Peter Danzig Cooper & Dilley Informational [Page 26] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 A.3 Administration A.3.1 Lack of fine-grained, standardized hierarchy controls Name Lack of fine-grained, standardized hierarchy controls Classification Administration Description There is no standard for instructing a proxy as to how it should resolve the parent to fetch a given object from. Implementations therefore vary greatly, and it can be difficult to make them interoperate correctly in a complex environment. Significance Medium Implications Complications in deployment of caches in a complex network (especially corporate networks) Indications Inability of some proxies to be configured to direct traffic based on domain name, reverse lookup IP address, raw IP address, in normal operation and in failover mode. Inability in some proxies to set a preferred parent / backup parent configuration. Solution(s) - Workaround Work with vendors to establish an acceptable configuration within the limits of their product; standardize on one product. Contact Mark Nottingham <mnot@mnot.net> A.3.2 Proxy/Server exhaustive log format standard for analysis Name Proxy/Server exhaustive log format standard for analysis Classification Administration Cooper & Dilley Informational [Page 27] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 Description Most proxy or origin server logs used for characterization or evaluation do not provide sufficient detail to determine cacheability of responses. Significance Low (for operationality; high significance for research efforts) Implications Characterizations and simulations are based on non-representative workloads. See Also W3C Web Characterization Activity, since they are also concerned with collecting high quality logs and building characterizations from them. Indications - Solution(s) To properly clean and to accurately determine cacheability of responses, a complete log is required (including all request headers as well as all response headers such as "User-agent" [for removal of spiders] and "Expires", "max-age", "Set-cookie", "no- cache", etc.) Workaround - References See "Web Traffic Logs: An Imperfect Resource for Evaluation"[5] for some discussion of this. Contact Brian D. Davison <davison@acm.org> Terence Kelly <tpkelly@eecs.umich.edu> A.3.3 Trace log timestamps Name Trace log timestamps Classification Administration Cooper & Dilley Informational [Page 28] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 Description Some proxies/servers log requests without sufficient timing detail. Millisecond resolution is often too small to preserve request ordering and either the servers should record request reception time in addition to completion time, or elapsed time plus either one. Significance Low (for operationality; medium significance for research efforts) Implications Characterization and simulation fidelity is improved with accurate timing and ordering information. Since logs are generally written in order of request completion, these logs cannot be re-played without knowing request generation times and reordering accordingly. See Also - Indications Timestamps can be identical for multiple entries (when only millisecond resolution is used). Request orderings can be jumbled when clients open additional connections for embedded objects while still receiving the container object. Solution(s) Since request completion time is common (e.g., Squid), recommend continuing to use it (with microsecond resolution if possible) plus recording elapsed time since request reception. Workaround - References See "Web Traffic Logs: An Imperfect Resource for Evaluation"[5] for some discussion of this. Contact Brian D. Davison <davison@acm.org> A.3.4 Exchange format for log summaries Name Exchange format for log summaries Classification Administration/Analysis? Cooper & Dilley Informational [Page 29] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 Description Although we have (more or less) a standard log file format for proxies (plain vanilla Common Logfile and Squid), there isn't a commonly accepted format for summaries of those log files. Summaries could be generated by the cache itself, or by post- processing existing log file formats such as Squid's. Significance High, since it means that each log file summarizing/analysis tool is essentially reinventing the wheel (un-necessary repetition of code), and the cost of processing a large number of large log files through a variety of analysis tools is (again for no good reason) excessive. Implications In order to perform a meaningful analysis (e.g., to measure performance in relation to loading/configuration over time) the access logs from multiple busy caches, it's often necessary to run first one tool then another, each against the entire log file (or a significantly large subset of the log). With log files running into hundreds of MB even after compression (for a cache dealing with millions of transactions per day) this is a non-trivial task. See Also IP packet/header sniffing - it may be that individual transactions are at a level of granularity which simply isn't sensible to be attempting on extremely busy caches. There may also be legal implications in some countries, e.g., if this analysis identifies individuals. Indications Disks/memory full(!) Stats (using multiple programs) take too long to run. Stats crunching must be distributed out to multiple machines because of its high computational cost. Solution(s) Have the proxy produce a standardized summary of its activity either automatically or via an external (e.g., third party) tool, in a commonly agreed format. The format could be something like XML or the Extended Common Logfile, but the format and contents are subjects for discussion. Ideally this approach would permit individual cache server products to supply subsets of the possible summary info, since it may not be feasible for all servers to provide all of the information which people would like to see. Cooper & Dilley Informational [Page 30] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 Workaround Devise a private summary format for your own personal use - but this complicates or even precludes the exchange of summary info with other interested parties. References See the web pages for the commonly used cache stats analysis programs, e.g., Calamaris, squidtimes, squidclients, etc. Contact Martin Hamilton <martin@wwwcache.ja.net> Cooper & Dilley Informational [Page 31] RFC 3143 Known HTTP Proxy/Caching Problems June 2001 Full Copyright Statement Copyright (C) The Internet Society (2001). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Acknowledgement Funding for the RFC Editor function is currently provided by the Internet Society. Cooper & Dilley Informational [Page 32] |
Added doc/rfc3205.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 | Network Working Group K. Moore Request for Comments: 3205 University of Tennessee BCP: 56 February 2002 Category: Best Current Practice On the use of HTTP as a Substrate Status of this Memo This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements. Distribution of this memo is unlimited. Copyright Notice Copyright (C) The Internet Society (2002). All Rights Reserved. Abstract Recently there has been widespread interest in using Hypertext Transfer Protocol (HTTP) as a substrate for other applications-level protocols. This document recommends technical particulars of such use, including use of default ports, URL schemes, and HTTP security mechanisms. 1. Introduction Recently there has been widespread interest in using Hypertext Transfer Protocol (HTTP) [1] as a substrate for other applications- level protocols. Various reasons cited for this interest have included: o familiarity and mindshare, o compatibility with widely deployed browsers, o ability to reuse existing servers and client libraries, o ease of prototyping servers using CGI scripts and similar extension mechanisms, o ability to use existing security mechanisms such as HTTP digest authentication [2] and SSL or TLS [3], o the ability of HTTP to traverse firewalls, and o cases where a server often needs to support HTTP anyway. Moore Best Current Practice [Page 1] RFC 3205 HTTP Layering February 2002 The Internet community has a long tradition of protocol reuse, dating back to the use of Telnet [4] as a substrate for FTP [5] and SMTP [6]. However, the recent interest in layering new protocols over HTTP has raised a number of questions when such use is appropriate, and the proper way to use HTTP in contexts where it is appropriate. Specifically, for a given application that is layered on top of HTTP: o Should the application use a different port than the HTTP default of 80? o Should the application use traditional HTTP methods (GET, POST, etc.) or should it define new methods? o Should the application use http: URLs or define its own prefix? o Should the application define its own MIME-types, or use something that already exists (like registering a new type of MIME-directory structure)? This memo recommends certain design decisions in answer to these questions. This memo is intended as advice and recommendation for protocol designers, working groups, implementors, and IESG, rather than as a strict set of rules which must be adhered to in all cases. Accordingly, the capitalized key words defined in RFC 2119, which are intended to indicate conformance to a specification, are not used in this memo. 2. Issues Regarding the Design Choice to use HTTP Despite the advantages listed above, it's worth asking the question as to whether HTTP should be used at all, or whether the entire HTTP protocol should be used. 2.1 Complexity HTTP started out as a simple protocol, but quickly became much more complex due to the addition of several features unanticipated by its original design. These features include persistent connections, byte ranges, content negotiation, and cache support. All of these are useful for traditional web applications but may not be useful for the layered application. The need to support (or circumvent) these features can add additional complexity to the design and implementation of a protocol layered on top of HTTP. Even when HTTP can be "profiled" to minimize implementation overhead, the effort of specifying such a profile might be more than the effort of specifying a purpose-built protocol which is better suited to the task at hand. Moore Best Current Practice [Page 2] RFC 3205 HTTP Layering February 2002 Even if existing HTTP client and server code can often be re-used, the additional complexity of layering something over HTTP vs. using a purpose-built protocol can increase the number of interoperability problems. 2.2 Overhead Further, although HTTP can be used as the transport for a "remote procedure call" paradigm, HTTP's protocol overhead, along with the connection setup overhead of TCP, can make HTTP a poor choice. A protocol based on UDP, or with both UDP and TCP variants, should be considered if the payloads are very likely to be small (less than a few hundred bytes) for the foreseeable future. This is especially true if the protocol might be heavily used, or if it might be used over slow or expensive links. On the other hand, the connection setup overhead can become negligible if the layered protocol can utilize HTTP/1.1's persistent connections, and if the same client and server are likely to perform several transactions during the time the HTTP connection is open. 2.3 Security Although HTTP appears at first glance to be one of the few "mature" Internet protocols that can provide good security, there are many applications for which neither HTTP's digest authentication nor TLS are sufficient by themselves. Digest authentication requires a secret (e.g., a password) to be shared between client and server. This further requires that each client know the secret to be used with each server, but it does not provide any means of securely transmitting such secrets between the parties. Shared secrets can work fine for small groups where everyone is physically co-located; they don't work as well for large or dispersed communities of users. Further, if the server is compromised a large number of secrets may be exposed, which is especially dangerous if the same secret (or password) is used for several applications. (Similar concerns exist with TLS based clients or servers - if a private key is compromised then the attacker can impersonate the party whose key it has.) TLS and its predecessor SSL were originally designed to authenticate web servers to clients, so that a user could be assured (for example) that his credit card number was not being sent to an imposter. However, many applications need to authenticate clients to servers, or to provide mutual authentication of client and server. TLS does Moore Best Current Practice [Page 3] RFC 3205 HTTP Layering February 2002 have a capability to provide authentication in each direction, but such authentication may or may not be suitable for a particular application. Web browsers which support TLS or SSL are typically shipped with the public keys of several certificate authorities (CAs) "wired in" so that they can verify the identity of any server whose public key was signed by one of those CAs. For this to work well, every secure web server's public key has to be signed by one of the CAs whose keys are wired into popular browsers. This deployment model works when there are a (relatively) small number of servers whose identities can be verified, and their public keys signed, by the small number of CAs whose keys are included in a small number of different browsers. This scheme does not work as well to authenticate millions of potential clients to servers. It would take a much larger number of CAs to do the job, each of which would need to be widely trusted by servers. Those CAs would also have a more difficult time verifying the identities of (large numbers of) ordinary users than they do in verifying the identities of (a smaller number of) commercial and other enterprises that need to run secure web servers. Also, in a situation where there were a large number of clients authenticating with TLS, it seems unlikely that there would be a set of CAs whose keys were trusted by every server. A client that potentially needed to authenticate to multiple servers would therefore need to be configured as to which key to use with which server when attempting to establish a secure connection to the server. For the reasons stated above, client authentication is rarely used with TLS. A common technique is to use TLS to authenticate the server to the client and to establish a private channel, and for the client to authenticate to the server using some other means - for example, a username and password using HTTP basic or digest authentication. For any application that requires privacy, the 40-bit ciphersuites provided by some SSL implementations (to conform to outdated US export regulations or to regulations on the use or export of cryptography in other countries) are unsuitable. Even 56-bit DES encryption, which is required of conforming TLS implementations, has been broken in a matter of days with a modest investment in resources. So if TLS is chosen it may be necessary to discourage use of small key lengths, or of weak ciphersuites, in order to provide adequate privacy assurance. If TLS is used to provide privacy for passwords sent by clients then it is especially important to support longer keys. Moore Best Current Practice [Page 4] RFC 3205 HTTP Layering February 2002 None of the above should be taken to mean that either digest authentication or TLS are generally inferior to other authentication systems, or that they are unsuitable for use in other applications besides HTTP. Many of the limitations of TLS and digest authentication also apply to other authentication and privacy systems. The point here is that neither TLS nor digest authentication is a "magic pixie dust" solution to authentication or privacy. In every case, an application's designers must carefully determine the application's users' requirements for authentication and privacy before choosing an authentication or privacy mechanism. Note also that TLS can be used with other TCP-based protocols, and there are SASL [7] mechanisms similar to HTTP's digest authentication. So it is not necessary to use HTTP in order to benefit from either TLS or digest-like authentication. However, HTTP APIs may already support TLS and/or digest. 2.4 Compatibility with Proxies, Firewalls, and NATs One oft-cited reason for the use of HTTP is its ability to pass through proxies, firewalls, or network address translators (NATs). One unfortunate consequence of firewalls and NATs is that they make it harder to deploy new Internet applications, by requiring explicit permission (or even a software upgrade of the firewall or NAT) to accommodate each new protocol. The existence of firewalls and NATs creates a strong incentive for protocol designers to layer new applications on top of existing protocols, including HTTP. However, if a site's firewall prevents the use of unknown protocols, this is presumably a conscious policy decision on the part of the firewall administrator. While it is arguable that such policies are of limited value in enhancing security, this is beside the point - well-known port numbers are quite useful for a variety of purposes, and the overloading of port numbers erodes this utility. Attempting to circumvent a site's security policy is not an acceptable justification for doing so. It would be useful to establish guidelines for "firewall-friendly" protocols, to make it easier for existing firewalls to be compatible with new protocols. 2.5 Questions to be asked when considering use of HTTP o When considering payload size and traffic patterns, is HTTP an appropriate transport for the anticipated use of this protocol? Moore Best Current Practice [Page 5] RFC 3205 HTTP Layering February 2002 (In other words: will the payload size be worth the overhead associated with TCP and HTTP? Or will the application be able to make use of HTTP persistent connections to amortize the cost of that overhead over several requests?) o Is this new protocol usable by existing web browsers without modification? (For example: Is the request transmitted as if it were a filled-in HTML form? Is the response which is returned viewable from a web browser, say as HTML?) o Are the existing HTTP security mechanisms appropriate for the new application? o Are HTTP status codes and the HTTP status code paradigm suitable for this application? (see section 8) o Does the server for this application need to support HTTP anyway? 3. Issues Regarding Reuse of Port 80 IANA has reserved TCP port number 80 for use by HTTP. It would not be appropriate for a substantially new service, even one which uses HTTP as a substrate, to usurp port 80 from its traditional use. A new use of HTTP might be considered a "substantially new service", thus requiring a new port, if any of the following are true: o The "new service" and traditional HTTP service are likely to reference different sets of data, even when they both operate on the same host. o There is a good reason for the "new service" to be implemented by a separate server process, or separate code, than traditional HTTP service on the same host, at least on some platforms. o There is a good reason to want to easily distinguish the traffic of the "new service" from traditional HTTP, e.g., for the purposes of firewall access control or traffic analysis. o If none of the above are true, it is arguable that the new use of HTTP is an "extension" to traditional HTTP, rather than a "new service". Extensions to HTTP which share data with traditional HTTP services should probably define new HTTP methods to describe those extensions, rather than using separate ports. If separate ports are used, there is no way for a client to know whether they are separate services or different ways of accessing the same underlying service. Moore Best Current Practice [Page 6] RFC 3205 HTTP Layering February 2002 4. Issues Regarding Reuse of the http: Scheme in URLs A number of different URL schemes are in widespread use and many more are in the process of being standardized. In practice, the URL scheme not only serves as a "tag" to govern the interpretation of the remaining portion of the URL, it also provides coarse identification of the kind of resource or service which is being accessed. For example, web browsers typically provide a different response when a user mouse-clicks on an "http" URL, than when the user clicks on a "mailto" URL. Some criteria that might be used in making this determination are: o Whether this URL scheme is likely to become widely used, versus used only in limited communities or by private agreement. o Whether a new "default port" is needed. If reuse of port 80 is not appropriate (see above), a new "default port" is needed. A new default port in turn requires that a new URL scheme be registered if that URL scheme is expected to be widely used. Explicit port numbers in URLs are regarded as an "escape hatch", not something for use in ordinary circumstances. o Whether use of the new service is likely to require a substantially different setup or protocol interaction with the server, than ordinary HTTP service. This could include the need to request a different type of service from the network, or to reserve bandwidth, or to present different TLS authentication credentials to the server, or different kind of server provisioning, or any number of other needs. o Whether user interfaces (such as web browsers) are likely to be able to exploit the difference in the URL prefix to produce a significant improvement in usability. According to the rules in [8] the "http:" URI is part of the "IETF Tree" for URL scheme names, and IETF is the maintainer of the "IETF Tree". Since IESG is the decision-making body for IETF, IESG has the authority to determine whether a resource accessed by a protocol that is layered on top of HTTP, should use http: or some other URL prefix. Note that the convention of appending an "s" to the URL scheme to mean "use TLS or SSL" (as in "http:" vs "https:") is nonstandard and of limited value. For most applications, a single "use TLS or SSL" bit is not sufficient to adequately convey the information that a client needs to authenticate itself to a server, even if it has the proper credentials. For instance, in order to ensure that adequate security is provided with TLS an application may need to be Moore Best Current Practice [Page 7] RFC 3205 HTTP Layering February 2002 configured with a list of acceptable ciphersuites, or with the client certificate to be used to authenticate to a particular server. When it is necessary to specify authentication or other connection setup information in a URL these should be communicated in URL parameters, rather than in the URL prefix. 5. Issues regarding use of MIME media types Since HTTP uses the MIME media type system [9] to label its payload, many applications which layer on HTTP will need to define, or select, MIME media types for use by that application. Especially when using a multipart structure, the choice of media types requires careful consideration. In particular: o Should some existing framework be used, such as text/directory [10], or XML [11,12], or should the new content-types be built from scratch? Just as with HTTP, it's useful if code can be reused, but protocol designers should not be over-eager to incorporate a general but complex framework into a new protocol. Experience with ASN.1, for example, suggests that the advantage of using a general framework may not be worth the cost. o Should MIME multipart or message types be allowed? This can be an advantage if it is desirable to incorporate (for example) the multipart/alternative construct or the MIME security framework. On the other hand, these constructs were designed specifically for use in store-and-forward electronic mail systems, and other mechanisms may be more appropriate for the application being considered. The point here is that a decision to use MIME content-type names to describe protocol payloads (which is generally desirable if the same payloads may appear in other applications) does not imply that the application must accept arbitrary MIME content-types, including MIME multipart or security mechanisms. Nor does it imply that the application must use MIME syntax or that it must recognize or even tolerate existing MIME header fields. o If the same payload is likely to be sent over electronic mail, the differences between HTTP encoding of the payload and email encoding of the payload should be minimized. Ideally, there should be no differences in the "canonical form" used in the two environments. Text/* media types can be problematic in this regard because MIME email requires CRLF for line endings of text/* body parts, where HTTP traditionally uses LF only. Moore Best Current Practice [Page 8] RFC 3205 HTTP Layering February 2002 o A MIME content-type label describes the nature of the object being labeled. It does not describe, and should not be used to describe, the semantics which should be applied when the object is received. For instance, the transmission of an object with a particular content-type using HTTP POST, should not be taken as a request for some operation based solely on the type. The request should be separate from the content-type label and it should be explicit. When it is necessary for a protocol layered on HTTP to allow different operations on the same type of object, this can be communicated in a number of different ways: HTTP methods, HTTP request-URI, HTTP request headers, the MIME Content-Disposition header field, or as part of the payload. 6. Issues Regarding Existing vs. New HTTP Methods It has been suggested that a new service layered on top of HTTP should define one or more new HTTP methods, rather than allocating a new port. The use of new methods may be appropriate, but is not sufficient in all cases. The definition of one or more new methods for use in a new protocol, does not by itself alleviate the need for use of a new port, or a new URL type. 7. Issues regarding reuse of HTTP client, server, and proxy code As mentioned earlier, one of the primary reasons for the use of HTTP as a substrate for new protocols, is to allow reuse of existing HTTP client, server, or proxy code. However, HTTP was not designed for such layering. Existing HTTP client and code may have "http" assumptions wired into them. For instance, client libraries and proxies may expect "http:" URLs, and clients and servers may send (and expect) "HTTP/1.1", in requests and responses, as opposed to the name of the layered protocol and its version number. Existing client libraries may not understand new URL types. In order to get a new HTTP-layered application client to work with an existing client library, it may be necessary for the application to convert its URLs to an "http equivalent" form. For instance, if service "xyz" is layered on top of HTTP using port ###, the xyz client may need, when invoking an HTTP client library, to translate its URLs from "xyz://host/something" format to "http://host:###/something" for the purpose of calling that library. This should be done ONLY when calling the HTTP client library - such URLs should not be used in other parts of the protocol, nor should they be exposed to users. Moore Best Current Practice [Page 9] RFC 3205 HTTP Layering February 2002 Note that when a client is sending requests directly to an origin server, the URL prefix ("http:") is not normally sent. So translating xyz: URLs to http: URLs when calling the client library should not actually cause http: URLs to be sent over the wire. But when the same client is sending requests to a proxy server, the client will normally send the entire URL (including the http: prefix) in those requests. The proxy will remove the http: prefix when the request is communicated to the origin server. Existing HTTP client libraries and servers will transmit "HTTP/1.1" (or a different version) in requests and responses. To facilitate reuse of such libraries and servers by a new protocol, such a protocol may therefore need to transmit and accept "HTTP/1.1" rather than its own protocol name and version number. Designers of protocols which are layered on top of HTTP should explicitly choose whether or not to accept "HTTP/1.1" in protocol exchanges. For certain applications it may be necessary to require or limit use of certain HTTP features, for example, to defeat caching of responses by proxies. Each protocol layered on HTTP must therefore specify the specific way that HTTP will be used, and in particular, how the client and server should interact with HTTP proxies. 8. Issues regarding use of HTTP status codes HTTP's three-digit status codes were designed for use with traditional HTTP applications (e.g., document retrieval, forms-based queries), and are unlikely to be suitable to communicate the specifics of errors encountered in dissimilar applications. Even when it seems like there is a close match between HTTP status codes and the codes needed by the application, experience with reuse of other protocols indicates that subtle variations in usage are likely; and that this is likely to degrade interoperability of both the original protocol (in this case HTTP) and any layered applications. HTTP status codes therefore should not be used to indicate subtle errors of layered applications. At most, the "generic" HTTP codes 200 (for complete success) and 500 (for complete failure) should be used to indicate errors resulting from the content of the request message-body. Under certain circumstances, additional detail about the nature of the error can then be included in the response message-body. Other status codes than 200 or 500 should only appear if the error was detected by the HTTP server or by an intermediary. A layered application should not define new HTTP status codes. The set of available status codes is small, conflicts in code assignment between different layered applications are likely, and they may be needed by future versions of, or extensions to, mainstream HTTP. Moore Best Current Practice [Page 10] RFC 3205 HTTP Layering February 2002 Use of HTTP's error codes is problematic when the layered application does not share same notion of success or failure as HTTP. The problem exists when the client does not connect directly to the origin server, but via one or more HTTP caches or proxies. (Since the ability of HTTP to communicate through intermediaries is often the primary motivation for reusing HTTP, the ability of the application to operate in the presence of such intermediaries is considered very important.) Such caches and proxies will interpret HTTP's error codes and may take additional action based on those codes. For instance, on receipt of a 200 error code from an origin server (and under other appropriate conditions) a proxy may cache the response and re-issue it in response to a similar request. Or a proxy may modify the result of a request which returns a 500 error code in order to add a "helpful" error message. Other response codes may produce other behaviors. A few guidelines are therefore in order: o A layered application should use appropriate HTTP error codes to report errors resulting from information in the HTTP request-line and header fields associated with the request. This request information is part of the HTTP protocol and errors which are associated with that information should therefore be reported using HTTP protocol mechanisms. o A layered application for which all errors resulting from the message-body can be classified as either "complete success" or "complete failure" may use 200 and 500 for those conditions, respectively. However, the specification for such an application must define the mechanism which ensures that its successful (200) responses are not cached by intermediaries, or demonstrate that such caching will do no harm; and it must be able to operate even if the message-body of an error (500) response is not transmitted back to the client intact. o A layered application may return a 200 response code for both successfully processed requests and errors (or other exceptional conditions) resulting from the request message-body (but not from the request headers). Such an application must return its error code as part of the response message body, and the specification for that application protocol must define the mechanism by which the application ensures that its responses are not cached by intermediaries. In this case a response other than 200 should be used only to indicate errors with, or the status of, the HTTP protocol layer (including the request headers), or to indicate the inability of the HTTP server to communicate with the application server. Moore Best Current Practice [Page 11] RFC 3205 HTTP Layering February 2002 o A layered application which cannot operate in the presence of intermediaries or proxies that cache and/or alter error responses, should not use HTTP as a substrate. 9. Summary of recommendations regarding reuse of HTTP 1. All protocols should provide adequate security. The security needs of a particular application will vary widely depending on the application and its anticipated use environment. Merely using HTTP and/or TLS as a substrate for a protocol does not automatically provide adequate security for all environments, nor does it relieve the protocol developers of the need to analyze security considerations for their particular application. 2. New protocols - including but not limited to those using HTTP - should not attempt to circumvent users' firewall policies, particularly by masquerading as existing protocols. "Substantially new services" should not reuse existing ports. 3. In general, new protocols or services should not reuse http: or other URL schemes. 4. Each new protocol specification that uses HTTP as a substrate should describe the specific way that HTTP is to be used by that protocol, including how the client and server interact with proxies. 5. New services should follow the guidelines in section 8 regarding use of HTTP status codes. 10. Security Considerations Much of this document is about security. Section 2.3 discusses whether HTTP security is adequate for the needs of a particular application, section 2.4 discusses interactions between new HTTP- based protocols and firewalls, section 3 discusses use of separate ports so that firewalls are not circumvented, and section 4 discusses the inadequacy of the "s" suffix of a URL prefix for specifying security levels. 11. References [1] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. Moore Best Current Practice [Page 12] RFC 3205 HTTP Layering February 2002 [2] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A. and L. Stewart, "HTTP Authentication: Basic and Digest Access Authentication", RFC 2617, June 1999. [3] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", RFC 2246, January 1999. [4] Postel, J. and J. Reynolds, "Telnet Protocol Specification", STD 8, RFC 854, May 1983. [5] Postel, J. and J. Reynolds, "File Transfer Protocol", STD 9, RFC 959, October 1985. [6] Klensin, J., "Simple Mail Transfer Protocol", RFC 2821, April 2001. [7] Myers, J., "Simple Authentication and Security Layer (SASL)", RFC 2222, October 1997. [8] Petke, R. and I. King, "Registration Procedures for URL Scheme Names", BCP 35, RFC 2717, November 1999. [9] Freed, N. and N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types", RFC 2046, November 1996. [10] Howes, T., Smith, M. and F. Dawson, "A MIME Content-Type for Directory Information", RFC 2425, September 1998. [11] Bray, T., Paoli, J. and C. Sperberg-McQueen, "Extensible Markup Language (XML)" World Wide Web Consortium Recommendation REC- xml-19980210, February 1998. http://www.w3.org/TR/1998/REC- xml-19980210. [12] Murata, M., St. Laurent, S. and D. Kohn, "XML Media Types", RFC 3023, January 2001. 12. Author's Address Keith Moore University of Tennessee Computer Science Department 1122 Volunteer Blvd, Suite 203 Knoxville TN, 37996-3450 USA EMail: moore@cs.utk.edu Moore Best Current Practice [Page 13] RFC 3205 HTTP Layering February 2002 13. Full Copyright Statement Copyright (C) The Internet Society (2002). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Acknowledgement Funding for the RFC Editor function is currently provided by the Internet Society. Moore Best Current Practice [Page 14] |
Added doc/rfc3230.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 | Network Working Group J. Mogul Request for Comments: 3230 Compaq WRL Category: Standards Track A. Van Hoff Marimba January 2002 Instance Digests in HTTP Status of this Memo This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "Internet Official Protocol Standards" (STD 1) for the standardization state and status of this protocol. Distribution of this memo is unlimited. Copyright Notice Copyright (C) The Internet Society (2002). All Rights Reserved. Abstract HTTP/1.1 defines a Content-MD5 header that allows a server to include a digest of the response body. However, this is specifically defined to cover the body of the actual message, not the contents of the full file (which might be quite different, if the response is a Content- Range, or uses a delta encoding). Also, the Content-MD5 is limited to one specific digest algorithm; other algorithms, such as SHA-1 (Secure Hash Standard), may be more appropriate in some circumstances. Finally, HTTP/1.1 provides no explicit mechanism by which a client may request a digest. This document proposes HTTP extensions that solve these problems. Table of Contents 1 Introduction.................................................... 2 1.1 Other limitations of HTTP/1.1............................ 3 2 Goals........................................................... 4 3 Terminology..................................................... 5 4 Specification................................................... 6 4.1 Protocol parameter specifications........................ 6 4.1.1 Digest algorithms................................. 6 4.2 Instance digests......................................... 7 4.3 Header specifications.................................... 8 4.3.1 Want-Digest....................................... 8 4.3.2 Digest............................................ 9 5 Negotiation of Content-MD5...................................... 9 Mogul, et. al. Standards Track [Page 1] RFC 3230 Instance Digests in HTTP January 2002 6 IANA Considerations............................................. 10 7 Security Considerations......................................... 10 8 Acknowledgements................................................ 10 9 References...................................................... 10 10 Authors' Addresses............................................. 12 11 Full Copyright Statement....................................... 13 1 Introduction Although HTTP is typically layered over a reliable transport protocol, such as TCP, this does not guarantee reliable transport of information from sender to receiver. Various problems, including undetected transmission errors, programming errors, corruption of stored data, and malicious intervention can cause errors in the transmitted information. A common approach to the problem of data integrity in a network protocol or distributed system, such as HTTP, is the use of digests, checksums, or hash values. The sender computes a digest and sends it with the data; the recipient computes a digest of the received data, and then verifies the integrity of this data by comparing the digests. Checksums are used at virtually all layers of the IP stack. However, different digest algorithms might be used at each layer, for reasons of computational cost, because the size and nature of the data being protected varies, and because the possible threats to data integrity vary. For example, Ethernet uses a Cyclic Redundancy Check (CRC). The IPv4 protocol uses a ones-complement checksum over the IP header (but not the rest of the packet). TCP uses a ones-complement checksum over the TCP header and data, and includes a "pseudo-header" to detect certain kinds of programming errors. HTTP/1.1 [4] includes a mechanism for ensuring message integrity, the Content-MD5 header. This header is actually defined for MIME- conformant messages in a standalone specification [10]. According to the HTTP/1.1 specification, The Content-MD5 entity-header field [...] is an MD5 digest of the entity-body for the purpose of providing an end-to-end message integrity check (MIC) of the entity-body. HTTP/1.1 borrowed Content-MD5 from the MIME world based on an analogy between MIME messages (e.g., electronic mail messages) and HTTP messages (requests to or responses from an HTTP server). Mogul, et. al. Standards Track [Page 2] RFC 3230 Instance Digests in HTTP January 2002 As discussed in more detail in section 3, this analogy between MIME messages and HTTP messages has resulted in some confusion. In particular, while a MIME message is self-contained, an HTTP message might not contain the entire representation of the current state of a resource. (More precisely, an HTTP response might not contain an entire "instance"; see section 3 for a definition of this term.) There are at least two situations where this distinction is an issue: 1. When an HTTP server sends a 206 (Partial Content) response, as defined in HTTP/1.1. The client may form its view of an instance (e.g., an HTML document) by combining a cache entry with the partial content in the message. 2. When an HTTP server uses a "delta encoding", as proposed in a separate document [9]. A delta encoding represents the changes between the current instance of a resource and a previous instance, and is an efficient way of reducing the bandwidth required for cache updates. The client forms its view of an instance by applying the delta in the message to one of its cache entries. We include these two kinds of transformations in a potentially broader category we call "instance manipulations." In each of these cases, the server might use a Content-MD5 header to protect the integrity of the response message. However, because the MIC in a Content-MD5 header field applies only to the entity in that message, and not to the entire instance being reassembled, it cannot protect against errors due to data corruption (e.g., of cache entries), programming errors (e.g., improper application of a partial content or delta), certain malicious attacks [9], or corruption of certain HTTP headers in transit. Thus, the Content-MD5 header, while useful and sufficient in many cases, is not sufficient for verifying instance integrity in all uses of HTTP. The Digest Authentication mechanism [5] provides (in addition to its other goals) a message-digest function similar to Content-MD5, except that it includes certain header fields. Like Content-MD5, it covers a specific message, not an entire instance. 1.1 Other limitations of HTTP/1.1 Checksums are not free. Computing a digest takes CPU resources, and might add latency to the generation of a message. (Some of these costs can be avoided by careful caching at the sender's end, but in Mogul, et. al. Standards Track [Page 3] RFC 3230 Instance Digests in HTTP January 2002 many cases such a cache would not have a useful hit ratio.) Transmitting a digest consumes HTTP header space (and therefore increases latency and network bandwidth requirements.) If the message recipient does not intend to use the digest, why should the message sender waste resources computing and sending it? The Content-MD5 header, of course, implies the use of the MD5 algorithm [15]. Other algorithms, however, might be more appropriate for some purposes. These include the SHA-1 algorithm [12] and various "fingerprinting" algorithms [7]. HTTP currently provides no standardized support for the use of these algorithms. HTTP/1.1 apparently assumes that the choice to generate a digest is up to the sender, and provides no mechanism for the recipient to indicate whether a checksum would be useful, or what checksum algorithms it would understand. 2 Goals The goals of this proposal are: 1. Digest coverage for entire instances communicated via HTTP. 2. Support for multiple digest algorithms. 3. Negotiation of the use of digests. The goals do not include: - header integrity The digest mechanisms described here cover only the bodies of instances, and do not protect the integrity of associated "entity headers" or other message headers. - authentication The digest mechanisms described here are not meant to support authentication of the source of a digest or of a message or instance. These mechanisms, therefore, are not sufficient defense against many kinds of malicious attacks. - privacy Digest mechanisms do not provide message privacy. - authorization The digest mechanisms described here are not meant to support authorization or other kinds of access controls. Mogul, et. al. Standards Track [Page 4] RFC 3230 Instance Digests in HTTP January 2002 The Digest Access Authentication mechanism [5] can provide some integrity for certain HTTP headers, and does provide authentication. 3 Terminology HTTP/1.1 [4] defines the following terms: resource A network data object or service that can be identified by a URI, as defined in section 3.2. Resources may be available in multiple representations (e.g. multiple languages, data formats, size, resolutions) or vary in other ways. entity The information transferred as the payload of a request or response. An entity consists of metainformation in the form of entity-header fields and content in the form of an entity-body, as described in section 7. variant A resource may have one, or more than one, representation(s) associated with it at any given instant. Each of these representations is termed a `variant.' Use of the term `variant' does not necessarily imply that the resource is subject to content negotiation. The dictionary definition for "entity" is "something that has separate and distinct existence and objective or conceptual reality" [8]. Unfortunately, the definition for "entity" in HTTP/1.1 is similar to that used in MIME [6], based on an entirely false analogy between MIME and HTTP. In MIME, electronic mail messages do have distinct and separate existences. MIME defines "entity" as something that "refers specifically to the MIME-defined header fields and contents of either a message or one of the parts in the body of a multipart entity." In HTTP, however, a response message to a GET does not have a distinct and separate existence. Rather, it is describing the current state of a resource (or a variant, subject to a set of constraints). The HTTP/1.1 specification provides no term to describe "the value that would be returned in response to a GET request at the current time for the selected variant of the specified resource." This leads to awkward wordings in the HTTP/1.1 specification in places where this concept is necessary. Mogul, et. al. Standards Track [Page 5] RFC 3230 Instance Digests in HTTP January 2002 It is too late to fix the terminological failure in the HTTP/1.1 specification, so we instead define a new term, for use in this document: instance The entity that would be returned in a status-200 response to a GET request, at the current time, for the selected variant of the specified resource, with the application of zero or more content- codings, but without the application of any instance manipulations or transfer-codings. It is convenient to think of an entity tag, in HTTP/1.1, as being associated with an instance, rather than an entity. That is, for a given resource, two different response messages might include the same entity tag, but two different instances of the resource should never be associated with the same (strong) entity tag. We also define this term: instance manipulation An operation on one or more instances which may result in an instance being conveyed from server to client in parts, or in more than one response message. For example, a range selection or a delta encoding. Instance manipulations are end-to-end, and often involve the use of a cache at the client. 4 Specification In this specification, the key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY" are to be interpreted as described in RFC 2119 [2]. 4.1 Protocol parameter specifications 4.1.1 Digest algorithms Digest algorithm values are used to indicate a specific digest computation. For some algorithms, one or more parameters may be supplied. digest-algorithm = token The BNF for "parameter" is as is used in RFC 2616 [4]. All digest- algorithm values are case-insensitive. Mogul, et. al. Standards Track [Page 6] RFC 3230 Instance Digests in HTTP January 2002 The Internet Assigned Numbers Authority (IANA) acts as a registry for digest-algorithm values. Initially, the registry contains the following tokens: MD5 The MD5 algorithm, as specified in RFC 1321 [15]. The output of this algorithm is encoded using the base64 encoding [1]. SHA The SHA-1 algorithm [12]. The output of this algorithm is encoded using the base64 encoding [1]. UNIXsum The algorithm computed by the UNIX "sum" command, as defined by the Single UNIX Specification, Version 2 [13]. The output of this algorithm is an ASCII decimal-digit string representing the 16-bit checksum, which is the first word of the output of the UNIX "sum" command. UNIXcksum The algorithm computed by the UNIX "cksum" command, as defined by the Single UNIX Specification, Version 2 [13]. The output of this algorithm is an ASCII digit string representing the 32-bit CRC, which is the first word of the output of the UNIX "cksum" command. If other digest-algorithm values are defined, the associated encoding MUST either be represented as a quoted string, or MUST NOT include ";" or "," in the character sets used for the encoding. 4.2 Instance digests An instance digest is the representation of the output of a digest algorithm, together with an indication of the algorithm used (and any parameters). instance-digest = digest-algorithm "=" <encoded digest output> The digest is computed on the entire instance associated with the message. The instance is a snapshot of the resource prior to the application of of any instance manipulation or transfer-coding (see section 3). The byte order used to compute the digest is the transmission byte order defined for the content-type of the instance. Mogul, et. al. Standards Track [Page 7] RFC 3230 Instance Digests in HTTP January 2002 Note: the digest is computed before the application of any instance manipulation. If a range or a delta-coding [9] is used, the computation of the digest after the computation of the range or delta would not provide a digest useful for checking the integrity of the reassembled instance. The encoded digest output uses the encoding format defined for the specific digest-algorithm. For example, if the digest-algorithm is "MD5", the encoding is base64; if the digest-algorithm is "UNIXsum", the encoding is an ASCII string of decimal digits. Examples: MD5=HUXZLQLMuI/KZ5KDcJPcOA== sha=thvDyvhfIqlvFe+A9MYgxAfm1q5= UNIXsum=30637 4.3 Header specifications The following headers are defined. 4.3.1 Want-Digest The Want-Digest message header field indicates the sender's desire to receive an instance digest on messages associated with the Request- URI. Want-Digest = "Want-Digest" ":" #(digest-algorithm [ ";" "q" "=" qvalue]) If a digest-algorithm is not accompanied by a qvalue, it is treated as if its associated qvalue were 1.0. The sender is willing to accept a digest-algorithm if and only if it is listed in a Want-Digest header field of a message, and its qvalue is non-zero. If multiple acceptable digest-algorithm values are given, the sender's preferred digest-algorithm is the one (or ones) with the highest qvalue. Examples: Want-Digest: md5 Want-Digest: MD5;q=0.3, sha;q=1 Mogul, et. al. Standards Track [Page 8] RFC 3230 Instance Digests in HTTP January 2002 4.3.2 Digest The Digest message header field provides a message digest of the instance described by the message. Digest = "Digest" ":" #(instance-digest) The instance described by a message might be fully contained in the message-body, partially-contained in the message-body, or not at all contained in the message-body. The instance is specified by the Request-URI and any cache-validator contained in the message. A Digest header field MAY contain multiple instance-digest values. This could be useful for responses expected to reside in caches shared by users with different browsers, for example. A recipient MAY ignore any or all of the instance-digests in a Digest header field. A sender MAY send an instance-digest using a digest-algorithm without knowing whether the recipient supports the digest-algorithm, or even knowing that the recipient will ignore it. Examples: Digest: md5=HUXZLQLMuI/KZ5KDcJPcOA== Digest: SHA=thvDyvhfIqlvFe+A9MYgxAfm1q5=,unixsum=30637 5 Negotiation of Content-MD5 HTTP/1.1 provides a Content-MD5 header field, but does not provide any mechanism for requesting its use (or non-use). The Want-Digest header field defined in this document provides the basis for such a mechanism. First, we add to the set of digest-algorithm values (in section 4.1.1) the token "contentMD5", with the provision that this digest- algorithm MUST NOT be used in a Digest header field. The presence of the "contentMD5" digest-algorithm with a non-zero qvalue in a Want-Digest header field indicates that the sender wishes to receive a Content-MD5 header on messages associated with the Request-URI. The presence of the "contentMD5" digest-algorithm with a zero qvalue in a Want-Digest header field indicates that the sender will ignore Content-MD5 headers on messages associated with the Request-URI. Mogul, et. al. Standards Track [Page 9] RFC 3230 Instance Digests in HTTP January 2002 6 IANA Considerations The Internet Assigned Numbers Authority (IANA) administers the name space for digest-algorithm values. Values and their meaning must be documented in an RFC or other peer-reviewed, permanent, and readily available reference, in sufficient detail so that interoperability between independent implementations is possible. Subject to these constraints, name assignments are First Come, First Served (see RFC 2434 [11]). 7 Security Considerations This document specifies a data integrity mechanism that protects HTTP instance data, but not HTTP entity headers, from certain kinds of accidental corruption. It is also useful in detecting at least one spoofing attack [9]. However, it is not intended as general protection against malicious tampering with HTTP messages. The HTTP Digest Access Authentication mechanism [5] provides some protection against malicious tampering. 8 Acknowledgements It is not clear who first realized that the Content-MD5 header field is not sufficient to provide data integrity when ranges or deltas are used. Laurent Demailly may have been the first to suggest an algorithm- independent checksum header for HTTP [3]. Dave Raggett suggested the use of the term "digest" instead of "checksum" [14]. 9 References [1] Freed, N. and N. Borenstein, N., "MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies", RFC 2049, November 1996. [2] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [3] Laurent Demailly. Re: Revised Charter. http://www.ics.uci.edu/pub/ietf/http/hypermail/1995q4/0165.html. [4] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1.", RFC 2616, June 1999. Mogul, et. al. Standards Track [Page 10] RFC 3230 Instance Digests in HTTP January 2002 [5] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A. and L. Stewart, "HTTP Authentication: Basic and Digest Access Authentication", RFC 2617, June 1999. [6] Freed, N. and N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies", RFC 2045, November 1996. [7] Nevin Heintze. Scalable Document Fingerprinting. Proc. Second USENIX Workshop on Electronic Commerce, USENIX, Oakland, CA, November, 1996, pp. 191-200. http://www.cs.cmu.edu/afs/cs/user/nch/www/koala/main.html. [8] Merriam-Webster. Webster's Seventh New Collegiate Dictionary. G. & C. Merriam Co., Springfield, MA, 1963. [9] Mogul, J., Krishnamurthy, B., Douglis, F., Feldmann, A., Goland, Y. and A. van Hoff, "Delta encoding in HTTP", RFC 3229, December 2001. [10] Myers, J. and M. Rose, "The Content-MD5 Header Field", RFC 1864, October 1995. [11] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 2434, October 1998. [12] National Institute of Standards and Technology. Secure Hash Standard. FEDERAL INFORMATION PROCESSING STANDARDS PUBLICATION 180-1, U.S. Department of Commerce, April, 1995. http://csrc.nist.gov/fips/fip180-1.txt. [13] The Open Group. The Single UNIX Specification, Version 2 - 6 Vol Set for UNIX 98. Document number T912, The Open Group, February, 1997. [14] Dave Raggett. Re: Revised Charter. http://www.ics.uci.edu/pub/ietf/http/hypermail/1995q4/0182.html. [15] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, April 1992. Mogul, et. al. Standards Track [Page 11] RFC 3230 Instance Digests in HTTP January 2002 10 Authors' Addresses Jeffrey C. Mogul Western Research Laboratory Compaq Computer Corporation 250 University Avenue Palo Alto, California, 94305, U.S.A. EMail: JeffMogul@acm.org Phone: 1 650 617 3304 (email preferred) Arthur van Hoff Marimba, Inc. 440 Clyde Avenue Mountain View, CA 94043 EMail: avh@marimba.com Phone: 1 (650) 930 5283 Mogul, et. al. Standards Track [Page 12] RFC 3230 Instance Digests in HTTP January 2002 11 Full Copyright Statement Copyright (C) The Internet Society (2002). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Acknowledgement Funding for the RFC Editor function is currently provided by the Internet Society. Mogul, et. al. Standards Track [Page 13] |
Added doc/rfc3305.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 | Network Working Group M. Mealling, Ed. Request for Comments: 3305 R. Denenberg, Ed. Category: Informational W3C URI Interest Group August 2002 Report from the Joint W3C/IETF URI Planning Interest Group: Uniform Resource Identifiers (URIs), URLs, and Uniform Resource Names (URNs): Clarifications and Recommendations Status of this Memo This memo provides information for the Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited. Copyright Notice Copyright (C) The Internet Society (2002). All Rights Reserved. Abstract This document, a product of the W3C Uniform Resource Identifier (URI) Interest Group, addresses and attempts to clarify issues pertaining to URIs. This document addresses how URI space is partitioned and the relationship between URIs, URLs, and URNs, describes how URI schemes and URN namespaces ids are registered, and presents recommendations for continued work on this subject. Mealling & Denenberg Informational [Page 1] RFC 3305 URIs, URLs, and URNs August 2002 Table of Contents 1. The W3C URI Interest Group . . . . . . . . . . . . . . . . 2 2. URI Partitioning . . . . . . . . . . . . . . . . . . . . . 2 2.1 Classical View . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Contemporary View . . . . . . . . . . . . . . . . . . . . 3 2.3 Confusion . . . . . . . . . . . . . . . . . . . . . . . . 3 3. Registration . . . . . . . . . . . . . . . . . . . . . . . 4 3.1 URI Schemes . . . . . . . . . . . . . . . . . . . . . . . 4 3.1.1 Registered URI schemes . . . . . . . . . . . . . . . . . . 4 3.1.2 Unregistered URI Schemes . . . . . . . . . . . . . . . . . 4 3.1.2.1 Public Unregistered Schemes . . . . . . . . . . . . . . . 4 3.1.2.2 Private Schemes . . . . . . . . . . . . . . . . . . . . . 5 3.1.3 Registration of URI Schemes . . . . . . . . . . . . . . . 5 3.1.3.1 IETF Tree . . . . . . . . . . . . . . . . . . . . . . . . 5 3.1.3.2 Other Trees . . . . . . . . . . . . . . . . . . . . . . . 5 3.2 URN Namespaces . . . . . . . . . . . . . . . . . . . . . . 5 3.2.1 Registered URN NIDs . . . . . . . . . . . . . . . . . . . 5 3.2.2 Pending URN NIDs . . . . . . . . . . . . . . . . . . . . . 6 3.2.3 Unregistered NIDs . . . . . . . . . . . . . . . . . . . . 7 3.2.4 Registration Procedures for URN NIDs . . . . . . . . . . . 7 4. Additional URI Issues . . . . . . . . . . . . . . . . . . 7 5. Recommendations . . . . . . . . . . . . . . . . . . . . . 8 6. Security Considerations . . . . . . . . . . . . . . . . . 8 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . 8 References . . . . . . . . . . . . . . . . . . . . . . . . 9 Authors' Addresses . . . . . . . . . . . . . . . . . . . . 10 Full Copyright Statement . . . . . . . . . . . . . . . . . 11 1. The W3C URI Interest Group In October, 2000 the W3C formed a planning group whose mission was to evaluate the opportunities for W3C work in the area of Uniform Resource Identifiers (URIs) and to develop a proposal for continued work in this area. The Interest Group was composed of W3C members and invited experts from the IETF to participate as well. This document is a set of recommendations from this group, to the W3C and the IETF for work that can and should continue in this area. 2. URI Partitioning There is some confusion in the web community over the partitioning of URI space, specifically, the relationship among the concepts of URL, URN, and URI. The confusion owes to the incompatibility between two different views of URI partitioning, which we call the "classical" and "contemporary" views. Mealling & Denenberg Informational [Page 2] RFC 3305 URIs, URLs, and URNs August 2002 2.1 Classical View During the early years of discussion of web identifiers (early to mid 90s), people assumed that an identifier type would be cast into one of two (or possibly more) classes. An identifier might specify the location of a resource (a URL) or its name (a URN), independent of location. Thus a URI was either a URL or a URN. There was discussion about generalizing this by the addition of a discrete number of additional classes; for example, a URI might point to metadata rather than the resource itself, in which case the URI would be a URC (citation). URI space was thus viewed as partitioned into subspaces: URL, URN, and additional subspaces to be defined. The only such additional space ever proposed was Uniform Resource Characteristics (URC) and there never was any buy-in; so without loss of generality, it's reasonable to say that URI space was thought to be partitioned into two classes: URL and URN. Thus, for example, "http:" was a URL scheme, and "isbn:" would (someday) be a URN scheme. Any new scheme would be cast into one of these two classes. 2.2 Contemporary View Over time, the importance of this additional level of hierarchy seemed to lessen; the view became that an individual scheme did not need to be cast into one of a discrete set of URI types, such as "URL", "URN", "URC", etc. Web-identifier schemes are, in general, URI schemes, as a given URI scheme may define subspaces. Thus "http:" is a URI scheme. "urn:" is also a URI scheme; it defines subspaces, called "namespaces". For example, the set of URNs, of the form "urn:isbn:n-nn-nnnnnn-n", is a URN namespace. ("isbn" is an URN namespace identifier. It is not a "URN scheme", nor is it a "URI scheme.") Further, according to the contemporary view, the term "URL" does not refer to a formal partition of URI space; rather, URL is a useful but informal concept. A URL is a type of URI that identifies a resource via a representation of its primary access mechanism (e.g., its network "location"), rather than by some other attributes it may have. Thus, as we noted, "http:" is a URI scheme. An http URI is a URL. The phrase "URL scheme" is now used infrequently, usually to refer to some subclass of URI schemes which exclude URNs. 2.3 Confusion The body of documents (RFCs, etc) covering URI architecture, syntax, registration, etc., spans both the classical and contemporary periods. People who are well-versed in URI matters tend to use "URL" and "URI" in ways that seem to be interchangeable. Among these experts, this isn't a problem, but among the Internet community at Mealling & Denenberg Informational [Page 3] RFC 3305 URIs, URLs, and URNs August 2002 large, it is a problem. People are not convinced that URI and URL mean the same thing, in documents where they (apparently) do. When one RFC talks about URI schemes (e.g. "URI Syntax" (RFC 2396) [12]), another talks about URL schemes (e.g. "Registration Procedures for URL Schemes" (RFC 2717) [1]), and yet another talks of URN schemes ("Architectural Principles of URN Resolution" (RFC 2276) [13]), it is natural to wonder how they difference, and how they relate to one another. While RFC 2396, section 1.2, attempts to address the distinction between URIs, URLs and URNs, it has not been successful in clearing up the confusion. 3. Registration This section examines the state of registration of URI schemes and URN namespaces and the mechanisms by which registration currently occurs. 3.1 URI Schemes 3.1.1 Registered URI schemes The official register of URI scheme names is maintained by IANA, at http://www.iana.org/assignments/uri-schemes. For each scheme, the RFC that defines the scheme is listed; for example "http:" is defined by RFC2616 [14]. The table lists 34 schemes (at time of publication of this RFC). In addition, there are a few "reserved" scheme names; at one point in time, these were intended to become registered schemes but have since been dropped. 3.1.2 Unregistered URI Schemes We distinguish between public (unregistered) and private schemes. A public scheme (registered or not) is one for which there is some public document describing it. 3.1.2.1 Public Unregistered Schemes Dan Conolly's paper, at http://www.w3.org/Addressing/schemes, provides a list of known public URI schemes, both registered and un- registered, a total of 85 schemes at time of publication of this RFC. 50 or so of these are unregistered (not listed in the IANA register). Some of these URI schemes are obsolete (for example, "phone" is obsolete, superceded by "tel"), while some have an RFC, but are not included in the IANA list. Mealling & Denenberg Informational [Page 4] RFC 3305 URIs, URLs, and URNs August 2002 3.1.2.2 Private Schemes It is probably impossible to determine all of these, and it's not clear that it's worthwhile to try, except perhaps to get some idea of their number. In the minutes of the August 1997 IETF meeting is the observation that there may be 20-40 in use at Microsoft, with 2-3 being added a day, and that WebTV has 24, with 6 added per year. 3.1.3 Registration of URI Schemes "Registration Procedures for URL Scheme Names" (RFC 2717) [1] specifies procedures for registering scheme names and points to "Guidelines for new URL Schemes" (RFC 2718) [2], which supplies guidelines. RFC 2717 describes an organization of schemes into "trees". It is important to note that these two documents use the historical term 'URL' when in fact, they refer to URIs in general. In fact, one of the recommended tasks in Section 5 is for these documents to be updated to use the term 'URI' instead of 'URL'. 3.1.3.1 IETF Tree The IETF tree is intended for schemes of general interest to the Internet community, and for those which require a substantive review and approval process. Registration in the IETF tree requires publication of the scheme syntax and semantics in an RFC. 3.1.3.2 Other Trees Although RFC 2717 describes "alternative trees", no alternative trees have been registered to date, although a vendor-supplied tree ("vnd") is pending. URI schemes in alternative trees will be distinguished because they will have a "." in the scheme name. 3.2 URN Namespaces A URN namespace is identified by a "Namespace ID" (NID), which is registered with IANA (see Section 3.2.4). 3.2.1 Registered URN NIDs There are two categories of registered URN NIDs: o Informal: These are of the form, "urn-<number>", where <number> is assigned by IANA. There are four registered (at time of publication of this RFC) in this category (urn-1, urn-2, urn-3, and urn-4). Mealling & Denenberg Informational [Page 5] RFC 3305 URIs, URLs, and URNs August 2002 o Formal: The official list of registered NIDs is kept by IANA at http://www.iana.org/assignments/urn-namespaces. At the time of publication of this RFC it lists ten registered NIDs: * 'ietf', defined by "URN Namespace for IETF Documents" (RFC 2648) [3] * 'pin', defined by "The Network Solutions Personal Internet Name (PIN): A URN Namespace for People and Organizations" (RFC 3043) [4] * 'issn' defined by "Using The ISSN as URN within an ISSN-URN Namespace" (RFC 3043) [4] * 'oid' defined by "A URN Namespace of Object Identifiers" (RFC 3061) [6] * 'newsml' defined by "URN Namespace for NewsML Resources" (RFC 3085) [7] * 'oasis' defined by "A URN Namespace for OASIS" (RFC 3121) [8] * 'xmlorg' defined by "A URN Namespace for XML.org" (RFC 3120) [9] * 'publicid' defined by "A URN Namespace for Public Identifiers" (RFC 3151) [10] * 'isbn' defined by "Using International Standard Book Numbers as Uniform Resource Names" (RFC 3187) [15] * 'nbn' defined by "Using National Bibliography Numbers as Uniform Resource Names" (RFC 3188) [16] 3.2.2 Pending URN NIDs There are a number of pending URN NID registration requests, but there is no reliable way to discover them, or their status. It would be helpful if there were some formal means to track the status of NID requests such as 'isbn'. Mealling & Denenberg Informational [Page 6] RFC 3305 URIs, URLs, and URNs August 2002 3.2.3 Unregistered NIDs In the "unregistered" category (besides the experimental case, not described in this paper), there are entities that maintain namespaces that, while completely appropriate as URNs, just haven't bothered to explore the process of NID registration. The most prominent that comes to mind is 'hdl'. In the case of 'hdl', it has been speculated that this scheme has not been registered because it is not clear to the owners whether it should be registered as a URI scheme or as a URN namespace. 3.2.4 Registration Procedures for URN NIDs "URN Namespace Definition Mechanisms" (RFC 2611) [11] describes the mechanism to obtain an NID for a URN namespace, which is registered with IANA. A request for an NID should describe features including: structural characteristic of identifiers (for example, features relevant to caching/shortcuts approaches); specific character encoding rules (e.g., which character should be used for single-quotes); RFCs, standards, etc, that explain the namespace structure; identifier uniqueness considerations; delegation of assignment authority, including how to become an assigner of identifiers; identifier persistence considerations; quality of service considerations; process for identifier resolution; rules for lexical equivalence; any special considerations required for conforming with the URN syntax (particularly applicable in the case of legacy naming systems); validation mechanisms (determining whether a given string is currently a validly-assigned URN); and scope (for example,"United States social security numbers"). 4. Additional URI Issues There are additional unresolved URI issues not considered by this paper, which we hope will be addressed by a follow-on effort. We have not attempted to completely enumerate these issues, however, they include (but are not limited to) the following: o The use of URIs as identifiers that don't actually identify network resources (for example, they identify an abstract object, such as an XML namespace, or a physical object such as a book or even a person). o IRIs (International Resource Identifiers): the extension of URI syntax to non-ASCII. Mealling & Denenberg Informational [Page 7] RFC 3305 URIs, URLs, and URNs August 2002 5. Recommendations We recommend the following: 1. The W3C and IETF should jointly develop and endorse a model for URIs, URLs, and URNs consistent with the "Contemporary View" described in section 1, and which considers the additional URI issues listed or alluded to in section 3. 2. RFCs such as 2717 ("Registration Procedures for URL Scheme Names") and 2718 ("Guidelines for new URL Schemes") should both be generalized to refer to "URI schemes", rather than "URL schemes" and, after refinement, moved forward as Best Current Practices in the IETF. 3. The registration procedures for alternative trees should be clarified in RFC 2717. 4. Public, but unregistered schemes, should become registered, where possible. Obsolete schemes should be purged or clearly marked as obsolete. 5. IANA registration information should be updated: * Add 'urn' to the list of registered URI schemes with a pointer to the URN namespace registry. * Maintain status information about pending registrations (URI schemes and URN NID requests ). * Insure that it is clear that the page is the official registry, e.g., by adding a heading to the effect "This is the Official IANA Registry of URI Schemes". 6. Security Considerations This memo does not raise any known security threats. 7. Acknowledgements The participants in the URI Planning Interest Group are: o Tony Coates o Dan Connolly o Diana Dack Mealling & Denenberg Informational [Page 8] RFC 3305 URIs, URLs, and URNs August 2002 o Leslie Daigle o Ray Denenberg o Martin Duerst o Paul Grosso o Sandro Hawke o Renato Iannella o Graham Klyne o Larry Masinter o Michael Mealling o Mark Needleman o Norman Walsh References [1] Petke, R. and I. King, "Registration Procedures for URL Scheme Names", BCP 35, RFC 2717, November 1999. [2] Masinter, L., Alvestrand, H., Zigmond, D. and R. Petke, "Guidelines for new URL Schemes", RFC 2718, November 1999. [3] Moats, R., "A URN Namespace for IETF Documents", RFC 2648, August 1999. [4] Mealling, M., "The Network Solutions Personal Internet Name (PIN): A URN Namespace for People and Organizations", RFC 3043, January 2001. [5] Rozenfeld, S., "Using The ISSN (International Serial Standard Number) as URN (Uniform Resource Names) within an ISSN-URN Namespace", RFC 3044, January 2001. [6] Mealling, M., "A URN Namespace of Object Identifiers", RFC 3061, February 2001. [7] Coates, A., Allen, D. and D. Rivers-Moore, "URN Namespace for NewsML Resources", RFC 3085, March 2001. Mealling & Denenberg Informational [Page 9] RFC 3305 URIs, URLs, and URNs August 2002 [8] Best, K. and N. Walsh, "A URN Namespace for OASIS", RFC 3121, June 2001. [9] Best, K. and N. Walsh, "A URN Namespace for XML.org", RFC 3120, June 2001. [10] Walsh, N., Cowan, J. and P. Grosso, "A URN Namespace for Public Identifiers", RFC 3151, August 2001. [11] Daigle, L., van Gulik, D., Iannella, R. and P. Faltstrom, "URN Namespace Definition Mechanisms", BCP 33, RFC 2611, June 1999. [12] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform Resource Identifiers (URI): Generic Syntax", RFC 2396, August 1998. [13] Sollins, K., "Architectural Principles of Uniform Resource Name Resolution", RFC 2276, January 1998. [14] Fielding, R., Gettys, J., Mogul, J., Nielsen, H., Masinter, L., Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. [15] Hakala, J. and H. Walravens, "Using International Standard Book Numbers as Uniform Resource Names", RFC 3187, October 2001. [16] Hakala, J., "Using National Bibliography Numbers as Uniform Resource Names", RFC 3188, October 2001. Authors' Addresses Michael Mealling VeriSign, Inc. 21345 Ridgetop Circle Sterling, VA 20166 US EMail: michael@verisignlabs.com Ray Denenberg Library of Congress Washington, DC 20540 US EMail: rden@loc.gov Mealling & Denenberg Informational [Page 10] RFC 3305 URIs, URLs, and URNs August 2002 Full Copyright Statement Copyright (C) The Internet Society (2002). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Acknowledgement Funding for the RFC Editor function is currently provided by the Internet Society. Mealling & Denenberg Informational [Page 11] |
Added doc/rfc3986.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 | Network Working Group T. Berners-Lee Request for Comments: 3986 W3C/MIT STD: 66 R. Fielding Updates: 1738 Day Software Obsoletes: 2732, 2396, 1808 L. Masinter Category: Standards Track Adobe Systems January 2005 Uniform Resource Identifier (URI): Generic Syntax Status of This Memo This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "Internet Official Protocol Standards" (STD 1) for the standardization state and status of this protocol. Distribution of this memo is unlimited. Copyright Notice Copyright (C) The Internet Society (2005). Abstract A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. Berners-Lee, et al. Standards Track [Page 1] RFC 3986 URI Generic Syntax January 2005 Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.1. Overview of URIs . . . . . . . . . . . . . . . . . . . . 4 1.1.1. Generic Syntax . . . . . . . . . . . . . . . . . 6 1.1.2. Examples . . . . . . . . . . . . . . . . . . . . 7 1.1.3. URI, URL, and URN . . . . . . . . . . . . . . . 7 1.2. Design Considerations . . . . . . . . . . . . . . . . . 8 1.2.1. Transcription . . . . . . . . . . . . . . . . . 8 1.2.2. Separating Identification from Interaction . . . 9 1.2.3. Hierarchical Identifiers . . . . . . . . . . . . 10 1.3. Syntax Notation . . . . . . . . . . . . . . . . . . . . 11 2. Characters . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1. Percent-Encoding . . . . . . . . . . . . . . . . . . . . 12 2.2. Reserved Characters . . . . . . . . . . . . . . . . . . 12 2.3. Unreserved Characters . . . . . . . . . . . . . . . . . 13 2.4. When to Encode or Decode . . . . . . . . . . . . . . . . 14 2.5. Identifying Data . . . . . . . . . . . . . . . . . . . . 14 3. Syntax Components . . . . . . . . . . . . . . . . . . . . . . 16 3.1. Scheme . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.2. Authority . . . . . . . . . . . . . . . . . . . . . . . 17 3.2.1. User Information . . . . . . . . . . . . . . . . 18 3.2.2. Host . . . . . . . . . . . . . . . . . . . . . . 18 3.2.3. Port . . . . . . . . . . . . . . . . . . . . . . 22 3.3. Path . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.4. Query . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.5. Fragment . . . . . . . . . . . . . . . . . . . . . . . . 24 4. Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.1. URI Reference . . . . . . . . . . . . . . . . . . . . . 25 4.2. Relative Reference . . . . . . . . . . . . . . . . . . . 26 4.3. Absolute URI . . . . . . . . . . . . . . . . . . . . . . 27 4.4. Same-Document Reference . . . . . . . . . . . . . . . . 27 4.5. Suffix Reference . . . . . . . . . . . . . . . . . . . . 27 5. Reference Resolution . . . . . . . . . . . . . . . . . . . . . 28 5.1. Establishing a Base URI . . . . . . . . . . . . . . . . 28 5.1.1. Base URI Embedded in Content . . . . . . . . . . 29 5.1.2. Base URI from the Encapsulating Entity . . . . . 29 5.1.3. Base URI from the Retrieval URI . . . . . . . . 30 5.1.4. Default Base URI . . . . . . . . . . . . . . . . 30 5.2. Relative Resolution . . . . . . . . . . . . . . . . . . 30 5.2.1. Pre-parse the Base URI . . . . . . . . . . . . . 31 5.2.2. Transform References . . . . . . . . . . . . . . 31 5.2.3. Merge Paths . . . . . . . . . . . . . . . . . . 32 5.2.4. Remove Dot Segments . . . . . . . . . . . . . . 33 5.3. Component Recomposition . . . . . . . . . . . . . . . . 35 5.4. Reference Resolution Examples . . . . . . . . . . . . . 35 5.4.1. Normal Examples . . . . . . . . . . . . . . . . 36 5.4.2. Abnormal Examples . . . . . . . . . . . . . . . 36 Berners-Lee, et al. Standards Track [Page 2] RFC 3986 URI Generic Syntax January 2005 6. Normalization and Comparison . . . . . . . . . . . . . . . . . 38 6.1. Equivalence . . . . . . . . . . . . . . . . . . . . . . 38 6.2. Comparison Ladder . . . . . . . . . . . . . . . . . . . 39 6.2.1. Simple String Comparison . . . . . . . . . . . . 39 6.2.2. Syntax-Based Normalization . . . . . . . . . . . 40 6.2.3. Scheme-Based Normalization . . . . . . . . . . . 41 6.2.4. Protocol-Based Normalization . . . . . . . . . . 42 7. Security Considerations . . . . . . . . . . . . . . . . . . . 43 7.1. Reliability and Consistency . . . . . . . . . . . . . . 43 7.2. Malicious Construction . . . . . . . . . . . . . . . . . 43 7.3. Back-End Transcoding . . . . . . . . . . . . . . . . . . 44 7.4. Rare IP Address Formats . . . . . . . . . . . . . . . . 45 7.5. Sensitive Information . . . . . . . . . . . . . . . . . 45 7.6. Semantic Attacks . . . . . . . . . . . . . . . . . . . . 45 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 46 10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 46 10.1. Normative References . . . . . . . . . . . . . . . . . . 46 10.2. Informative References . . . . . . . . . . . . . . . . . 47 A. Collected ABNF for URI . . . . . . . . . . . . . . . . . . . . 49 B. Parsing a URI Reference with a Regular Expression . . . . . . 50 C. Delimiting a URI in Context . . . . . . . . . . . . . . . . . 51 D. Changes from RFC 2396 . . . . . . . . . . . . . . . . . . . . 53 D.1. Additions . . . . . . . . . . . . . . . . . . . . . . . 53 D.2. Modifications . . . . . . . . . . . . . . . . . . . . . 53 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 60 Full Copyright Statement . . . . . . . . . . . . . . . . . . . . . 61 Berners-Lee, et al. Standards Track [Page 3] RFC 3986 URI Generic Syntax January 2005 1. Introduction A Uniform Resource Identifier (URI) provides a simple and extensible means for identifying a resource. This specification of URI syntax and semantics is derived from concepts introduced by the World Wide Web global information initiative, whose use of these identifiers dates from 1990 and is described in "Universal Resource Identifiers in WWW" [RFC1630]. The syntax is designed to meet the recommendations laid out in "Functional Recommendations for Internet Resource Locators" [RFC1736] and "Functional Requirements for Uniform Resource Names" [RFC1737]. This document obsoletes [RFC2396], which merged "Uniform Resource Locators" [RFC1738] and "Relative Uniform Resource Locators" [RFC1808] in order to define a single, generic syntax for all URIs. It obsoletes [RFC2732], which introduced syntax for an IPv6 address. It excludes portions of RFC 1738 that defined the specific syntax of individual URI schemes; those portions will be updated as separate documents. The process for registration of new URI schemes is defined separately by [BCP35]. Advice for designers of new URI schemes can be found in [RFC2718]. All significant changes from RFC 2396 are noted in Appendix D. This specification uses the terms "character" and "coded character set" in accordance with the definitions provided in [BCP19], and "character encoding" in place of what [BCP19] refers to as a "charset". 1.1. Overview of URIs URIs are characterized as follows: Uniform Uniformity provides several benefits. It allows different types of resource identifiers to be used in the same context, even when the mechanisms used to access those resources may differ. It allows uniform semantic interpretation of common syntactic conventions across different types of resource identifiers. It allows introduction of new types of resource identifiers without interfering with the way that existing identifiers are used. It allows the identifiers to be reused in many different contexts, thus permitting new applications or protocols to leverage a pre- existing, large, and widely used set of resource identifiers. Berners-Lee, et al. Standards Track [Page 4] RFC 3986 URI Generic Syntax January 2005 Resource This specification does not limit the scope of what might be a resource; rather, the term "resource" is used in a general sense for whatever might be identified by a URI. Familiar examples include an electronic document, an image, a source of information with a consistent purpose (e.g., "today's weather report for Los Angeles"), a service (e.g., an HTTP-to-SMS gateway), and a collection of other resources. A resource is not necessarily accessible via the Internet; e.g., human beings, corporations, and bound books in a library can also be resources. Likewise, abstract concepts can be resources, such as the operators and operands of a mathematical equation, the types of a relationship (e.g., "parent" or "employee"), or numeric values (e.g., zero, one, and infinity). Identifier An identifier embodies the information required to distinguish what is being identified from all other things within its scope of identification. Our use of the terms "identify" and "identifying" refer to this purpose of distinguishing one resource from all other resources, regardless of how that purpose is accomplished (e.g., by name, address, or context). These terms should not be mistaken as an assumption that an identifier defines or embodies the identity of what is referenced, though that may be the case for some identifiers. Nor should it be assumed that a system using URIs will access the resource identified: in many cases, URIs are used to denote resources without any intention that they be accessed. Likewise, the "one" resource identified might not be singular in nature (e.g., a resource might be a named set or a mapping that varies over time). A URI is an identifier consisting of a sequence of characters matching the syntax rule named <URI> in Section 3. It enables uniform identification of resources via a separately defined extensible set of naming schemes (Section 3.1). How that identification is accomplished, assigned, or enabled is delegated to each scheme specification. This specification does not place any limits on the nature of a resource, the reasons why an application might seek to refer to a resource, or the kinds of systems that might use URIs for the sake of identifying resources. This specification does not require that a URI persists in identifying the same resource over time, though that is a common goal of all URI schemes. Nevertheless, nothing in this Berners-Lee, et al. Standards Track [Page 5] RFC 3986 URI Generic Syntax January 2005 specification prevents an application from limiting itself to particular types of resources, or to a subset of URIs that maintains characteristics desired by that application. URIs have a global scope and are interpreted consistently regardless of context, though the result of that interpretation may be in relation to the end-user's context. For example, "http://localhost/" has the same interpretation for every user of that reference, even though the network interface corresponding to "localhost" may be different for each end-user: interpretation is independent of access. However, an action made on the basis of that reference will take place in relation to the end-user's context, which implies that an action intended to refer to a globally unique thing must use a URI that distinguishes that resource from all other things. URIs that identify in relation to the end-user's local context should only be used when the context itself is a defining aspect of the resource, such as when an on-line help manual refers to a file on the end- user's file system (e.g., "file:///etc/hosts"). 1.1.1. Generic Syntax Each URI begins with a scheme name, as defined in Section 3.1, that refers to a specification for assigning identifiers within that scheme. As such, the URI syntax is a federated and extensible naming system wherein each scheme's specification may further restrict the syntax and semantics of identifiers using that scheme. This specification defines those elements of the URI syntax that are required of all URI schemes or are common to many URI schemes. It thus defines the syntax and semantics needed to implement a scheme- independent parsing mechanism for URI references, by which the scheme-dependent handling of a URI can be postponed until the scheme-dependent semantics are needed. Likewise, protocols and data formats that make use of URI references can refer to this specification as a definition for the range of syntax allowed for all URIs, including those schemes that have yet to be defined. This decouples the evolution of identification schemes from the evolution of protocols, data formats, and implementations that make use of URIs. A parser of the generic URI syntax can parse any URI reference into its major components. Once the scheme is determined, further scheme-specific parsing can be performed on the components. In other words, the URI generic syntax is a superset of the syntax of all URI schemes. Berners-Lee, et al. Standards Track [Page 6] RFC 3986 URI Generic Syntax January 2005 1.1.2. Examples The following example URIs illustrate several URI schemes and variations in their common syntax components: ftp://ftp.is.co.za/rfc/rfc1808.txt http://www.ietf.org/rfc/rfc2396.txt ldap://[2001:db8::7]/c=GB?objectClass?one mailto:John.Doe@example.com news:comp.infosystems.www.servers.unix tel:+1-816-555-1212 telnet://192.0.2.16:80/ urn:oasis:names:specification:docbook:dtd:xml:4.1.2 1.1.3. URI, URL, and URN A URI can be further classified as a locator, a name, or both. The term "Uniform Resource Locator" (URL) refers to the subset of URIs that, in addition to identifying a resource, provide a means of locating the resource by describing its primary access mechanism (e.g., its network "location"). The term "Uniform Resource Name" (URN) has been used historically to refer to both URIs under the "urn" scheme [RFC2141], which are required to remain globally unique and persistent even when the resource ceases to exist or becomes unavailable, and to any other URI with the properties of a name. An individual scheme does not have to be classified as being just one of "name" or "locator". Instances of URIs from any given scheme may have the characteristics of names or locators or both, often depending on the persistence and care in the assignment of identifiers by the naming authority, rather than on any quality of the scheme. Future specifications and related documentation should use the general term "URI" rather than the more restrictive terms "URL" and "URN" [RFC3305]. Berners-Lee, et al. Standards Track [Page 7] RFC 3986 URI Generic Syntax January 2005 1.2. Design Considerations 1.2.1. Transcription The URI syntax has been designed with global transcription as one of its main considerations. A URI is a sequence of characters from a very limited set: the letters of the basic Latin alphabet, digits, and a few special characters. A URI may be represented in a variety of ways; e.g., ink on paper, pixels on a screen, or a sequence of character encoding octets. The interpretation of a URI depends only on the characters used and not on how those characters are represented in a network protocol. The goal of transcription can be described by a simple scenario. Imagine two colleagues, Sam and Kim, sitting in a pub at an international conference and exchanging research ideas. Sam asks Kim for a location to get more information, so Kim writes the URI for the research site on a napkin. Upon returning home, Sam takes out the napkin and types the URI into a computer, which then retrieves the information to which Kim referred. There are several design considerations revealed by the scenario: o A URI is a sequence of characters that is not always represented as a sequence of octets. o A URI might be transcribed from a non-network source and thus should consist of characters that are most likely able to be entered into a computer, within the constraints imposed by keyboards (and related input devices) across languages and locales. o A URI often has to be remembered by people, and it is easier for people to remember a URI when it consists of meaningful or familiar components. These design considerations are not always in alignment. For example, it is often the case that the most meaningful name for a URI component would require characters that cannot be typed into some systems. The ability to transcribe a resource identifier from one medium to another has been considered more important than having a URI consist of the most meaningful of components. In local or regional contexts and with improving technology, users might benefit from being able to use a wider range of characters; such use is not defined by this specification. Percent-encoded octets (Section 2.1) may be used within a URI to represent characters outside the range of the US-ASCII coded character set if this Berners-Lee, et al. Standards Track [Page 8] RFC 3986 URI Generic Syntax January 2005 representation is allowed by the scheme or by the protocol element in which the URI is referenced. Such a definition should specify the character encoding used to map those characters to octets prior to being percent-encoded for the URI. 1.2.2. Separating Identification from Interaction A common misunderstanding of URIs is that they are only used to refer to accessible resources. The URI itself only provides identification; access to the resource is neither guaranteed nor implied by the presence of a URI. Instead, any operation associated with a URI reference is defined by the protocol element, data format attribute, or natural language text in which it appears. Given a URI, a system may attempt to perform a variety of operations on the resource, as might be characterized by words such as "access", "update", "replace", or "find attributes". Such operations are defined by the protocols that make use of URIs, not by this specification. However, we do use a few general terms for describing common operations on URIs. URI "resolution" is the process of determining an access mechanism and the appropriate parameters necessary to dereference a URI; this resolution may require several iterations. To use that access mechanism to perform an action on the URI's resource is to "dereference" the URI. When URIs are used within information retrieval systems to identify sources of information, the most common form of URI dereference is "retrieval": making use of a URI in order to retrieve a representation of its associated resource. A "representation" is a sequence of octets, along with representation metadata describing those octets, that constitutes a record of the state of the resource at the time when the representation is generated. Retrieval is achieved by a process that might include using the URI as a cache key to check for a locally cached representation, resolution of the URI to determine an appropriate access mechanism (if any), and dereference of the URI for the sake of applying a retrieval operation. Depending on the protocols used to perform the retrieval, additional information might be supplied about the resource (resource metadata) and its relation to other resources. URI references in information retrieval systems are designed to be late-binding: the result of an access is generally determined when it is accessed and may vary over time or due to other aspects of the interaction. These references are created in order to be used in the future: what is being identified is not some specific result that was obtained in the past, but rather some characteristic that is expected to be true for future results. In such cases, the resource referred to by the URI is actually a sameness of characteristics as observed Berners-Lee, et al. Standards Track [Page 9] RFC 3986 URI Generic Syntax January 2005 over time, perhaps elucidated by additional comments or assertions made by the resource provider. Although many URI schemes are named after protocols, this does not imply that use of these URIs will result in access to the resource via the named protocol. URIs are often used simply for the sake of identification. Even when a URI is used to retrieve a representation of a resource, that access might be through gateways, proxies, caches, and name resolution services that are independent of the protocol associated with the scheme name. The resolution of some URIs may require the use of more than one protocol (e.g., both DNS and HTTP are typically used to access an "http" URI's origin server when a representation isn't found in a local cache). 1.2.3. Hierarchical Identifiers The URI syntax is organized hierarchically, with components listed in order of decreasing significance from left to right. For some URI schemes, the visible hierarchy is limited to the scheme itself: everything after the scheme component delimiter (":") is considered opaque to URI processing. Other URI schemes make the hierarchy explicit and visible to generic parsing algorithms. The generic syntax uses the slash ("/"), question mark ("?"), and number sign ("#") characters to delimit components that are significant to the generic parser's hierarchical interpretation of an identifier. In addition to aiding the readability of such identifiers through the consistent use of familiar syntax, this uniform representation of hierarchy across naming schemes allows scheme-independent references to be made relative to that hierarchy. It is often the case that a group or "tree" of documents has been constructed to serve a common purpose, wherein the vast majority of URI references in these documents point to resources within the tree rather than outside it. Similarly, documents located at a particular site are much more likely to refer to other resources at that site than to resources at remote sites. Relative referencing of URIs allows document trees to be partially independent of their location and access scheme. For instance, it is possible for a single set of hypertext documents to be simultaneously accessible and traversable via each of the "file", "http", and "ftp" schemes if the documents refer to each other with relative references. Furthermore, such document trees can be moved, as a whole, without changing any of the relative references. A relative reference (Section 4.2) refers to a resource by describing the difference within a hierarchical name space between the reference context and the target URI. The reference resolution algorithm, Berners-Lee, et al. Standards Track [Page 10] RFC 3986 URI Generic Syntax January 2005 presented in Section 5, defines how such a reference is transformed to the target URI. As relative references can only be used within the context of a hierarchical URI, designers of new URI schemes should use a syntax consistent with the generic syntax's hierarchical components unless there are compelling reasons to forbid relative referencing within that scheme. NOTE: Previous specifications used the terms "partial URI" and "relative URI" to denote a relative reference to a URI. As some readers misunderstood those terms to mean that relative URIs are a subset of URIs rather than a method of referencing URIs, this specification simply refers to them as relative references. All URI references are parsed by generic syntax parsers when used. However, because hierarchical processing has no effect on an absolute URI used in a reference unless it contains one or more dot-segments (complete path segments of "." or "..", as described in Section 3.3), URI scheme specifications can define opaque identifiers by disallowing use of slash characters, question mark characters, and the URIs "scheme:." and "scheme:..". 1.3. Syntax Notation This specification uses the Augmented Backus-Naur Form (ABNF) notation of [RFC2234], including the following core ABNF syntax rules defined by that specification: ALPHA (letters), CR (carriage return), DIGIT (decimal digits), DQUOTE (double quote), HEXDIG (hexadecimal digits), LF (line feed), and SP (space). The complete URI syntax is collected in Appendix A. 2. Characters The URI syntax provides a method of encoding data, presumably for the sake of identifying a resource, as a sequence of characters. The URI characters are, in turn, frequently encoded as octets for transport or presentation. This specification does not mandate any particular character encoding for mapping between URI characters and the octets used to store or transmit those characters. When a URI appears in a protocol element, the character encoding is defined by that protocol; without such a definition, a URI is assumed to be in the same character encoding as the surrounding text. The ABNF notation defines its terminal values to be non-negative integers (codepoints) based on the US-ASCII coded character set [ASCII]. Because a URI is a sequence of characters, we must invert that relation in order to understand the URI syntax. Therefore, the Berners-Lee, et al. Standards Track [Page 11] RFC 3986 URI Generic Syntax January 2005 integer values used by the ABNF must be mapped back to their corresponding characters via US-ASCII in order to complete the syntax rules. A URI is composed from a limited set of characters consisting of digits, letters, and a few graphic symbols. A reserved subset of those characters may be used to delimit syntax components within a URI while the remaining characters, including both the unreserved set and those reserved characters not acting as delimiters, define each component's identifying data. 2.1. Percent-Encoding A percent-encoding mechanism is used to represent a data octet in a component when that octet's corresponding character is outside the allowed set or is being used as a delimiter of, or within, the component. A percent-encoded octet is encoded as a character triplet, consisting of the percent character "%" followed by the two hexadecimal digits representing that octet's numeric value. For example, "%20" is the percent-encoding for the binary octet "00100000" (ABNF: %x20), which in US-ASCII corresponds to the space character (SP). Section 2.4 describes when percent-encoding and decoding is applied. pct-encoded = "%" HEXDIG HEXDIG The uppercase hexadecimal digits 'A' through 'F' are equivalent to the lowercase digits 'a' through 'f', respectively. If two URIs differ only in the case of hexadecimal digits used in percent-encoded octets, they are equivalent. For consistency, URI producers and normalizers should use uppercase hexadecimal digits for all percent- encodings. 2.2. Reserved Characters URIs include components and subcomponents that are delimited by characters in the "reserved" set. These characters are called "reserved" because they may (or may not) be defined as delimiters by the generic syntax, by each scheme-specific syntax, or by the implementation-specific syntax of a URI's dereferencing algorithm. If data for a URI component would conflict with a reserved character's purpose as a delimiter, then the conflicting data must be percent-encoded before the URI is formed. Berners-Lee, et al. Standards Track [Page 12] RFC 3986 URI Generic Syntax January 2005 reserved = gen-delims / sub-delims gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@" sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" The purpose of reserved characters is to provide a set of delimiting characters that are distinguishable from other data within a URI. URIs that differ in the replacement of a reserved character with its corresponding percent-encoded octet are not equivalent. Percent- encoding a reserved character, or decoding a percent-encoded octet that corresponds to a reserved character, will change how the URI is interpreted by most applications. Thus, characters in the reserved set are protected from normalization and are therefore safe to be used by scheme-specific and producer-specific algorithms for delimiting data subcomponents within a URI. A subset of the reserved characters (gen-delims) is used as delimiters of the generic URI components described in Section 3. A component's ABNF syntax rule will not use the reserved or gen-delims rule names directly; instead, each syntax rule lists the characters allowed within that component (i.e., not delimiting it), and any of those characters that are also in the reserved set are "reserved" for use as subcomponent delimiters within the component. Only the most common subcomponents are defined by this specification; other subcomponents may be defined by a URI scheme's specification, or by the implementation-specific syntax of a URI's dereferencing algorithm, provided that such subcomponents are delimited by characters in the reserved set allowed within that component. URI producing applications should percent-encode data octets that correspond to characters in the reserved set unless these characters are specifically allowed by the URI scheme to represent data in that component. If a reserved character is found in a URI component and no delimiting role is known for that character, then it must be interpreted as representing the data octet corresponding to that character's encoding in US-ASCII. 2.3. Unreserved Characters Characters that are allowed in a URI but do not have a reserved purpose are called unreserved. These include uppercase and lowercase letters, decimal digits, hyphen, period, underscore, and tilde. unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" Berners-Lee, et al. Standards Track [Page 13] RFC 3986 URI Generic Syntax January 2005 URIs that differ in the replacement of an unreserved character with its corresponding percent-encoded US-ASCII octet are equivalent: they identify the same resource. However, URI comparison implementations do not always perform normalization prior to comparison (see Section 6). For consistency, percent-encoded octets in the ranges of ALPHA (%41-%5A and %61-%7A), DIGIT (%30-%39), hyphen (%2D), period (%2E), underscore (%5F), or tilde (%7E) should not be created by URI producers and, when found in a URI, should be decoded to their corresponding unreserved characters by URI normalizers. 2.4. When to Encode or Decode Under normal circumstances, the only time when octets within a URI are percent-encoded is during the process of producing the URI from its component parts. This is when an implementation determines which of the reserved characters are to be used as subcomponent delimiters and which can be safely used as data. Once produced, a URI is always in its percent-encoded form. When a URI is dereferenced, the components and subcomponents significant to the scheme-specific dereferencing process (if any) must be parsed and separated before the percent-encoded octets within those components can be safely decoded, as otherwise the data may be mistaken for component delimiters. The only exception is for percent-encoded octets corresponding to characters in the unreserved set, which can be decoded at any time. For example, the octet corresponding to the tilde ("~") character is often encoded as "%7E" by older URI processing implementations; the "%7E" can be replaced by "~" without changing its interpretation. Because the percent ("%") character serves as the indicator for percent-encoded octets, it must be percent-encoded as "%25" for that octet to be used as data within a URI. Implementations must not percent-encode or decode the same string more than once, as decoding an already decoded string might lead to misinterpreting a percent data octet as the beginning of a percent-encoding, or vice versa in the case of percent-encoding an already percent-encoded string. 2.5. Identifying Data URI characters provide identifying data for each of the URI components, serving as an external interface for identification between systems. Although the presence and nature of the URI production interface is hidden from clients that use its URIs (and is thus beyond the scope of the interoperability requirements defined by this specification), it is a frequent source of confusion and errors in the interpretation of URI character issues. Implementers have to be aware that there are multiple character encodings involved in the Berners-Lee, et al. Standards Track [Page 14] RFC 3986 URI Generic Syntax January 2005 production and transmission of URIs: local name and data encoding, public interface encoding, URI character encoding, data format encoding, and protocol encoding. Local names, such as file system names, are stored with a local character encoding. URI producing applications (e.g., origin servers) will typically use the local encoding as the basis for producing meaningful names. The URI producer will transform the local encoding to one that is suitable for a public interface and then transform the public interface encoding into the restricted set of URI characters (reserved, unreserved, and percent-encodings). Those characters are, in turn, encoded as octets to be used as a reference within a data format (e.g., a document charset), and such data formats are often subsequently encoded for transmission over Internet protocols. For most systems, an unreserved character appearing within a URI component is interpreted as representing the data octet corresponding to that character's encoding in US-ASCII. Consumers of URIs assume that the letter "X" corresponds to the octet "01011000", and even when that assumption is incorrect, there is no harm in making it. A system that internally provides identifiers in the form of a different character encoding, such as EBCDIC, will generally perform character translation of textual identifiers to UTF-8 [STD63] (or some other superset of the US-ASCII character encoding) at an internal interface, thereby providing more meaningful identifiers than those resulting from simply percent-encoding the original octets. For example, consider an information service that provides data, stored locally using an EBCDIC-based file system, to clients on the Internet through an HTTP server. When an author creates a file with the name "Laguna Beach" on that file system, the "http" URI corresponding to that resource is expected to contain the meaningful string "Laguna%20Beach". If, however, that server produces URIs by using an overly simplistic raw octet mapping, then the result would be a URI containing "%D3%81%87%A4%95%81@%C2%85%81%83%88". An internal transcoding interface fixes this problem by transcoding the local name to a superset of US-ASCII prior to producing the URI. Naturally, proper interpretation of an incoming URI on such an interface requires that percent-encoded octets be decoded (e.g., "%20" to SP) before the reverse transcoding is applied to obtain the local name. In some cases, the internal interface between a URI component and the identifying data that it has been crafted to represent is much less direct than a character encoding translation. For example, portions of a URI might reflect a query on non-ASCII data, or numeric Berners-Lee, et al. Standards Track [Page 15] RFC 3986 URI Generic Syntax January 2005 coordinates on a map. Likewise, a URI scheme may define components with additional encoding requirements that are applied prior to forming the component and producing the URI. When a new URI scheme defines a component that represents textual data consisting of characters from the Universal Character Set [UCS], the data should first be encoded as octets according to the UTF-8 character encoding [STD63]; then only those octets that do not correspond to characters in the unreserved set should be percent- encoded. For example, the character A would be represented as "A", the character LATIN CAPITAL LETTER A WITH GRAVE would be represented as "%C3%80", and the character KATAKANA LETTER A would be represented as "%E3%82%A2". 3. Syntax Components The generic URI syntax consists of a hierarchical sequence of components referred to as the scheme, authority, path, query, and fragment. URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] hier-part = "//" authority path-abempty / path-absolute / path-rootless / path-empty The scheme and path components are required, though the path may be empty (no characters). When authority is present, the path must either be empty or begin with a slash ("/") character. When authority is not present, the path cannot begin with two slash characters ("//"). These restrictions result in five different ABNF rules for a path (Section 3.3), only one of which will match any given URI reference. The following are two example URIs and their component parts: foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment | _____________________|__ / \ / \ urn:example:animal:ferret:nose Berners-Lee, et al. Standards Track [Page 16] RFC 3986 URI Generic Syntax January 2005 3.1. Scheme Each URI begins with a scheme name that refers to a specification for assigning identifiers within that scheme. As such, the URI syntax is a federated and extensible naming system wherein each scheme's specification may further restrict the syntax and semantics of identifiers using that scheme. Scheme names consist of a sequence of characters beginning with a letter and followed by any combination of letters, digits, plus ("+"), period ("."), or hyphen ("-"). Although schemes are case- insensitive, the canonical form is lowercase and documents that specify schemes must do so with lowercase letters. An implementation should accept uppercase letters as equivalent to lowercase in scheme names (e.g., allow "HTTP" as well as "http") for the sake of robustness but should only produce lowercase scheme names for consistency. scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) Individual schemes are not specified by this document. The process for registration of new URI schemes is defined separately by [BCP35]. The scheme registry maintains the mapping between scheme names and their specifications. Advice for designers of new URI schemes can be found in [RFC2718]. URI scheme specifications must define their own syntax so that all strings matching their scheme-specific syntax will also match the <absolute-URI> grammar, as described in Section 4.3. When presented with a URI that violates one or more scheme-specific restrictions, the scheme-specific resolution process should flag the reference as an error rather than ignore the unused parts; doing so reduces the number of equivalent URIs and helps detect abuses of the generic syntax, which might indicate that the URI has been constructed to mislead the user (Section 7.6). 3.2. Authority Many URI schemes include a hierarchical element for a naming authority so that governance of the name space defined by the remainder of the URI is delegated to that authority (which may, in turn, delegate it further). The generic syntax provides a common means for distinguishing an authority based on a registered name or server address, along with optional port and user information. The authority component is preceded by a double slash ("//") and is terminated by the next slash ("/"), question mark ("?"), or number sign ("#") character, or by the end of the URI. Berners-Lee, et al. Standards Track [Page 17] RFC 3986 URI Generic Syntax January 2005 authority = [ userinfo "@" ] host [ ":" port ] URI producers and normalizers should omit the ":" delimiter that separates host from port if the port component is empty. Some schemes do not allow the userinfo and/or port subcomponents. If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character. Non- validating parsers (those that merely separate a URI reference into its major components) will often ignore the subcomponent structure of authority, treating it as an opaque string from the double-slash to the first terminating delimiter, until such time as the URI is dereferenced. 3.2.1. User Information The userinfo subcomponent may consist of a user name and, optionally, scheme-specific information about how to gain authorization to access the resource. The user information, if present, is followed by a commercial at-sign ("@") that delimits it from the host. userinfo = *( unreserved / pct-encoded / sub-delims / ":" ) Use of the format "user:password" in the userinfo field is deprecated. Applications should not render as clear text any data after the first colon (":") character found within a userinfo subcomponent unless the data after the colon is the empty string (indicating no password). Applications may choose to ignore or reject such data when it is received as part of a reference and should reject the storage of such data in unencrypted form. The passing of authentication information in clear text has proven to be a security risk in almost every case where it has been used. Applications that render a URI for the sake of user feedback, such as in graphical hypertext browsing, should render userinfo in a way that is distinguished from the rest of a URI, when feasible. Such rendering will assist the user in cases where the userinfo has been misleadingly crafted to look like a trusted domain name (Section 7.6). 3.2.2. Host The host subcomponent of authority is identified by an IP literal encapsulated within square brackets, an IPv4 address in dotted- decimal form, or a registered name. The host subcomponent is case- insensitive. The presence of a host subcomponent within a URI does not imply that the scheme requires access to the given host on the Internet. In many cases, the host syntax is used only for the sake Berners-Lee, et al. Standards Track [Page 18] RFC 3986 URI Generic Syntax January 2005 of reusing the existing registration process created and deployed for DNS, thus obtaining a globally unique name without the cost of deploying another registry. However, such use comes with its own costs: domain name ownership may change over time for reasons not anticipated by the URI producer. In other cases, the data within the host component identifies a registered name that has nothing to do with an Internet host. We use the name "host" for the ABNF rule because that is its most common purpose, not its only purpose. host = IP-literal / IPv4address / reg-name The syntax rule for host is ambiguous because it does not completely distinguish between an IPv4address and a reg-name. In order to disambiguate the syntax, we apply the "first-match-wins" algorithm: If host matches the rule for IPv4address, then it should be considered an IPv4 address literal and not a reg-name. Although host is case-insensitive, producers and normalizers should use lowercase for registered names and hexadecimal addresses for the sake of uniformity, while only using uppercase letters for percent-encodings. A host identified by an Internet Protocol literal address, version 6 [RFC3513] or later, is distinguished by enclosing the IP literal within square brackets ("[" and "]"). This is the only place where square bracket characters are allowed in the URI syntax. In anticipation of future, as-yet-undefined IP literal address formats, an implementation may use an optional version flag to indicate such a format explicitly rather than rely on heuristic determination. IP-literal = "[" ( IPv6address / IPvFuture ) "]" IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" ) The version flag does not indicate the IP version; rather, it indicates future versions of the literal format. As such, implementations must not provide the version flag for the existing IPv4 and IPv6 literal address forms described below. If a URI containing an IP-literal that starts with "v" (case-insensitive), indicating that the version flag is present, is dereferenced by an application that does not know the meaning of that version flag, then the application should return an appropriate error for "address mechanism not supported". A host identified by an IPv6 literal address is represented inside the square brackets without a preceding version flag. The ABNF provided here is a translation of the text definition of an IPv6 literal address provided in [RFC3513]. This syntax does not support IPv6 scoped addressing zone identifiers. Berners-Lee, et al. Standards Track [Page 19] RFC 3986 URI Generic Syntax January 2005 A 128-bit IPv6 address is divided into eight 16-bit pieces. Each piece is represented numerically in case-insensitive hexadecimal, using one to four hexadecimal digits (leading zeroes are permitted). The eight encoded pieces are given most-significant first, separated by colon characters. Optionally, the least-significant two pieces may instead be represented in IPv4 address textual format. A sequence of one or more consecutive zero-valued 16-bit pieces within the address may be elided, omitting all their digits and leaving exactly two consecutive colons in their place to mark the elision. IPv6address = 6( h16 ":" ) ls32 / "::" 5( h16 ":" ) ls32 / [ h16 ] "::" 4( h16 ":" ) ls32 / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 / [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 / [ *4( h16 ":" ) h16 ] "::" ls32 / [ *5( h16 ":" ) h16 ] "::" h16 / [ *6( h16 ":" ) h16 ] "::" ls32 = ( h16 ":" h16 ) / IPv4address ; least-significant 32 bits of address h16 = 1*4HEXDIG ; 16 bits of address represented in hexadecimal A host identified by an IPv4 literal address is represented in dotted-decimal notation (a sequence of four decimal numbers in the range 0 to 255, separated by "."), as described in [RFC1123] by reference to [RFC0952]. Note that other forms of dotted notation may be interpreted on some platforms, as described in Section 7.4, but only the dotted-decimal form of four octets is allowed by this grammar. IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet dec-octet = DIGIT ; 0-9 / %x31-39 DIGIT ; 10-99 / "1" 2DIGIT ; 100-199 / "2" %x30-34 DIGIT ; 200-249 / "25" %x30-35 ; 250-255 A host identified by a registered name is a sequence of characters usually intended for lookup within a locally defined host or service name registry, though the URI's scheme-specific semantics may require that a specific registry (or fixed name table) be used instead. The most common name registry mechanism is the Domain Name System (DNS). A registered name intended for lookup in the DNS uses the syntax Berners-Lee, et al. Standards Track [Page 20] RFC 3986 URI Generic Syntax January 2005 defined in Section 3.5 of [RFC1034] and Section 2.1 of [RFC1123]. Such a name consists of a sequence of domain labels separated by ".", each domain label starting and ending with an alphanumeric character and possibly also containing "-" characters. The rightmost domain label of a fully qualified domain name in DNS may be followed by a single "." and should be if it is necessary to distinguish between the complete domain name and some local domain. reg-name = *( unreserved / pct-encoded / sub-delims ) If the URI scheme defines a default for host, then that default applies when the host subcomponent is undefined or when the registered name is empty (zero length). For example, the "file" URI scheme is defined so that no authority, an empty host, and "localhost" all mean the end-user's machine, whereas the "http" scheme considers a missing authority or empty host invalid. This specification does not mandate a particular registered name lookup technology and therefore does not restrict the syntax of reg- name beyond what is necessary for interoperability. Instead, it delegates the issue of registered name syntax conformance to the operating system of each application performing URI resolution, and that operating system decides what it will allow for the purpose of host identification. A URI resolution implementation might use DNS, host tables, yellow pages, NetInfo, WINS, or any other system for lookup of registered names. However, a globally scoped naming system, such as DNS fully qualified domain names, is necessary for URIs intended to have global scope. URI producers should use names that conform to the DNS syntax, even when use of DNS is not immediately apparent, and should limit these names to no more than 255 characters in length. The reg-name syntax allows percent-encoded octets in order to represent non-ASCII registered names in a uniform way that is independent of the underlying name resolution technology. Non-ASCII characters must first be encoded according to UTF-8 [STD63], and then each octet of the corresponding UTF-8 sequence must be percent- encoded to be represented as URI characters. URI producing applications must not use percent-encoding in host unless it is used to represent a UTF-8 character sequence. When a non-ASCII registered name represents an internationalized domain name intended for resolution via the DNS, the name must be transformed to the IDNA encoding [RFC3490] prior to name lookup. URI producers should provide these registered names in the IDNA encoding, rather than a percent-encoding, if they wish to maximize interoperability with legacy URI resolvers. Berners-Lee, et al. Standards Track [Page 21] RFC 3986 URI Generic Syntax January 2005 3.2.3. Port The port subcomponent of authority is designated by an optional port number in decimal following the host and delimited from it by a single colon (":") character. port = *DIGIT A scheme may define a default port. For example, the "http" scheme defines a default port of "80", corresponding to its reserved TCP port number. The type of port designated by the port number (e.g., TCP, UDP, SCTP) is defined by the URI scheme. URI producers and normalizers should omit the port component and its ":" delimiter if port is empty or if its value would be the same as that of the scheme's default. 3.3. Path The path component contains data, usually organized in hierarchical form, that, along with data in the non-hierarchical query component (Section 3.4), serves to identify a resource within the scope of the URI's scheme and naming authority (if any). The path is terminated by the first question mark ("?") or number sign ("#") character, or by the end of the URI. If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character. If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//"). In addition, a URI reference (Section 4.1) may be a relative-path reference, in which case the first path segment cannot contain a colon (":") character. The ABNF requires five separate rules to disambiguate these cases, only one of which will match the path substring within a given URI reference. We use the generic term "path component" to describe the URI substring matched by the parser to one of these rules. path = path-abempty ; begins with "/" or is empty / path-absolute ; begins with "/" but not "//" / path-noscheme ; begins with a non-colon segment / path-rootless ; begins with a segment / path-empty ; zero characters path-abempty = *( "/" segment ) path-absolute = "/" [ segment-nz *( "/" segment ) ] path-noscheme = segment-nz-nc *( "/" segment ) path-rootless = segment-nz *( "/" segment ) path-empty = 0<pchar> Berners-Lee, et al. Standards Track [Page 22] RFC 3986 URI Generic Syntax January 2005 segment = *pchar segment-nz = 1*pchar segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" ) ; non-zero-length segment without any colon ":" pchar = unreserved / pct-encoded / sub-delims / ":" / "@" A path consists of a sequence of path segments separated by a slash ("/") character. A path is always defined for a URI, though the defined path may be empty (zero length). Use of the slash character to indicate hierarchy is only required when a URI will be used as the context for relative references. For example, the URI <mailto:fred@example.com> has a path of "fred@example.com", whereas the URI <foo://info.example.com?fred> has an empty path. The path segments "." and "..", also known as dot-segments, are defined for relative reference within the path name hierarchy. They are intended for use at the beginning of a relative-path reference (Section 4.2) to indicate relative position within the hierarchical tree of names. This is similar to their role within some operating systems' file directory structures to indicate the current directory and parent directory, respectively. However, unlike in a file system, these dot-segments are only interpreted within the URI path hierarchy and are removed as part of the resolution process (Section 5.2). Aside from dot-segments in hierarchical paths, a path segment is considered opaque by the generic syntax. URI producing applications often use the reserved characters allowed in a segment to delimit scheme-specific or dereference-handler-specific subcomponents. For example, the semicolon (";") and equals ("=") reserved characters are often used to delimit parameters and parameter values applicable to that segment. The comma (",") reserved character is often used for similar purposes. For example, one URI producer might use a segment such as "name;v=1.1" to indicate a reference to version 1.1 of "name", whereas another might use a segment such as "name,1.1" to indicate the same. Parameter types may be defined by scheme-specific semantics, but in most cases the syntax of a parameter is specific to the implementation of the URI's dereferencing algorithm. 3.4. Query The query component contains non-hierarchical data that, along with data in the path component (Section 3.3), serves to identify a resource within the scope of the URI's scheme and naming authority (if any). The query component is indicated by the first question mark ("?") character and terminated by a number sign ("#") character or by the end of the URI. Berners-Lee, et al. Standards Track [Page 23] RFC 3986 URI Generic Syntax January 2005 query = *( pchar / "/" / "?" ) The characters slash ("/") and question mark ("?") may represent data within the query component. Beware that some older, erroneous implementations may not handle such data correctly when it is used as the base URI for relative references (Section 5.1), apparently because they fail to distinguish query data from path data when looking for hierarchical separators. However, as query components are often used to carry identifying information in the form of "key=value" pairs and one frequently used value is a reference to another URI, it is sometimes better for usability to avoid percent- encoding those characters. 3.5. Fragment The fragment identifier component of a URI allows indirect identification of a secondary resource by reference to a primary resource and additional identifying information. The identified secondary resource may be some portion or subset of the primary resource, some view on representations of the primary resource, or some other resource defined or described by those representations. A fragment identifier component is indicated by the presence of a number sign ("#") character and terminated by the end of the URI. fragment = *( pchar / "/" / "?" ) The semantics of a fragment identifier are defined by the set of representations that might result from a retrieval action on the primary resource. The fragment's format and resolution is therefore dependent on the media type [RFC2046] of a potentially retrieved representation, even though such a retrieval is only performed if the URI is dereferenced. If no such representation exists, then the semantics of the fragment are considered unknown and are effectively unconstrained. Fragment identifier semantics are independent of the URI scheme and thus cannot be redefined by scheme specifications. Individual media types may define their own restrictions on or structures within the fragment identifier syntax for specifying different types of subsets, views, or external references that are identifiable as secondary resources by that media type. If the primary resource has multiple representations, as is often the case for resources whose representation is selected based on attributes of the retrieval request (a.k.a., content negotiation), then whatever is identified by the fragment should be consistent across all of those representations. Each representation should either define the fragment so that it corresponds to the same secondary resource, regardless of how it is represented, or should leave the fragment undefined (i.e., not found). Berners-Lee, et al. Standards Track [Page 24] RFC 3986 URI Generic Syntax January 2005 As with any URI, use of a fragment identifier component does not imply that a retrieval action will take place. A URI with a fragment identifier may be used to refer to the secondary resource without any implication that the primary resource is accessible or will ever be accessed. Fragment identifiers have a special role in information retrieval systems as the primary form of client-side indirect referencing, allowing an author to specifically identify aspects of an existing resource that are only indirectly provided by the resource owner. As such, the fragment identifier is not used in the scheme-specific processing of a URI; instead, the fragment identifier is separated from the rest of the URI prior to a dereference, and thus the identifying information within the fragment itself is dereferenced solely by the user agent, regardless of the URI scheme. Although this separate handling is often perceived to be a loss of information, particularly for accurate redirection of references as resources move over time, it also serves to prevent information providers from denying reference authors the right to refer to information within a resource selectively. Indirect referencing also provides additional flexibility and extensibility to systems that use URIs, as new media types are easier to define and deploy than new schemes of identification. The characters slash ("/") and question mark ("?") are allowed to represent data within the fragment identifier. Beware that some older, erroneous implementations may not handle this data correctly when it is used as the base URI for relative references (Section 5.1). 4. Usage When applications make reference to a URI, they do not always use the full form of reference defined by the "URI" syntax rule. To save space and take advantage of hierarchical locality, many Internet protocol elements and media type formats allow an abbreviation of a URI, whereas others restrict the syntax to a particular form of URI. We define the most common forms of reference syntax in this specification because they impact and depend upon the design of the generic syntax, requiring a uniform parsing algorithm in order to be interpreted consistently. 4.1. URI Reference URI-reference is used to denote the most common usage of a resource identifier. URI-reference = URI / relative-ref Berners-Lee, et al. Standards Track [Page 25] RFC 3986 URI Generic Syntax January 2005 A URI-reference is either a URI or a relative reference. If the URI-reference's prefix does not match the syntax of a scheme followed by its colon separator, then the URI-reference is a relative reference. A URI-reference is typically parsed first into the five URI components, in order to determine what components are present and whether the reference is relative. Then, each component is parsed for its subparts and their validation. The ABNF of URI-reference, along with the "first-match-wins" disambiguation rule, is sufficient to define a validating parser for the generic syntax. Readers familiar with regular expressions should see Appendix B for an example of a non-validating URI-reference parser that will take any given string and extract the URI components. 4.2. Relative Reference A relative reference takes advantage of the hierarchical syntax (Section 1.2.3) to express a URI reference relative to the name space of another hierarchical URI. relative-ref = relative-part [ "?" query ] [ "#" fragment ] relative-part = "//" authority path-abempty / path-absolute / path-noscheme / path-empty The URI referred to by a relative reference, also known as the target URI, is obtained by applying the reference resolution algorithm of Section 5. A relative reference that begins with two slash characters is termed a network-path reference; such references are rarely used. A relative reference that begins with a single slash character is termed an absolute-path reference. A relative reference that does not begin with a slash character is termed a relative-path reference. A path segment that contains a colon character (e.g., "this:that") cannot be used as the first segment of a relative-path reference, as it would be mistaken for a scheme name. Such a segment must be preceded by a dot-segment (e.g., "./this:that") to make a relative- path reference. Berners-Lee, et al. Standards Track [Page 26] RFC 3986 URI Generic Syntax January 2005 4.3. Absolute URI Some protocol elements allow only the absolute form of a URI without a fragment identifier. For example, defining a base URI for later use by relative references calls for an absolute-URI syntax rule that does not allow a fragment. absolute-URI = scheme ":" hier-part [ "?" query ] URI scheme specifications must define their own syntax so that all strings matching their scheme-specific syntax will also match the <absolute-URI> grammar. Scheme specifications will not define fragment identifier syntax or usage, regardless of its applicability to resources identifiable via that scheme, as fragment identification is orthogonal to scheme definition. However, scheme specifications are encouraged to include a wide range of examples, including examples that show use of the scheme's URIs with fragment identifiers when such usage is appropriate. 4.4. Same-Document Reference When a URI reference refers to a URI that is, aside from its fragment component (if any), identical to the base URI (Section 5.1), that reference is called a "same-document" reference. The most frequent examples of same-document references are relative references that are empty or include only the number sign ("#") separator followed by a fragment identifier. When a same-document reference is dereferenced for a retrieval action, the target of that reference is defined to be within the same entity (representation, document, or message) as the reference; therefore, a dereference should not result in a new retrieval action. Normalization of the base and target URIs prior to their comparison, as described in Sections 6.2.2 and 6.2.3, is allowed but rarely performed in practice. Normalization may increase the set of same- document references, which may be of benefit to some caching applications. As such, reference authors should not assume that a slightly different, though equivalent, reference URI will (or will not) be interpreted as a same-document reference by any given application. 4.5. Suffix Reference The URI syntax is designed for unambiguous reference to resources and extensibility via the URI scheme. However, as URI identification and usage have become commonplace, traditional media (television, radio, newspapers, billboards, etc.) have increasingly used a suffix of the Berners-Lee, et al. Standards Track [Page 27] RFC 3986 URI Generic Syntax January 2005 URI as a reference, consisting of only the authority and path portions of the URI, such as www.w3.org/Addressing/ or simply a DNS registered name on its own. Such references are primarily intended for human interpretation rather than for machines, with the assumption that context-based heuristics are sufficient to complete the URI (e.g., most registered names beginning with "www" are likely to have a URI prefix of "http://"). Although there is no standard set of heuristics for disambiguating a URI suffix, many client implementations allow them to be entered by the user and heuristically resolved. Although this practice of using suffix references is common, it should be avoided whenever possible and should never be used in situations where long-term references are expected. The heuristics noted above will change over time, particularly when a new URI scheme becomes popular, and are often incorrect when used out of context. Furthermore, they can lead to security issues along the lines of those described in [RFC1535]. As a URI suffix has the same syntax as a relative-path reference, a suffix reference cannot be used in contexts where a relative reference is expected. As a result, suffix references are limited to places where there is no defined base URI, such as dialog boxes and off-line advertisements. 5. Reference Resolution This section defines the process of resolving a URI reference within a context that allows relative references so that the result is a string matching the <URI> syntax rule of Section 3. 5.1. Establishing a Base URI The term "relative" implies that a "base URI" exists against which the relative reference is applied. Aside from fragment-only references (Section 4.4), relative references are only usable when a base URI is known. A base URI must be established by the parser prior to parsing URI references that might be relative. A base URI must conform to the <absolute-URI> syntax rule (Section 4.3). If the base URI is obtained from a URI reference, then that reference must be converted to absolute form and stripped of any fragment component prior to its use as a base URI. Berners-Lee, et al. Standards Track [Page 28] RFC 3986 URI Generic Syntax January 2005 The base URI of a reference can be established in one of four ways, discussed below in order of precedence. The order of precedence can be thought of in terms of layers, where the innermost defined base URI has the highest precedence. This can be visualized graphically as follows: .----------------------------------------------------------. | .----------------------------------------------------. | | | .----------------------------------------------. | | | | | .----------------------------------------. | | | | | | | .----------------------------------. | | | | | | | | | <relative-reference> | | | | | | | | | `----------------------------------' | | | | | | | | (5.1.1) Base URI embedded in content | | | | | | | `----------------------------------------' | | | | | | (5.1.2) Base URI of the encapsulating entity | | | | | | (message, representation, or none) | | | | | `----------------------------------------------' | | | | (5.1.3) URI used to retrieve the entity | | | `----------------------------------------------------' | | (5.1.4) Default Base URI (application-dependent) | `----------------------------------------------------------' 5.1.1. Base URI Embedded in Content Within certain media types, a base URI for relative references can be embedded within the content itself so that it can be readily obtained by a parser. This can be useful for descriptive documents, such as tables of contents, which may be transmitted to others through protocols other than their usual retrieval context (e.g., email or USENET news). It is beyond the scope of this specification to specify how, for each media type, a base URI can be embedded. The appropriate syntax, when available, is described by the data format specification associated with each media type. 5.1.2. Base URI from the Encapsulating Entity If no base URI is embedded, the base URI is defined by the representation's retrieval context. For a document that is enclosed within another entity, such as a message or archive, the retrieval context is that entity. Thus, the default base URI of a representation is the base URI of the entity in which the representation is encapsulated. Berners-Lee, et al. Standards Track [Page 29] RFC 3986 URI Generic Syntax January 2005 A mechanism for embedding a base URI within MIME container types (e.g., the message and multipart types) is defined by MHTML [RFC2557]. Protocols that do not use the MIME message header syntax, but that do allow some form of tagged metadata to be included within messages, may define their own syntax for defining a base URI as part of a message. 5.1.3. Base URI from the Retrieval URI If no base URI is embedded and the representation is not encapsulated within some other entity, then, if a URI was used to retrieve the representation, that URI shall be considered the base URI. Note that if the retrieval was the result of a redirected request, the last URI used (i.e., the URI that resulted in the actual retrieval of the representation) is the base URI. 5.1.4. Default Base URI If none of the conditions described above apply, then the base URI is defined by the context of the application. As this definition is necessarily application-dependent, failing to define a base URI by using one of the other methods may result in the same content being interpreted differently by different types of applications. A sender of a representation containing relative references is responsible for ensuring that a base URI for those references can be established. Aside from fragment-only references, relative references can only be used reliably in situations where the base URI is well defined. 5.2. Relative Resolution This section describes an algorithm for converting a URI reference that might be relative to a given base URI into the parsed components of the reference's target. The components can then be recomposed, as described in Section 5.3, to form the target URI. This algorithm provides definitive results that can be used to test the output of other implementations. Applications may implement relative reference resolution by using some other algorithm, provided that the results match what would be given by this one. Berners-Lee, et al. Standards Track [Page 30] RFC 3986 URI Generic Syntax January 2005 5.2.1. Pre-parse the Base URI The base URI (Base) is established according to the procedure of Section 5.1 and parsed into the five main components described in Section 3. Note that only the scheme component is required to be present in a base URI; the other components may be empty or undefined. A component is undefined if its associated delimiter does not appear in the URI reference; the path component is never undefined, though it may be empty. Normalization of the base URI, as described in Sections 6.2.2 and 6.2.3, is optional. A URI reference must be transformed to its target URI before it can be normalized. 5.2.2. Transform References For each URI reference (R), the following pseudocode describes an algorithm for transforming R into its target URI (T): -- The URI reference is parsed into the five URI components -- (R.scheme, R.authority, R.path, R.query, R.fragment) = parse(R); -- A non-strict parser may ignore a scheme in the reference -- if it is identical to the base URI's scheme. -- if ((not strict) and (R.scheme == Base.scheme)) then undefine(R.scheme); endif; Berners-Lee, et al. Standards Track [Page 31] RFC 3986 URI Generic Syntax January 2005 if defined(R.scheme) then T.scheme = R.scheme; T.authority = R.authority; T.path = remove_dot_segments(R.path); T.query = R.query; else if defined(R.authority) then T.authority = R.authority; T.path = remove_dot_segments(R.path); T.query = R.query; else if (R.path == "") then T.path = Base.path; if defined(R.query) then T.query = R.query; else T.query = Base.query; endif; else if (R.path starts-with "/") then T.path = remove_dot_segments(R.path); else T.path = merge(Base.path, R.path); T.path = remove_dot_segments(T.path); endif; T.query = R.query; endif; T.authority = Base.authority; endif; T.scheme = Base.scheme; endif; T.fragment = R.fragment; 5.2.3. Merge Paths The pseudocode above refers to a "merge" routine for merging a relative-path reference with the path of the base URI. This is accomplished as follows: o If the base URI has a defined authority component and an empty path, then return a string consisting of "/" concatenated with the reference's path; otherwise, Berners-Lee, et al. Standards Track [Page 32] RFC 3986 URI Generic Syntax January 2005 o return a string consisting of the reference's path component appended to all but the last segment of the base URI's path (i.e., excluding any characters after the right-most "/" in the base URI path, or excluding the entire base URI path if it does not contain any "/" characters). 5.2.4. Remove Dot Segments The pseudocode also refers to a "remove_dot_segments" routine for interpreting and removing the special "." and ".." complete path segments from a referenced path. This is done after the path is extracted from a reference, whether or not the path was relative, in order to remove any invalid or extraneous dot-segments prior to forming the target URI. Although there are many ways to accomplish this removal process, we describe a simple method using two string buffers. 1. The input buffer is initialized with the now-appended path components and the output buffer is initialized to the empty string. 2. While the input buffer is not empty, loop as follows: A. If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise, B. if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise, C. if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise, D. if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise, E. move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer. 3. Finally, the output buffer is returned as the result of remove_dot_segments. Berners-Lee, et al. Standards Track [Page 33] RFC 3986 URI Generic Syntax January 2005 Note that dot-segments are intended for use in URI references to express an identifier relative to the hierarchy of names in the base URI. The remove_dot_segments algorithm respects that hierarchy by removing extra dot-segments rather than treat them as an error or leaving them to be misinterpreted by dereference implementations. The following illustrates how the above steps are applied for two examples of merged paths, showing the state of the two buffers after each step. STEP OUTPUT BUFFER INPUT BUFFER 1 : /a/b/c/./../../g 2E: /a /b/c/./../../g 2E: /a/b /c/./../../g 2E: /a/b/c /./../../g 2B: /a/b/c /../../g 2C: /a/b /../g 2C: /a /g 2E: /a/g STEP OUTPUT BUFFER INPUT BUFFER 1 : mid/content=5/../6 2E: mid /content=5/../6 2E: mid/content=5 /../6 2C: mid /6 2E: mid/6 Some applications may find it more efficient to implement the remove_dot_segments algorithm by using two segment stacks rather than strings. Note: Beware that some older, erroneous implementations will fail to separate a reference's query component from its path component prior to merging the base and reference paths, resulting in an interoperability failure if the query component contains the strings "/../" or "/./". Berners-Lee, et al. Standards Track [Page 34] RFC 3986 URI Generic Syntax January 2005 5.3. Component Recomposition Parsed URI components can be recomposed to obtain the corresponding URI reference string. Using pseudocode, this would be: result = "" if defined(scheme) then append scheme to result; append ":" to result; endif; if defined(authority) then append "//" to result; append authority to result; endif; append path to result; if defined(query) then append "?" to result; append query to result; endif; if defined(fragment) then append "#" to result; append fragment to result; endif; return result; Note that we are careful to preserve the distinction between a component that is undefined, meaning that its separator was not present in the reference, and a component that is empty, meaning that the separator was present and was immediately followed by the next component separator or the end of the reference. 5.4. Reference Resolution Examples Within a representation with a well defined base URI of http://a/b/c/d;p?q a relative reference is transformed to its target URI as follows. Berners-Lee, et al. Standards Track [Page 35] RFC 3986 URI Generic Syntax January 2005 5.4.1. Normal Examples "g:h" = "g:h" "g" = "http://a/b/c/g" "./g" = "http://a/b/c/g" "g/" = "http://a/b/c/g/" "/g" = "http://a/g" "//g" = "http://g" "?y" = "http://a/b/c/d;p?y" "g?y" = "http://a/b/c/g?y" "#s" = "http://a/b/c/d;p?q#s" "g#s" = "http://a/b/c/g#s" "g?y#s" = "http://a/b/c/g?y#s" ";x" = "http://a/b/c/;x" "g;x" = "http://a/b/c/g;x" "g;x?y#s" = "http://a/b/c/g;x?y#s" "" = "http://a/b/c/d;p?q" "." = "http://a/b/c/" "./" = "http://a/b/c/" ".." = "http://a/b/" "../" = "http://a/b/" "../g" = "http://a/b/g" "../.." = "http://a/" "../../" = "http://a/" "../../g" = "http://a/g" 5.4.2. Abnormal Examples Although the following abnormal examples are unlikely to occur in normal practice, all URI parsers should be capable of resolving them consistently. Each example uses the same base as that above. Parsers must be careful in handling cases where there are more ".." segments in a relative-path reference than there are hierarchical levels in the base URI's path. Note that the ".." syntax cannot be used to change the authority component of a URI. "../../../g" = "http://a/g" "../../../../g" = "http://a/g" Berners-Lee, et al. Standards Track [Page 36] RFC 3986 URI Generic Syntax January 2005 Similarly, parsers must remove the dot-segments "." and ".." when they are complete components of a path, but not when they are only part of a segment. "/./g" = "http://a/g" "/../g" = "http://a/g" "g." = "http://a/b/c/g." ".g" = "http://a/b/c/.g" "g.." = "http://a/b/c/g.." "..g" = "http://a/b/c/..g" Less likely are cases where the relative reference uses unnecessary or nonsensical forms of the "." and ".." complete path segments. "./../g" = "http://a/b/g" "./g/." = "http://a/b/c/g/" "g/./h" = "http://a/b/c/g/h" "g/../h" = "http://a/b/c/h" "g;x=1/./y" = "http://a/b/c/g;x=1/y" "g;x=1/../y" = "http://a/b/c/y" Some applications fail to separate the reference's query and/or fragment components from the path component before merging it with the base path and removing dot-segments. This error is rarely noticed, as typical usage of a fragment never includes the hierarchy ("/") character and the query component is not normally used within relative references. "g?y/./x" = "http://a/b/c/g?y/./x" "g?y/../x" = "http://a/b/c/g?y/../x" "g#s/./x" = "http://a/b/c/g#s/./x" "g#s/../x" = "http://a/b/c/g#s/../x" Some parsers allow the scheme name to be present in a relative reference if it is the same as the base URI scheme. This is considered to be a loophole in prior specifications of partial URI [RFC1630]. Its use should be avoided but is allowed for backward compatibility. "http:g" = "http:g" ; for strict parsers / "http://a/b/c/g" ; for backward compatibility Berners-Lee, et al. Standards Track [Page 37] RFC 3986 URI Generic Syntax January 2005 6. Normalization and Comparison One of the most common operations on URIs is simple comparison: determining whether two URIs are equivalent without using the URIs to access their respective resource(s). A comparison is performed every time a response cache is accessed, a browser checks its history to color a link, or an XML parser processes tags within a namespace. Extensive normalization prior to comparison of URIs is often used by spiders and indexing engines to prune a search space or to reduce duplication of request actions and response storage. URI comparison is performed for some particular purpose. Protocols or implementations that compare URIs for different purposes will often be subject to differing design trade-offs in regards to how much effort should be spent in reducing aliased identifiers. This section describes various methods that may be used to compare URIs, the trade-offs between them, and the types of applications that might use them. 6.1. Equivalence Because URIs exist to identify resources, presumably they should be considered equivalent when they identify the same resource. However, this definition of equivalence is not of much practical use, as there is no way for an implementation to compare two resources unless it has full knowledge or control of them. For this reason, determination of equivalence or difference of URIs is based on string comparison, perhaps augmented by reference to additional rules provided by URI scheme definitions. We use the terms "different" and "equivalent" to describe the possible outcomes of such comparisons, but there are many application-dependent versions of equivalence. Even though it is possible to determine that two URIs are equivalent, URI comparison is not sufficient to determine whether two URIs identify different resources. For example, an owner of two different domain names could decide to serve the same resource from both, resulting in two different URIs. Therefore, comparison methods are designed to minimize false negatives while strictly avoiding false positives. In testing for equivalence, applications should not directly compare relative references; the references should be converted to their respective target URIs before comparison. When URIs are compared to select (or avoid) a network action, such as retrieval of a representation, fragment components (if any) should be excluded from the comparison. Berners-Lee, et al. Standards Track [Page 38] RFC 3986 URI Generic Syntax January 2005 6.2. Comparison Ladder A variety of methods are used in practice to test URI equivalence. These methods fall into a range, distinguished by the amount of processing required and the degree to which the probability of false negatives is reduced. As noted above, false negatives cannot be eliminated. In practice, their probability can be reduced, but this reduction requires more processing and is not cost-effective for all applications. If this range of comparison practices is considered as a ladder, the following discussion will climb the ladder, starting with practices that are cheap but have a relatively higher chance of producing false negatives, and proceeding to those that have higher computational cost and lower risk of false negatives. 6.2.1. Simple String Comparison If two URIs, when considered as character strings, are identical, then it is safe to conclude that they are equivalent. This type of equivalence test has very low computational cost and is in wide use in a variety of applications, particularly in the domain of parsing. Testing strings for equivalence requires some basic precautions. This procedure is often referred to as "bit-for-bit" or "byte-for-byte" comparison, which is potentially misleading. Testing strings for equality is normally based on pair comparison of the characters that make up the strings, starting from the first and proceeding until both strings are exhausted and all characters are found to be equal, until a pair of characters compares unequal, or until one of the strings is exhausted before the other. This character comparison requires that each pair of characters be put in comparable form. For example, should one URI be stored in a byte array in EBCDIC encoding and the second in a Java String object (UTF-16), bit-for-bit comparisons applied naively will produce errors. It is better to speak of equality on a character-for- character basis rather than on a byte-for-byte or bit-for-bit basis. In practical terms, character-by-character comparisons should be done codepoint-by-codepoint after conversion to a common character encoding. False negatives are caused by the production and use of URI aliases. Unnecessary aliases can be reduced, regardless of the comparison method, by consistently providing URI references in an already- normalized form (i.e., a form identical to what would be produced after normalization is applied, as described below). Berners-Lee, et al. Standards Track [Page 39] RFC 3986 URI Generic Syntax January 2005 Protocols and data formats often limit some URI comparisons to simple string comparison, based on the theory that people and implementations will, in their own best interest, be consistent in providing URI references, or at least consistent enough to negate any efficiency that might be obtained from further normalization. 6.2.2. Syntax-Based Normalization Implementations may use logic based on the definitions provided by this specification to reduce the probability of false negatives. This processing is moderately higher in cost than character-for- character string comparison. For example, an application using this approach could reasonably consider the following two URIs equivalent: example://a/b/c/%7Bfoo%7D eXAMPLE://a/./b/../b/%63/%7bfoo%7d Web user agents, such as browsers, typically apply this type of URI normalization when determining whether a cached response is available. Syntax-based normalization includes such techniques as case normalization, percent-encoding normalization, and removal of dot-segments. 6.2.2.1. Case Normalization For all URIs, the hexadecimal digits within a percent-encoding triplet (e.g., "%3a" versus "%3A") are case-insensitive and therefore should be normalized to use uppercase letters for the digits A-F. When a URI uses components of the generic syntax, the component syntax equivalence rules always apply; namely, that the scheme and host are case-insensitive and therefore should be normalized to lowercase. For example, the URI <HTTP://www.EXAMPLE.com/> is equivalent to <http://www.example.com/>. The other generic syntax components are assumed to be case-sensitive unless specifically defined otherwise by the scheme (see Section 6.2.3). 6.2.2.2. Percent-Encoding Normalization The percent-encoding mechanism (Section 2.1) is a frequent source of variance among otherwise identical URIs. In addition to the case normalization issue noted above, some URI producers percent-encode octets that do not require percent-encoding, resulting in URIs that are equivalent to their non-encoded counterparts. These URIs should be normalized by decoding any percent-encoded octet that corresponds to an unreserved character, as described in Section 2.3. Berners-Lee, et al. Standards Track [Page 40] RFC 3986 URI Generic Syntax January 2005 6.2.2.3. Path Segment Normalization The complete path segments "." and ".." are intended only for use within relative references (Section 4.1) and are removed as part of the reference resolution process (Section 5.2). However, some deployed implementations incorrectly assume that reference resolution is not necessary when the reference is already a URI and thus fail to remove dot-segments when they occur in non-relative paths. URI normalizers should remove dot-segments by applying the remove_dot_segments algorithm to the path, as described in Section 5.2.4. 6.2.3. Scheme-Based Normalization The syntax and semantics of URIs vary from scheme to scheme, as described by the defining specification for each scheme. Implementations may use scheme-specific rules, at further processing cost, to reduce the probability of false negatives. For example, because the "http" scheme makes use of an authority component, has a default port of "80", and defines an empty path to be equivalent to "/", the following four URIs are equivalent: http://example.com http://example.com/ http://example.com:/ http://example.com:80/ In general, a URI that uses the generic syntax for authority with an empty path should be normalized to a path of "/". Likewise, an explicit ":port", for which the port is empty or the default for the scheme, is equivalent to one where the port and its ":" delimiter are elided and thus should be removed by scheme-based normalization. For example, the second URI above is the normal form for the "http" scheme. Another case where normalization varies by scheme is in the handling of an empty authority component or empty host subcomponent. For many scheme specifications, an empty authority or host is considered an error; for others, it is considered equivalent to "localhost" or the end-user's host. When a scheme defines a default for authority and a URI reference to that default is desired, the reference should be normalized to an empty authority for the sake of uniformity, brevity, and internationalization. If, however, either the userinfo or port subcomponents are non-empty, then the host should be given explicitly even if it matches the default. Normalization should not remove delimiters when their associated component is empty unless licensed to do so by the scheme Berners-Lee, et al. Standards Track [Page 41] RFC 3986 URI Generic Syntax January 2005 specification. For example, the URI "http://example.com/?" cannot be assumed to be equivalent to any of the examples above. Likewise, the presence or absence of delimiters within a userinfo subcomponent is usually significant to its interpretation. The fragment component is not subject to any scheme-based normalization; thus, two URIs that differ only by the suffix "#" are considered different regardless of the scheme. Some schemes define additional subcomponents that consist of case- insensitive data, giving an implicit license to normalizers to convert this data to a common case (e.g., all lowercase). For example, URI schemes that define a subcomponent of path to contain an Internet hostname, such as the "mailto" URI scheme, cause that subcomponent to be case-insensitive and thus subject to case normalization (e.g., "mailto:Joe@Example.COM" is equivalent to "mailto:Joe@example.com", even though the generic syntax considers the path component to be case-sensitive). Other scheme-specific normalizations are possible. 6.2.4. Protocol-Based Normalization Substantial effort to reduce the incidence of false negatives is often cost-effective for web spiders. Therefore, they implement even more aggressive techniques in URI comparison. For example, if they observe that a URI such as http://example.com/data redirects to a URI differing only in the trailing slash http://example.com/data/ they will likely regard the two as equivalent in the future. This kind of technique is only appropriate when equivalence is clearly indicated by both the result of accessing the resources and the common conventions of their scheme's dereference algorithm (in this case, use of redirection by HTTP origin servers to avoid problems with relative references). Berners-Lee, et al. Standards Track [Page 42] RFC 3986 URI Generic Syntax January 2005 7. Security Considerations A URI does not in itself pose a security threat. However, as URIs are often used to provide a compact set of instructions for access to network resources, care must be taken to properly interpret the data within a URI, to prevent that data from causing unintended access, and to avoid including data that should not be revealed in plain text. 7.1. Reliability and Consistency There is no guarantee that once a URI has been used to retrieve information, the same information will be retrievable by that URI in the future. Nor is there any guarantee that the information retrievable via that URI in the future will be observably similar to that retrieved in the past. The URI syntax does not constrain how a given scheme or authority apportions its namespace or maintains it over time. Such guarantees can only be obtained from the person(s) controlling that namespace and the resource in question. A specific URI scheme may define additional semantics, such as name persistence, if those semantics are required of all naming authorities for that scheme. 7.2. Malicious Construction It is sometimes possible to construct a URI so that an attempt to perform a seemingly harmless, idempotent operation, such as the retrieval of a representation, will in fact cause a possibly damaging remote operation. The unsafe URI is typically constructed by specifying a port number other than that reserved for the network protocol in question. The client unwittingly contacts a site running a different protocol service, and data within the URI contains instructions that, when interpreted according to this other protocol, cause an unexpected operation. A frequent example of such abuse has been the use of a protocol-based scheme with a port component of "25", thereby fooling user agent software into sending an unintended or impersonating message via an SMTP server. Applications should prevent dereference of a URI that specifies a TCP port number within the "well-known port" range (0 - 1023) unless the protocol being used to dereference that URI is compatible with the protocol expected on that well-known port. Although IANA maintains a registry of well-known ports, applications should make such restrictions user-configurable to avoid preventing the deployment of new services. Berners-Lee, et al. Standards Track [Page 43] RFC 3986 URI Generic Syntax January 2005 When a URI contains percent-encoded octets that match the delimiters for a given resolution or dereference protocol (for example, CR and LF characters for the TELNET protocol), these percent-encodings must not be decoded before transmission across that protocol. Transfer of the percent-encoding, which might violate the protocol, is less harmful than allowing decoded octets to be interpreted as additional operations or parameters, perhaps triggering an unexpected and possibly harmful remote operation. 7.3. Back-End Transcoding When a URI is dereferenced, the data within it is often parsed by both the user agent and one or more servers. In HTTP, for example, a typical user agent will parse a URI into its five major components, access the authority's server, and send it the data within the authority, path, and query components. A typical server will take that information, parse the path into segments and the query into key/value pairs, and then invoke implementation-specific handlers to respond to the request. As a result, a common security concern for server implementations that handle a URI, either as a whole or split into separate components, is proper interpretation of the octet data represented by the characters and percent-encodings within that URI. Percent-encoded octets must be decoded at some point during the dereference process. Applications must split the URI into its components and subcomponents prior to decoding the octets, as otherwise the decoded octets might be mistaken for delimiters. Security checks of the data within a URI should be applied after decoding the octets. Note, however, that the "%00" percent-encoding (NUL) may require special handling and should be rejected if the application is not expecting to receive raw data within a component. Special care should be taken when the URI path interpretation process involves the use of a back-end file system or related system functions. File systems typically assign an operational meaning to special characters, such as the "/", "\", ":", "[", and "]" characters, and to special device names like ".", "..", "...", "aux", "lpt", etc. In some cases, merely testing for the existence of such a name will cause the operating system to pause or invoke unrelated system calls, leading to significant security concerns regarding denial of service and unintended data transfer. It would be impossible for this specification to list all such significant characters and device names. Implementers should research the reserved names and characters for the types of storage device that may be attached to their applications and restrict the use of data obtained from URI components accordingly. Berners-Lee, et al. Standards Track [Page 44] RFC 3986 URI Generic Syntax January 2005 7.4. Rare IP Address Formats Although the URI syntax for IPv4address only allows the common dotted-decimal form of IPv4 address literal, many implementations that process URIs make use of platform-dependent system routines, such as gethostbyname() and inet_aton(), to translate the string literal to an actual IP address. Unfortunately, such system routines often allow and process a much larger set of formats than those described in Section 3.2.2. For example, many implementations allow dotted forms of three numbers, wherein the last part is interpreted as a 16-bit quantity and placed in the right-most two bytes of the network address (e.g., a Class B network). Likewise, a dotted form of two numbers means that the last part is interpreted as a 24-bit quantity and placed in the right-most three bytes of the network address (Class A), and a single number (without dots) is interpreted as a 32-bit quantity and stored directly in the network address. Adding further to the confusion, some implementations allow each dotted part to be interpreted as decimal, octal, or hexadecimal, as specified in the C language (i.e., a leading 0x or 0X implies hexadecimal; a leading 0 implies octal; otherwise, the number is interpreted as decimal). These additional IP address formats are not allowed in the URI syntax due to differences between platform implementations. However, they can become a security concern if an application attempts to filter access to resources based on the IP address in string literal format. If this filtering is performed, literals should be converted to numeric form and filtered based on the numeric value, and not on a prefix or suffix of the string form. 7.5. Sensitive Information URI producers should not provide a URI that contains a username or password that is intended to be secret. URIs are frequently displayed by browsers, stored in clear text bookmarks, and logged by user agent history and intermediary applications (proxies). A password appearing within the userinfo component is deprecated and should be considered an error (or simply ignored) except in those rare cases where the 'password' parameter is intended to be public. 7.6. Semantic Attacks Because the userinfo subcomponent is rarely used and appears before the host in the authority component, it can be used to construct a URI intended to mislead a human user by appearing to identify one (trusted) naming authority while actually identifying a different authority hidden behind the noise. For example Berners-Lee, et al. Standards Track [Page 45] RFC 3986 URI Generic Syntax January 2005 ftp://cnn.example.com&story=breaking_news@10.0.0.1/top_story.htm might lead a human user to assume that the host is 'cnn.example.com', whereas it is actually '10.0.0.1'. Note that a misleading userinfo subcomponent could be much longer than the example above. A misleading URI, such as that above, is an attack on the user's preconceived notions about the meaning of a URI rather than an attack on the software itself. User agents may be able to reduce the impact of such attacks by distinguishing the various components of the URI when they are rendered, such as by using a different color or tone to render userinfo if any is present, though there is no panacea. More information on URI-based semantic attacks can be found in [Siedzik]. 8. IANA Considerations URI scheme names, as defined by <scheme> in Section 3.1, form a registered namespace that is managed by IANA according to the procedures defined in [BCP35]. No IANA actions are required by this document. 9. Acknowledgements This specification is derived from RFC 2396 [RFC2396], RFC 1808 [RFC1808], and RFC 1738 [RFC1738]; the acknowledgements in those documents still apply. It also incorporates the update (with corrections) for IPv6 literals in the host syntax, as defined by Robert M. Hinden, Brian E. Carpenter, and Larry Masinter in [RFC2732]. In addition, contributions by Gisle Aas, Reese Anschultz, Daniel Barclay, Tim Bray, Mike Brown, Rob Cameron, Jeremy Carroll, Dan Connolly, Adam M. Costello, John Cowan, Jason Diamond, Martin Duerst, Stefan Eissing, Clive D.W. Feather, Al Gilman, Tony Hammond, Elliotte Harold, Pat Hayes, Henry Holtzman, Ian B. Jacobs, Michael Kay, John C. Klensin, Graham Klyne, Dan Kohn, Bruce Lilly, Andrew Main, Dave McAlpin, Ira McDonald, Michael Mealling, Ray Merkert, Stephen Pollei, Julian Reschke, Tomas Rokicki, Miles Sabin, Kai Schaetzl, Mark Thomson, Ronald Tschalaer, Norm Walsh, Marc Warne, Stuart Williams, and Henry Zongaro are gratefully acknowledged. 10. References 10.1. Normative References [ASCII] American National Standards Institute, "Coded Character Set -- 7-bit American Standard Code for Information Interchange", ANSI X3.4, 1986. Berners-Lee, et al. Standards Track [Page 46] RFC 3986 URI Generic Syntax January 2005 [RFC2234] Crocker, D. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", RFC 2234, November 1997. [STD63] Yergeau, F., "UTF-8, a transformation format of ISO 10646", STD 63, RFC 3629, November 2003. [UCS] International Organization for Standardization, "Information Technology - Universal Multiple-Octet Coded Character Set (UCS)", ISO/IEC 10646:2003, December 2003. 10.2. Informative References [BCP19] Freed, N. and J. Postel, "IANA Charset Registration Procedures", BCP 19, RFC 2978, October 2000. [BCP35] Petke, R. and I. King, "Registration Procedures for URL Scheme Names", BCP 35, RFC 2717, November 1999. [RFC0952] Harrenstien, K., Stahl, M., and E. Feinler, "DoD Internet host table specification", RFC 952, October 1985. [RFC1034] Mockapetris, P., "Domain names - concepts and facilities", STD 13, RFC 1034, November 1987. [RFC1123] Braden, R., "Requirements for Internet Hosts - Application and Support", STD 3, RFC 1123, October 1989. [RFC1535] Gavron, E., "A Security Problem and Proposed Correction With Widely Deployed DNS Software", RFC 1535, October 1993. [RFC1630] Berners-Lee, T., "Universal Resource Identifiers in WWW: A Unifying Syntax for the Expression of Names and Addresses of Objects on the Network as used in the World-Wide Web", RFC 1630, June 1994. [RFC1736] Kunze, J., "Functional Recommendations for Internet Resource Locators", RFC 1736, February 1995. [RFC1737] Sollins, K. and L. Masinter, "Functional Requirements for Uniform Resource Names", RFC 1737, December 1994. [RFC1738] Berners-Lee, T., Masinter, L., and M. McCahill, "Uniform Resource Locators (URL)", RFC 1738, December 1994. [RFC1808] Fielding, R., "Relative Uniform Resource Locators", RFC 1808, June 1995. Berners-Lee, et al. Standards Track [Page 47] RFC 3986 URI Generic Syntax January 2005 [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types", RFC 2046, November 1996. [RFC2141] Moats, R., "URN Syntax", RFC 2141, May 1997. [RFC2396] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifiers (URI): Generic Syntax", RFC 2396, August 1998. [RFC2518] Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D. Jensen, "HTTP Extensions for Distributed Authoring -- WEBDAV", RFC 2518, February 1999. [RFC2557] Palme, J., Hopmann, A., and N. Shelness, "MIME Encapsulation of Aggregate Documents, such as HTML (MHTML)", RFC 2557, March 1999. [RFC2718] Masinter, L., Alvestrand, H., Zigmond, D., and R. Petke, "Guidelines for new URL Schemes", RFC 2718, November 1999. [RFC2732] Hinden, R., Carpenter, B., and L. Masinter, "Format for Literal IPv6 Addresses in URL's", RFC 2732, December 1999. [RFC3305] Mealling, M. and R. Denenberg, "Report from the Joint W3C/IETF URI Planning Interest Group: Uniform Resource Identifiers (URIs), URLs, and Uniform Resource Names (URNs): Clarifications and Recommendations", RFC 3305, August 2002. [RFC3490] Faltstrom, P., Hoffman, P., and A. Costello, "Internationalizing Domain Names in Applications (IDNA)", RFC 3490, March 2003. [RFC3513] Hinden, R. and S. Deering, "Internet Protocol Version 6 (IPv6) Addressing Architecture", RFC 3513, April 2003. [Siedzik] Siedzik, R., "Semantic Attacks: What's in a URL?", April 2001, <http://www.giac.org/practical/gsec/ Richard_Siedzik_GSEC.pdf>. Berners-Lee, et al. Standards Track [Page 48] RFC 3986 URI Generic Syntax January 2005 Appendix A. Collected ABNF for URI URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] hier-part = "//" authority path-abempty / path-absolute / path-rootless / path-empty URI-reference = URI / relative-ref absolute-URI = scheme ":" hier-part [ "?" query ] relative-ref = relative-part [ "?" query ] [ "#" fragment ] relative-part = "//" authority path-abempty / path-absolute / path-noscheme / path-empty scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) authority = [ userinfo "@" ] host [ ":" port ] userinfo = *( unreserved / pct-encoded / sub-delims / ":" ) host = IP-literal / IPv4address / reg-name port = *DIGIT IP-literal = "[" ( IPv6address / IPvFuture ) "]" IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" ) IPv6address = 6( h16 ":" ) ls32 / "::" 5( h16 ":" ) ls32 / [ h16 ] "::" 4( h16 ":" ) ls32 / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 / [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 / [ *4( h16 ":" ) h16 ] "::" ls32 / [ *5( h16 ":" ) h16 ] "::" h16 / [ *6( h16 ":" ) h16 ] "::" h16 = 1*4HEXDIG ls32 = ( h16 ":" h16 ) / IPv4address IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet Berners-Lee, et al. Standards Track [Page 49] RFC 3986 URI Generic Syntax January 2005 dec-octet = DIGIT ; 0-9 / %x31-39 DIGIT ; 10-99 / "1" 2DIGIT ; 100-199 / "2" %x30-34 DIGIT ; 200-249 / "25" %x30-35 ; 250-255 reg-name = *( unreserved / pct-encoded / sub-delims ) path = path-abempty ; begins with "/" or is empty / path-absolute ; begins with "/" but not "//" / path-noscheme ; begins with a non-colon segment / path-rootless ; begins with a segment / path-empty ; zero characters path-abempty = *( "/" segment ) path-absolute = "/" [ segment-nz *( "/" segment ) ] path-noscheme = segment-nz-nc *( "/" segment ) path-rootless = segment-nz *( "/" segment ) path-empty = 0<pchar> segment = *pchar segment-nz = 1*pchar segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" ) ; non-zero-length segment without any colon ":" pchar = unreserved / pct-encoded / sub-delims / ":" / "@" query = *( pchar / "/" / "?" ) fragment = *( pchar / "/" / "?" ) pct-encoded = "%" HEXDIG HEXDIG unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" reserved = gen-delims / sub-delims gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@" sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" Appendix B. Parsing a URI Reference with a Regular Expression As the "first-match-wins" algorithm is identical to the "greedy" disambiguation method used by POSIX regular expressions, it is natural and commonplace to use a regular expression for parsing the potential five components of a URI reference. The following line is the regular expression for breaking-down a well-formed URI reference into its components. Berners-Lee, et al. Standards Track [Page 50] RFC 3986 URI Generic Syntax January 2005 ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 12 3 4 5 6 7 8 9 The numbers in the second line above are only to assist readability; they indicate the reference points for each subexpression (i.e., each paired parenthesis). We refer to the value matched for subexpression <n> as $<n>. For example, matching the above expression to http://www.ics.uci.edu/pub/ietf/uri/#Related results in the following subexpression matches: $1 = http: $2 = http $3 = //www.ics.uci.edu $4 = www.ics.uci.edu $5 = /pub/ietf/uri/ $6 = <undefined> $7 = <undefined> $8 = #Related $9 = Related where <undefined> indicates that the component is not present, as is the case for the query component in the above example. Therefore, we can determine the value of the five components as scheme = $2 authority = $4 path = $5 query = $7 fragment = $9 Going in the opposite direction, we can recreate a URI reference from its components by using the algorithm of Section 5.3. Appendix C. Delimiting a URI in Context URIs are often transmitted through formats that do not provide a clear context for their interpretation. For example, there are many occasions when a URI is included in plain text; examples include text sent in email, USENET news, and on printed paper. In such cases, it is important to be able to delimit the URI from the rest of the text, and in particular from punctuation marks that might be mistaken for part of the URI. In practice, URIs are delimited in a variety of ways, but usually within double-quotes "http://example.com/", angle brackets <http://example.com/>, or just by using whitespace: Berners-Lee, et al. Standards Track [Page 51] RFC 3986 URI Generic Syntax January 2005 http://example.com/ These wrappers do not form part of the URI. In some cases, extra whitespace (spaces, line-breaks, tabs, etc.) may have to be added to break a long URI across lines. The whitespace should be ignored when the URI is extracted. No whitespace should be introduced after a hyphen ("-") character. Because some typesetters and printers may (erroneously) introduce a hyphen at the end of line when breaking it, the interpreter of a URI containing a line break immediately after a hyphen should ignore all whitespace around the line break and should be aware that the hyphen may or may not actually be part of the URI. Using <> angle brackets around each URI is especially recommended as a delimiting style for a reference that contains embedded whitespace. The prefix "URL:" (with or without a trailing space) was formerly recommended as a way to help distinguish a URI from other bracketed designators, though it is not commonly used in practice and is no longer recommended. For robustness, software that accepts user-typed URI should attempt to recognize and strip both delimiters and embedded whitespace. For example, the text Yes, Jim, I found it under "http://www.w3.org/Addressing/", but you can probably pick it up from <ftp://foo.example. com/rfc/>. Note the warning in <http://www.ics.uci.edu/pub/ ietf/uri/historical.html#WARNING>. contains the URI references http://www.w3.org/Addressing/ ftp://foo.example.com/rfc/ http://www.ics.uci.edu/pub/ietf/uri/historical.html#WARNING Berners-Lee, et al. Standards Track [Page 52] RFC 3986 URI Generic Syntax January 2005 Appendix D. Changes from RFC 2396 D.1. Additions An ABNF rule for URI has been introduced to correspond to one common usage of the term: an absolute URI with optional fragment. IPv6 (and later) literals have been added to the list of possible identifiers for the host portion of an authority component, as described by [RFC2732], with the addition of "[" and "]" to the reserved set and a version flag to anticipate future versions of IP literals. Square brackets are now specified as reserved within the authority component and are not allowed outside their use as delimiters for an IP literal within host. In order to make this change without changing the technical definition of the path, query, and fragment components, those rules were redefined to directly specify the characters allowed. As [RFC2732] defers to [RFC3513] for definition of an IPv6 literal address, which, unfortunately, lacks an ABNF description of IPv6address, we created a new ABNF rule for IPv6address that matches the text representations defined by Section 2.2 of [RFC3513]. Likewise, the definition of IPv4address has been improved in order to limit each decimal octet to the range 0-255. Section 6, on URI normalization and comparison, has been completely rewritten and extended by using input from Tim Bray and discussion within the W3C Technical Architecture Group. D.2. Modifications The ad-hoc BNF syntax of RFC 2396 has been replaced with the ABNF of [RFC2234]. This change required all rule names that formerly included underscore characters to be renamed with a dash instead. In addition, a number of syntax rules have been eliminated or simplified to make the overall grammar more comprehensible. Specifications that refer to the obsolete grammar rules may be understood by replacing those rules according to the following table: Berners-Lee, et al. Standards Track [Page 53] RFC 3986 URI Generic Syntax January 2005 +----------------+--------------------------------------------------+ | obsolete rule | translation | +----------------+--------------------------------------------------+ | absoluteURI | absolute-URI | | relativeURI | relative-part [ "?" query ] | | hier_part | ( "//" authority path-abempty / | | | path-absolute ) [ "?" query ] | | | | | opaque_part | path-rootless [ "?" query ] | | net_path | "//" authority path-abempty | | abs_path | path-absolute | | rel_path | path-rootless | | rel_segment | segment-nz-nc | | reg_name | reg-name | | server | authority | | hostport | host [ ":" port ] | | hostname | reg-name | | path_segments | path-abempty | | param | *<pchar excluding ";"> | | | | | uric | unreserved / pct-encoded / ";" / "?" / ":" | | | / "@" / "&" / "=" / "+" / "$" / "," / "/" | | | | | uric_no_slash | unreserved / pct-encoded / ";" / "?" / ":" | | | / "@" / "&" / "=" / "+" / "$" / "," | | | | | mark | "-" / "_" / "." / "!" / "~" / "*" / "'" | | | / "(" / ")" | | | | | escaped | pct-encoded | | hex | HEXDIG | | alphanum | ALPHA / DIGIT | +----------------+--------------------------------------------------+ Use of the above obsolete rules for the definition of scheme-specific syntax is deprecated. Section 2, on characters, has been rewritten to explain what characters are reserved, when they are reserved, and why they are reserved, even when they are not used as delimiters by the generic syntax. The mark characters that are typically unsafe to decode, including the exclamation mark ("!"), asterisk ("*"), single-quote ("'"), and open and close parentheses ("(" and ")"), have been moved to the reserved set in order to clarify the distinction between reserved and unreserved and, hopefully, to answer the most common question of scheme designers. Likewise, the section on percent-encoded characters has been rewritten, and URI normalizers are now given license to decode any percent-encoded octets Berners-Lee, et al. Standards Track [Page 54] RFC 3986 URI Generic Syntax January 2005 corresponding to unreserved characters. In general, the terms "escaped" and "unescaped" have been replaced with "percent-encoded" and "decoded", respectively, to reduce confusion with other forms of escape mechanisms. The ABNF for URI and URI-reference has been redesigned to make them more friendly to LALR parsers and to reduce complexity. As a result, the layout form of syntax description has been removed, along with the uric, uric_no_slash, opaque_part, net_path, abs_path, rel_path, path_segments, rel_segment, and mark rules. All references to "opaque" URIs have been replaced with a better description of how the path component may be opaque to hierarchy. The relativeURI rule has been replaced with relative-ref to avoid unnecessary confusion over whether they are a subset of URI. The ambiguity regarding the parsing of URI-reference as a URI or a relative-ref with a colon in the first segment has been eliminated through the use of five separate path matching rules. The fragment identifier has been moved back into the section on generic syntax components and within the URI and relative-ref rules, though it remains excluded from absolute-URI. The number sign ("#") character has been moved back to the reserved set as a result of reintegrating the fragment syntax. The ABNF has been corrected to allow the path component to be empty. This also allows an absolute-URI to consist of nothing after the "scheme:", as is present in practice with the "dav:" namespace [RFC2518] and with the "about:" scheme used internally by many WWW browser implementations. The ambiguity regarding the boundary between authority and path has been eliminated through the use of five separate path matching rules. Registry-based naming authorities that use the generic syntax are now defined within the host rule. This change allows current implementations, where whatever name provided is simply fed to the local name resolution mechanism, to be consistent with the specification. It also removes the need to re-specify DNS name formats here. Furthermore, it allows the host component to contain percent-encoded octets, which is necessary to enable internationalized domain names to be provided in URIs, processed in their native character encodings at the application layers above URI processing, and passed to an IDNA library as a registered name in the UTF-8 character encoding. The server, hostport, hostname, domainlabel, toplabel, and alphanum rules have been removed. The resolving relative references algorithm of [RFC2396] has been rewritten with pseudocode for this revision to improve clarity and fix the following issues: Berners-Lee, et al. Standards Track [Page 55] RFC 3986 URI Generic Syntax January 2005 o [RFC2396] section 5.2, step 6a, failed to account for a base URI with no path. o Restored the behavior of [RFC1808] where, if the reference contains an empty path and a defined query component, the target URI inherits the base URI's path component. o The determination of whether a URI reference is a same-document reference has been decoupled from the URI parser, simplifying the URI processing interface within applications in a way consistent with the internal architecture of deployed URI processing implementations. The determination is now based on comparison to the base URI after transforming a reference to absolute form, rather than on the format of the reference itself. This change may result in more references being considered "same-document" under this specification than there would be under the rules given in RFC 2396, especially when normalization is used to reduce aliases. However, it does not change the status of existing same-document references. o Separated the path merge routine into two routines: merge, for describing combination of the base URI path with a relative-path reference, and remove_dot_segments, for describing how to remove the special "." and ".." segments from a composed path. The remove_dot_segments algorithm is now applied to all URI reference paths in order to match common implementations and to improve the normalization of URIs in practice. This change only impacts the parsing of abnormal references and same-scheme references wherein the base URI has a non-hierarchical path. Index A ABNF 11 absolute 27 absolute-path 26 absolute-URI 27 access 9 authority 17, 18 B base URI 28 C character encoding 4 character 4 characters 8, 11 coded character set 4 Berners-Lee, et al. Standards Track [Page 56] RFC 3986 URI Generic Syntax January 2005 D dec-octet 20 dereference 9 dot-segments 23 F fragment 16, 24 G gen-delims 13 generic syntax 6 H h16 20 hier-part 16 hierarchical 10 host 18 I identifier 5 IP-literal 19 IPv4 20 IPv4address 19, 20 IPv6 19 IPv6address 19, 20 IPvFuture 19 L locator 7 ls32 20 M merge 32 N name 7 network-path 26 P path 16, 22, 26 path-abempty 22 path-absolute 22 path-empty 22 path-noscheme 22 path-rootless 22 path-abempty 16, 22, 26 path-absolute 16, 22, 26 path-empty 16, 22, 26 Berners-Lee, et al. Standards Track [Page 57] RFC 3986 URI Generic Syntax January 2005 path-rootless 16, 22 pchar 23 pct-encoded 12 percent-encoding 12 port 22 Q query 16, 23 R reg-name 21 registered name 20 relative 10, 28 relative-path 26 relative-ref 26 remove_dot_segments 33 representation 9 reserved 12 resolution 9, 28 resource 5 retrieval 9 S same-document 27 sameness 9 scheme 16, 17 segment 22, 23 segment-nz 23 segment-nz-nc 23 sub-delims 13 suffix 27 T transcription 8 U uniform 4 unreserved 13 URI grammar absolute-URI 27 ALPHA 11 authority 18 CR 11 dec-octet 20 DIGIT 11 DQUOTE 11 fragment 24 gen-delims 13 Berners-Lee, et al. Standards Track [Page 58] RFC 3986 URI Generic Syntax January 2005 h16 20 HEXDIG 11 hier-part 16 host 19 IP-literal 19 IPv4address 20 IPv6address 20 IPvFuture 19 LF 11 ls32 20 OCTET 11 path 22 path-abempty 22 path-absolute 22 path-empty 22 path-noscheme 22 path-rootless 22 pchar 23 pct-encoded 12 port 22 query 24 reg-name 21 relative-ref 26 reserved 13 scheme 17 segment 23 segment-nz 23 segment-nz-nc 23 SP 11 sub-delims 13 unreserved 13 URI 16 URI-reference 25 userinfo 18 URI 16 URI-reference 25 URL 7 URN 7 userinfo 18 Berners-Lee, et al. Standards Track [Page 59] RFC 3986 URI Generic Syntax January 2005 Authors' Addresses Tim Berners-Lee World Wide Web Consortium Massachusetts Institute of Technology 77 Massachusetts Avenue Cambridge, MA 02139 USA Phone: +1-617-253-5702 Fax: +1-617-258-5999 EMail: timbl@w3.org URI: http://www.w3.org/People/Berners-Lee/ Roy T. Fielding Day Software 5251 California Ave., Suite 110 Irvine, CA 92617 USA Phone: +1-949-679-2960 Fax: +1-949-679-2972 EMail: fielding@gbiv.com URI: http://roy.gbiv.com/ Larry Masinter Adobe Systems Incorporated 345 Park Ave San Jose, CA 95110 USA Phone: +1-408-536-3024 EMail: LMM@acm.org URI: http://larry.masinter.net/ Berners-Lee, et al. Standards Track [Page 60] RFC 3986 URI Generic Syntax January 2005 Full Copyright Statement Copyright (C) The Internet Society (2005). This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights. This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Intellectual Property The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the IETF's procedures with respect to rights in IETF Documents can be found in BCP 78 and BCP 79. Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr. The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf- ipr@ietf.org. Acknowledgement Funding for the RFC Editor function is currently provided by the Internet Society. Berners-Lee, et al. Standards Track [Page 61] |
Added doc/rfc4229.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 | Network Working Group M. Nottingham Request for Comments: 4229 J. Mogul Category: Informational HP Labs December 2005 HTTP Header Field Registrations Status of This Memo This memo provides information for the Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited. Copyright Notice Copyright (C) The Internet Society (2005). Abstract This document defines the initial contents of a permanent IANA registry for HTTP header fields and a provisional repository for HTTP header fields, per RFC 3864. Table of Contents 1. Introduction ....................................................4 2. Registration Templates ..........................................4 2.1. Permanent HTTP Header Field Registrations ..................5 2.1.1. Header field: A-IM ....................................7 2.1.2. Header field: Accept ..................................8 2.1.3. Header field: Accept-Additions ........................8 2.1.4. Header field: Accept-Charset ..........................8 2.1.5. Header field: Accept-Encoding .........................9 2.1.6. Header field: Accept-Features .........................9 2.1.7. Header field: Accept-Language .........................9 2.1.8. Header field: Accept-Ranges ..........................10 2.1.9. Header field: Age ....................................10 2.1.10. Header field: Allow .................................10 2.1.11. Header field: Alternates ............................10 2.1.12. Header field: Authentication-Info ...................11 2.1.13. Header field: Authorization .........................11 2.1.14. Header field: C-Ext .................................11 2.1.15. Header field: C-Man .................................12 2.1.16. Header field: C-Opt .................................12 2.1.17. Header field: C-PEP .................................12 2.1.18. Header field: C-PEP-Info ............................13 2.1.19. Header field: Cache-Control .........................13 2.1.20. Header field: Connection ............................13 Nottingham & Mogul Informational [Page 1] RFC 4229 HTTP Header Fields December 2005 2.1.21. Header field: Content-Base ..........................14 2.1.22. Header field: Content-Disposition ...................14 2.1.23. Header field: Content-Encoding ......................14 2.1.24. Header field: Content-ID ............................14 2.1.25. Header field: Content-Language ......................15 2.1.26. Header field: Content-Length ........................15 2.1.27. Header field: Content-Location ......................15 2.1.28. Header field: Content-MD5 ...........................16 2.1.29. Header field: Content-Range .........................16 2.1.30. Header field: Content-Script-Type ...................16 2.1.31. Header field: Content-Style-Type ....................17 2.1.32. Header field: Content-Type ..........................17 2.1.33. Header field: Content-Version .......................17 2.1.34. Header field: Cookie ................................17 2.1.35. Header field: Cookie2 ...............................18 2.1.36. Header field: DAV ...................................18 2.1.37. Header field: Date ..................................18 2.1.38. Header field: Default-Style .........................19 2.1.39. Header field: Delta-Base ............................19 2.1.40. Header field: Depth .................................19 2.1.41. Header field: Derived-From ..........................19 2.1.42. Header field: Destination ...........................20 2.1.43. Header field: Differential-ID .......................20 2.1.44. Header field: Digest ................................20 2.1.45. Header field: ETag ..................................21 2.1.46. Header field: Expect ................................21 2.1.47. Header field: Expires ...............................21 2.1.48. Header field: Ext ...................................22 2.1.49. Header field: From ..................................22 2.1.50. Header field: GetProfile ............................22 2.1.51. Header field: Host ..................................23 2.1.52. Header field: IM ....................................23 2.1.53. Header field: If ....................................23 2.1.54. Header field: If-Match ..............................23 2.1.55. Header field: If-Modified-Since .....................24 2.1.56. Header field: If-None-Match .........................24 2.1.57. Header field: If-Range ..............................24 2.1.58. Header field: If-Unmodified-Since ...................25 2.1.59. Header field: Keep-Alive ............................25 2.1.60. Header field: Label .................................25 2.1.61. Header field: Last-Modified .........................25 2.1.62. Header field: Link ..................................26 2.1.63. Header field: Location ..............................26 2.1.64. Header field: Lock-Token ............................26 2.1.65. Header field: MIME-Version ..........................27 2.1.66. Header field: Man ...................................27 2.1.67. Header field: Max-Forwards ..........................27 2.1.68. Header field: Meter .................................27 Nottingham & Mogul Informational [Page 2] RFC 4229 HTTP Header Fields December 2005 2.1.69. Header field: Negotiate .............................28 2.1.70. Header field: Opt ...................................28 2.1.71. Header field: Ordering-Type .........................28 2.1.72. Header field: Overwrite .............................29 2.1.73. Header field: P3P ...................................29 2.1.74. Header field: PEP ...................................29 2.1.75. Header field: PICS-Label ............................30 2.1.76. Header field: Pep-Info ..............................30 2.1.77. Header field: Position ..............................30 2.1.78. Header field: Pragma ................................31 2.1.79. Header field: ProfileObject .........................31 2.1.80. Header field: Protocol ..............................31 2.1.81. Header field: Protocol-Info .........................32 2.1.82. Header field: Protocol-Query ........................32 2.1.83. Header field: Protocol-Request ......................32 2.1.84. Header field: Proxy-Authenticate ....................32 2.1.85. Header field: Proxy-Authentication-Info .............33 2.1.86. Header field: Proxy-Authorization ...................33 2.1.87. Header field: Proxy-Features ........................33 2.1.88. Header field: Proxy-Instruction .....................34 2.1.89. Header field: Public ................................34 2.1.90. Header field: Range .................................34 2.1.91. Header field: Referer ...............................34 2.1.92. Header field: Retry-After ...........................35 2.1.93. Header field: Safe ..................................35 2.1.94. Header field: Security-Scheme .......................35 2.1.95. Header field: Server ................................36 2.1.96. Header field: Set-Cookie ............................36 2.1.97. Header field: Set-Cookie2 ...........................36 2.1.98. Header field: SetProfile ............................36 2.1.99. Header field: SoapAction ............................37 2.1.100. Header field: Status-URI ...........................37 2.1.101. Header field: Surrogate-Capability .................38 2.1.102. Header field: Surrogate-Control ....................38 2.1.103. Header field: TCN ..................................38 2.1.104. Header field: TE ...................................39 2.1.105. Header field: Timeout ..............................39 2.1.106. Header field: Trailer ..............................39 2.1.107. Header field: Transfer-Encoding ....................39 2.1.108. Header field: URI ..................................40 2.1.109. Header field: Upgrade ..............................40 2.1.110. Header field: User-Agent ...........................40 2.1.111. Header field: Variant-Vary .........................41 2.1.112. Header field: Vary .................................41 2.1.113. Header field: Via ..................................41 2.1.114. Header field: WWW-Authenticate .....................41 2.1.115. Header field: Want-Digest ..........................42 2.1.116. Header field: Warning ..............................42 Nottingham & Mogul Informational [Page 3] RFC 4229 HTTP Header Fields December 2005 2.2. Provisional HTTP Header Field Submissions .................43 2.2.1. Header field: Compliance .............................43 2.2.2. Header field: Content-Transfer-Encoding ..............43 2.2.3. Header field: Cost ...................................44 2.2.4. Header field: Message-ID .............................44 2.2.5. Header field: Non-Compliance .........................44 2.2.6. Header field: Optional ...............................44 2.2.7. Header field: Resolution-Hint ........................45 2.2.8. Header field: Resolver-Location ......................45 2.2.9. Header field: SubOK ..................................46 2.2.10. Header field: Subst .................................46 2.2.11. Header field: Title .................................46 2.2.12. Header field: UA-Color ..............................46 2.2.13. Header field: UA-Media ..............................47 2.2.14. Header field: UA-Pixels .............................47 2.2.15. Header field: UA-Resolution .........................48 2.2.16. Header field: UA-Windowpixels .......................48 2.2.17. Header field: Version ...............................48 3. IANA Considerations ............................................49 4. Security Considerations ........................................49 5. Acknowledgements ...............................................49 6. Informative References .........................................49 1. Introduction HTTP/1.0 [3] and HTTP/1.1 [11] define protocol constructs (respectively, the HTTP-header and message-header BNF rules) that are used as message headers. These specifications also define a number of HTTP headers themselves, and they provide for extension through the use of new field-names. This document defines the initial contents of an IANA registry that catalogs permanent HTTP header field-names, and of an IANA repository that catalogs provisional HTTP header field-names. Both are operated according to Registration Procedures for Message Header Fields [1]. Note that neither tracks the syntax or semantics of field-values. Also, while some HTTP headers have different semantics depending on their context (e.g., Cache-Control in requests and responses), both registries consider the HTTP header field-name name space singular. Also, some contact details listed may no longer be correct. 2. Registration Templates Header field entries are summarized in tabular form for convenience of reference and presented in full in the following sections. Nottingham & Mogul Informational [Page 4] RFC 4229 HTTP Header Fields December 2005 2.1. Permanent HTTP Header Field Registrations Header name Protocol ----------- -------- A-IM http Accept http Accept-Additions http Accept-Charset http Accept-Encoding http Accept-Features http Accept-Language http Accept-Ranges http Age http Allow http Alternates http Authentication-Info http Authorization http C-Ext http C-Man http C-Opt http C-PEP http C-PEP-Info http Cache-Control http Connection http Content-Base http Content-Disposition http Content-Encoding http Content-ID http Content-Language http Content-Length http Content-Location http Content-MD5 http Content-Range http Content-Script-Type http Content-Style-Type http Content-Type http Content-Version http Cookie http Cookie2 http DAV http Date http Default-Style http Delta-Base http Depth http Derived-From http Destination http Differential-ID http Digest http Nottingham & Mogul Informational [Page 5] RFC 4229 HTTP Header Fields December 2005 ETag http Expect http Expires http Ext http From http GetProfile http Host http IM http If http If-Match http If-Modified-Since http If-None-Match http If-Range http If-Unmodified-Since http Keep-Alive http Label http Last-Modified http Link http Location http Lock-Token http MIME-Version http Man http Max-Forwards http Meter http Negotiate http Opt http Ordering-Type http Overwrite http P3P http PEP http PICS-Label http Pep-Info http Position http Pragma http ProfileObject http Protocol http Protocol-Info http Protocol-Query http Protocol-Request http Proxy-Authenticate http Proxy-Authentication-Info http Proxy-Authorization http Proxy-Features http Proxy-Instruction http Public http Range http Referer http Retry-After http Nottingham & Mogul Informational [Page 6] RFC 4229 HTTP Header Fields December 2005 Safe http Security-Scheme http Server http Set-Cookie http Set-Cookie2 http SetProfile http SoapAction http Status-URI http Surrogate-Capability http Surrogate-Control http TCN http TE http Timeout http Trailer http Transfer-Encoding http URI http Upgrade http User-Agent http Variant-Vary http Vary http Via http WWW-Authenticate http Want-Digest http Warning http 2.1.1. Header field: A-IM Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC3229 [16] Nottingham & Mogul Informational [Page 7] RFC 4229 HTTP Header Fields December 2005 2.1.2. Header field: Accept Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.3. Header field: Accept-Additions Applicable protocol: http [11] Status: informational Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2324 [9] Related information: spoof 2.1.4. Header field: Accept-Charset Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] Nottingham & Mogul Informational [Page 8] RFC 4229 HTTP Header Fields December 2005 2.1.5. Header field: Accept-Encoding Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.6. Header field: Accept-Features Applicable protocol: http [11] Status: experimental Author/change controller: Andrew H. Mutz (mutz@hpl.hp.com) Koen Holtman (koen@win.tue.nl) Specification document(s): RFC2295 [7] 2.1.7. Header field: Accept-Language Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] Nottingham & Mogul Informational [Page 9] RFC 4229 HTTP Header Fields December 2005 2.1.8. Header field: Accept-Ranges Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.9. Header field: Age Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.10. Header field: Allow Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.11. Header field: Alternates Applicable protocol: http [11] Status: experimental Nottingham & Mogul Informational [Page 10] RFC 4229 HTTP Header Fields December 2005 Author/change controller: Andrew H. Mutz (mutz@hpl.hp.com) Koen Holtman (koen@win.tue.nl) Specification document(s): RFC2295 [7] 2.1.12. Header field: Authentication-Info Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2617 [12] 2.1.13. Header field: Authorization Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.14. Header field: C-Ext Applicable protocol: http [11] Status: experimental Author/change controller: Henrik Frystyk Nielsen (frystyk@microsoft.com) Paul J. Leach (paulle@microsoft.com) Scott Lawrence (lawrence@agranat.com) Specification document(s): RFC2774 [14] Nottingham & Mogul Informational [Page 11] RFC 4229 HTTP Header Fields December 2005 2.1.15. Header field: C-Man Applicable protocol: http [11] Status: experimental Author/change controller: Henrik Frystyk Nielsen (frystyk@microsoft.com) Paul J. Leach (paulle@microsoft.com) Scott Lawrence (lawrence@agranat.com) Specification document(s): RFC2774 [14] 2.1.16. Header field: C-Opt Applicable protocol: http [11] Status: experimental Author/change controller: Henrik Frystyk Nielsen (frystyk@microsoft.com) Paul J. Leach (paulle@microsoft.com) Scott Lawrence (lawrence@agranat.com) Specification document(s): RFC2774 [14] 2.1.17. Header field: C-PEP Applicable protocol: http [11] Status: deprecated Author/change controller: Henrik Frystyk Nielsen (frystyk@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Dan Connolly (connolly@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Rohit Khare (khare@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Eric Prud'hommeaux (eric@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Specification document(s): PEP [29] Nottingham & Mogul Informational [Page 12] RFC 4229 HTTP Header Fields December 2005 2.1.18. Header field: C-PEP-Info Applicable protocol: http [11] Status: deprecated Author/change controller: Henrik Frystyk Nielsen (frystyk@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Dan Connolly (connolly@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Rohit Khare (khare@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Eric Prud'hommeaux (eric@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Specification document(s): PEP [29] 2.1.19. Header field: Cache-Control Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.20. Header field: Connection Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] Nottingham & Mogul Informational [Page 13] RFC 4229 HTTP Header Fields December 2005 2.1.21. Header field: Content-Base Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2068 [4] 2.1.22. Header field: Content-Disposition Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.23. Header field: Content-Encoding Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.24. Header field: Content-ID Applicable protocol: http [11] Status: informational Nottingham & Mogul Informational [Page 14] RFC 4229 HTTP Header Fields December 2005 Author/change controller: Arthur van Hoff (avh@marimba.com) Marimba Inc. John Giannandrea (jg@netscape.com) Netscape Inc. Mark Hapner (mark.hapner@sun.com) Sun Microsystems Inc. Steve Carter (srcarter@novell.com) Novell Inc. Milo Medin (medin@home.net) At Home Corp Specification document(s): DRP [20] 2.1.25. Header field: Content-Language Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.26. Header field: Content-Length Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.27. Header field: Content-Location Applicable protocol: http [11] Status: standard Nottingham & Mogul Informational [Page 15] RFC 4229 HTTP Header Fields December 2005 Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.28. Header field: Content-MD5 Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.29. Header field: Content-Range Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.30. Header field: Content-Script-Type Applicable protocol: http [11] Status: standard Author/change controller: W3C (web-human@w3.org) World Wide Web Consortium Specification document(s): HTML 4 [21] Nottingham & Mogul Informational [Page 16] RFC 4229 HTTP Header Fields December 2005 2.1.31. Header field: Content-Style-Type Applicable protocol: http [11] Status: standard Author/change controller: W3C (web-human@w3.org) World Wide Web Consortium Specification document(s): HTML 4 [21] 2.1.32. Header field: Content-Type Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.33. Header field: Content-Version Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2068 [4] 2.1.34. Header field: Cookie Applicable protocol: http [11] Status: standard Nottingham & Mogul Informational [Page 17] RFC 4229 HTTP Header Fields December 2005 Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2965 [15] 2.1.35. Header field: Cookie2 Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2965 [15] 2.1.36. Header field: DAV Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2518 [10] 2.1.37. Header field: Date Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] Nottingham & Mogul Informational [Page 18] RFC 4229 HTTP Header Fields December 2005 2.1.38. Header field: Default-Style Applicable protocol: http [11] Status: standard Author/change controller: W3C (web-human@w3.org) World Wide Web Consortium Specification document(s): HTML 4 [21] 2.1.39. Header field: Delta-Base Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC3229 [16] 2.1.40. Header field: Depth Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2518 [10] 2.1.41. Header field: Derived-From Applicable protocol: http [11] Status: standard Nottingham & Mogul Informational [Page 19] RFC 4229 HTTP Header Fields December 2005 Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2068 [4] 2.1.42. Header field: Destination Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2518 [10] 2.1.43. Header field: Differential-ID Applicable protocol: http [11] Status: informational Author/change controller: Arthur van Hoff (avh@marimba.com) Marimba Inc. John Giannandrea (jg@netscape.com) Netscape Inc. Mark Hapner (mark.hapner@sun.com) Sun Microsystems Inc. Steve Carter (srcarter@novell.com) Novell Inc. Milo Medin (medin@home.net) At Home Corp Specification document(s): DRP [20] 2.1.44. Header field: Digest Applicable protocol: http [11] Status: standard Nottingham & Mogul Informational [Page 20] RFC 4229 HTTP Header Fields December 2005 Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC3230 [17] 2.1.45. Header field: ETag Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.46. Header field: Expect Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.47. Header field: Expires Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] Nottingham & Mogul Informational [Page 21] RFC 4229 HTTP Header Fields December 2005 2.1.48. Header field: Ext Applicable protocol: http [11] Status: experimental Author/change controller: Henrik Frystyk Nielsen (frystyk@microsoft.com) Paul J. Leach (paulle@microsoft.com) Scott Lawrence (lawrence@agranat.com) Specification document(s): RFC2774 [14] 2.1.49. Header field: From Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.50. Header field: GetProfile Applicable protocol: http [11] Status: informational Author/change controller: Pat Hensley (hensley@firefly.net) FireFly Network, Inc. Max Metral (max@firefly.net) FireFly Network, Inc. Upendra Shardanand (shard@firefly.net) FireFly Network, Inc. Donna Converse (converse@netscape.com) Netscape Communications Mike Myers (mmyers@verisign.com) Verisign, Inc. Specification document(s): OPS over HTTP [22] Nottingham & Mogul Informational [Page 22] RFC 4229 HTTP Header Fields December 2005 2.1.51. Header field: Host Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.52. Header field: IM Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC3229 [16] 2.1.53. Header field: If Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2518 [10] 2.1.54. Header field: If-Match Applicable protocol: http [11] Status: standard Nottingham & Mogul Informational [Page 23] RFC 4229 HTTP Header Fields December 2005 Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.55. Header field: If-Modified-Since Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.56. Header field: If-None-Match Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.57. Header field: If-Range Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] Nottingham & Mogul Informational [Page 24] RFC 4229 HTTP Header Fields December 2005 2.1.58. Header field: If-Unmodified-Since Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.59. Header field: Keep-Alive Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2068 [4] 2.1.60. Header field: Label Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC3253 [18] 2.1.61. Header field: Last-Modified Applicable protocol: http [11] Status: standard Nottingham & Mogul Informational [Page 25] RFC 4229 HTTP Header Fields December 2005 Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.62. Header field: Link Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2068 [4] 2.1.63. Header field: Location Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.64. Header field: Lock-Token Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2518 [10] Nottingham & Mogul Informational [Page 26] RFC 4229 HTTP Header Fields December 2005 2.1.65. Header field: MIME-Version Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.66. Header field: Man Applicable protocol: http [11] Status: experimental Author/change controller: Henrik Frystyk Nielsen (frystyk@microsoft.com) Paul J. Leach (paulle@microsoft.com) Scott Lawrence (lawrence@agranat.com) Specification document(s): RFC2774 [14] 2.1.67. Header field: Max-Forwards Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.68. Header field: Meter Applicable protocol: http [11] Status: standard Nottingham & Mogul Informational [Page 27] RFC 4229 HTTP Header Fields December 2005 Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2227 [6] 2.1.69. Header field: Negotiate Applicable protocol: http [11] Status: experimental Author/change controller: Andrew H. Mutz (mutz@hpl.hp.com) Koen Holtman (koen@win.tue.nl) Specification document(s): RFC2295 [7] 2.1.70. Header field: Opt Applicable protocol: http [11] Status: experimental Author/change controller: Henrik Frystyk Nielsen (frystyk@microsoft.com) Paul J. Leach (paulle@microsoft.com) Scott Lawrence (lawrence@agranat.com) Specification document(s): RFC2774 [14] 2.1.71. Header field: Ordering-Type Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC3648 [19] Nottingham & Mogul Informational [Page 28] RFC 4229 HTTP Header Fields December 2005 2.1.72. Header field: Overwrite Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2518 [10] 2.1.73. Header field: P3P Applicable protocol: http [11] Status: standard Author/change controller: W3C (web-human@w3.org) World Wide Web Consortium Specification document(s): P3P [23] 2.1.74. Header field: PEP Applicable protocol: http [11] Status: deprecated Author/change controller: Henrik Frystyk Nielsen (frystyk@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Dan Connolly (connolly@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Rohit Khare (khare@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Eric Prud'hommeaux (eric@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Specification document(s): PEP [29] Nottingham & Mogul Informational [Page 29] RFC 4229 HTTP Header Fields December 2005 2.1.75. Header field: PICS-Label Applicable protocol: http [11] Status: standard Author/change controller: W3C (web-human@w3.org) World Wide Web Consortium Specification document(s): PICSLabels [24] 2.1.76. Header field: Pep-Info Applicable protocol: http [11] Status: deprecated Author/change controller: Henrik Frystyk Nielsen (frystyk@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Dan Connolly (connolly@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Rohit Khare (khare@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Eric Prud'hommeaux (eric@w3.org) World Wide Web Consortium, MIT Laboratory for Computer Science Specification document(s): PEP [29] 2.1.77. Header field: Position Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC3648 [19] Nottingham & Mogul Informational [Page 30] RFC 4229 HTTP Header Fields December 2005 2.1.78. Header field: Pragma Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.79. Header field: ProfileObject Applicable protocol: http [11] Status: informational Author/change controller: Pat Hensley (hensley@firefly.net) FireFly Network, Inc. Max Metral (max@firefly.net) FireFly Network, Inc. Upendra Shardanand (shard@firefly.net) FireFly Network, Inc. Donna Converse (converse@netscape.com) Netscape Communications Mike Myers (mmyers@verisign.com) Verisign, Inc. Specification document(s): OPS over HTTP [22] 2.1.80. Header field: Protocol Applicable protocol: http [11] Status: standard Author/change controller: W3C (web-human@w3.org) World Wide Web Consortium Specification document(s): PICSLabels [24] Nottingham & Mogul Informational [Page 31] RFC 4229 HTTP Header Fields December 2005 2.1.81. Header field: Protocol-Info Applicable protocol: http [11] Status: deprecated Author/change controller: Don Eastlake (dee@cybercash.com) Rohit Khare (khare@w3.org) Jim Miller (jmiller@w3.org) Specification document(s): Selecting Payment Mechanisms [26] 2.1.82. Header field: Protocol-Query Applicable protocol: http [11] Status: deprecated Author/change controller: Don Eastlake (dee@cybercash.com) Rohit Khare (khare@w3.org) Jim Miller (jmiller@w3.org) Specification document(s): Selecting Payment Mechanisms [26] 2.1.83. Header field: Protocol-Request Applicable protocol: http [11] Status: standard Author/change controller: W3C (web-human@w3.org) World Wide Web Consortium Specification document(s): PICSLabels [24] 2.1.84. Header field: Proxy-Authenticate Applicable protocol: http [11] Status: standard Nottingham & Mogul Informational [Page 32] RFC 4229 HTTP Header Fields December 2005 Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.85. Header field: Proxy-Authentication-Info Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2617 [12] 2.1.86. Header field: Proxy-Authorization Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.87. Header field: Proxy-Features Applicable protocol: http [11] Status: informational Author/change controller: Phillip M. Hallam-Baker (hallam@w3.org) W3C Specification document(s): Proxy Notification [27] Nottingham & Mogul Informational [Page 33] RFC 4229 HTTP Header Fields December 2005 2.1.88. Header field: Proxy-Instruction Applicable protocol: http [11] Status: informational Author/change controller: Phillip M. Hallam-Baker (hallam@w3.org) W3C Specification document(s): Proxy Notification [27] 2.1.89. Header field: Public Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2068 [4] 2.1.90. Header field: Range Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.91. Header field: Referer Applicable protocol: http [11] Status: standard Nottingham & Mogul Informational [Page 34] RFC 4229 HTTP Header Fields December 2005 Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.92. Header field: Retry-After Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.93. Header field: Safe Applicable protocol: http [11] Status: experimental Author/change controller: Koen Holtman (koen@win.tue.nl) Specification document(s): RFC2310 [8] 2.1.94. Header field: Security-Scheme Applicable protocol: http [11] Status: experimental Author/change controller: Eric Rescorla (ekr@rtfm.com) A. Schiffman (ams@terisa.com) Specification document(s): RFC2660 [13] Nottingham & Mogul Informational [Page 35] RFC 4229 HTTP Header Fields December 2005 2.1.95. Header field: Server Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.96. Header field: Set-Cookie Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2109 [5] 2.1.97. Header field: Set-Cookie2 Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2965 [15] 2.1.98. Header field: SetProfile Applicable protocol: http [11] Status: informational Nottingham & Mogul Informational [Page 36] RFC 4229 HTTP Header Fields December 2005 Author/change controller: Pat Hensley (hensley@firefly.net) FireFly Network, Inc. Max Metral (max@firefly.net) FireFly Network, Inc. Upendra Shardanand (shard@firefly.net) FireFly Network, Inc. Donna Converse (converse@netscape.com) Netscape Communications Mike Myers (mmyers@verisign.com) Verisign, Inc. Specification document(s): OPS over HTTP [22] 2.1.99. Header field: SoapAction Applicable protocol: http [11] Status: informational Author/change controller: Don Box (dbox@develop.com) DevelopMentor David Ehnebuske (davide@us.ibm.com) IBM Gopal Kakivaya (gopalk@microsoft.com) Microsoft Andrew Layman (andrewl@microsoft.com) Microsoft Noah Mendelsohn (Noah_Mendelsohn@lotus.com) Lotus Development Corp. Hernik Frystyk Nielsen (frystyk@microsoft.com) Microsoft Satish Thatte (satisht@microsoft.com) Microsoft Dave Winer (dave@userland.com) UserLand Software, Inc. Specification document(s): SOAP [28] 2.1.100. Header field: Status-URI Applicable protocol: http [11] Status: standard Nottingham & Mogul Informational [Page 37] RFC 4229 HTTP Header Fields December 2005 Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2518 [10] 2.1.101. Header field: Surrogate-Capability Applicable protocol: http [11] Status: informational Author/change controller: Mark Nottingham (mnot@akamai.com) Akamai Xiang Liu (xiang.liu@oracle.com) Oracle Specification document(s): edge-arch [25] 2.1.102. Header field: Surrogate-Control Applicable protocol: http [11] Status: informational Author/change controller: Mark Nottingham (mnot@akamai.com) Akamai Xiang Liu (xiang.liu@oracle.com) Oracle Specification document(s): edge-arch [25] 2.1.103. Header field: TCN Applicable protocol: http [11] Status: experimental Author/change controller: Andrew H. Mutz (mutz@hpl.hp.com) Koen Holtman (koen@win.tue.nl) Nottingham & Mogul Informational [Page 38] RFC 4229 HTTP Header Fields December 2005 Specification document(s): RFC2295 [7] 2.1.104. Header field: TE Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.105. Header field: Timeout Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2518 [10] 2.1.106. Header field: Trailer Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.107. Header field: Transfer-Encoding Applicable protocol: http [11] Status: standard Nottingham & Mogul Informational [Page 39] RFC 4229 HTTP Header Fields December 2005 Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.108. Header field: URI Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2068 [4] 2.1.109. Header field: Upgrade Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.110. Header field: User-Agent Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] Nottingham & Mogul Informational [Page 40] RFC 4229 HTTP Header Fields December 2005 2.1.111. Header field: Variant-Vary Applicable protocol: http [11] Status: experimental Author/change controller: Andrew H. Mutz (mutz@hpl.hp.com) Koen Holtman (koen@win.tue.nl) Specification document(s): RFC2295 [7] 2.1.112. Header field: Vary Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.113. Header field: Via Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.114. Header field: WWW-Authenticate Applicable protocol: http [11] Status: standard Nottingham & Mogul Informational [Page 41] RFC 4229 HTTP Header Fields December 2005 Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] 2.1.115. Header field: Want-Digest Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC3230 [17] 2.1.116. Header field: Warning Applicable protocol: http [11] Status: standard Author/change controller: IETF (iesg@ietf.org) Internet Engineering Task Force Specification document(s): RFC2616 [11] Nottingham & Mogul Informational [Page 42] RFC 4229 HTTP Header Fields December 2005 2.2. Provisional HTTP Header Field Submissions Header name Protocol ----------- -------- Compliance http Content-Transfer-Encoding http Cost http Message-ID http Non-Compliance http Optional http Resolution-Hint http Resolver-Location http SubOK http Subst http Title http UA-Color http UA-Media http UA-Pixels http UA-Resolution http UA-Windowpixels http Version http 2.2.1. Header field: Compliance Applicable protocol: http [11] Status: provisional Author/change controller: Jeffrey C. Mogul (mogul@wrl.dec.com) Western Research Laboratory, Digital Equipment Corporation Josh Cohen (josh@netscape.com) Netscape Communications Corporation Scott Lawrence (lawrence@agranat.com) Agranat Systems, Inc. Specification document(s): OPTIONS messages [31] 2.2.2. Header field: Content-Transfer-Encoding Applicable protocol: http [11] Status: provisional Author/change controller: Tim Berners-Lee (timbl@w3.org) MIT Laboratory for Computer Science Nottingham & Mogul Informational [Page 43] RFC 4229 HTTP Header Fields December 2005 Specification document(s): Object Headers [2] 2.2.3. Header field: Cost Applicable protocol: http [11] Status: provisional Author/change controller: Tim Berners-Lee (timbl@w3.org) MIT Laboratory for Computer Science Specification document(s): Object Headers [2] 2.2.4. Header field: Message-ID Applicable protocol: http [11] Status: provisional Author/change controller: Tim Berners-Lee (timbl@w3.org) MIT Laboratory for Computer Science Specification document(s): Object Headers [2] 2.2.5. Header field: Non-Compliance Applicable protocol: http [11] Status: provisional Author/change controller: Jeffrey C. Mogul (mogul@wrl.dec.com) Western Research Laboratory, Digital Equipment Corporation Josh Cohen (josh@netscape.com) Netscape Communications Corporation Scott Lawrence (lawrence@agranat.com) Agranat Systems, Inc. Specification document(s): OPTIONS messages [31] 2.2.6. Header field: Optional Applicable protocol: http [11] Status: provisional Nottingham & Mogul Informational [Page 44] RFC 4229 HTTP Header Fields December 2005 Author/change controller: John Mallery (jcma@ai.mit.edu) MIT Artificial Intelligence Laboratory Lewis Girod (girod@lcs.mit.edu) MIT Laboratory for Computer Science Benjie Chen (benjie@lcs.mit.edu) MIT Laboratory for Computer Science Henrik Frystyk Nielsen (frystyk@w3.org) World Wide Web Consortium Specification document(s): WIRE [32] 2.2.7. Header field: Resolution-Hint Applicable protocol: http [11] Status: provisional Author/change controller: John Mallery (jcma@ai.mit.edu) MIT Artificial Intelligence Laboratory Lewis Girod (girod@lcs.mit.edu) MIT Laboratory for Computer Science Benjie Chen (benjie@lcs.mit.edu) MIT Laboratory for Computer Science Henrik Frystyk Nielsen (frystyk@w3.org) World Wide Web Consortium Specification document(s): WIRE [32] 2.2.8. Header field: Resolver-Location Applicable protocol: http [11] Status: provisional Author/change controller: John Mallery (jcma@ai.mit.edu) MIT Artificial Intelligence Laboratory Lewis Girod (girod@lcs.mit.edu) MIT Laboratory for Computer Science Benjie Chen (benjie@lcs.mit.edu) MIT Laboratory for Computer Science Henrik Frystyk Nielsen (frystyk@w3.org) World Wide Web Consortium Nottingham & Mogul Informational [Page 45] RFC 4229 HTTP Header Fields December 2005 Specification document(s): WIRE [32] 2.2.9. Header field: SubOK Applicable protocol: http [11] Status: provisional Author/change controller: Jeffrey C. Mogul (mogul@wrl.dec.com) Western Research Laboratory, Digital Equipment Corporation Arthur van Hoff (avh@marimba.com) Marimba, Inc. Specification document(s): Duplicate Suppression [33] 2.2.10. Header field: Subst Applicable protocol: http [11] Status: provisional Author/change controller: Jeffrey C. Mogul (mogul@wrl.dec.com) Western Research Laboratory, Digital Equipment Corporation Arthur van Hoff (avh@marimba.com) Marimba, Inc. Specification document(s): Duplicate Suppression [33] 2.2.11. Header field: Title Applicable protocol: http [11] Status: provisional Author/change controller: Tim Berners-Lee (timbl@w3.org) MIT Laboratory for Computer Science Specification document(s): Object Headers [2] 2.2.12. Header field: UA-Color Applicable protocol: http [11] Status: provisional Nottingham & Mogul Informational [Page 46] RFC 4229 HTTP Header Fields December 2005 Author/change controller: Larry Masinter (LMM@acm.org) Adobe Systems Lou Montulli (montulli@netscape.com) Netscape Communications Corp. Andrew H. Mutz (mutz@hpl.hp.com) Hewlett-Packard Company Specification document(s): UA Attributes [30] 2.2.13. Header field: UA-Media Applicable protocol: http [11] Status: provisional Author/change controller: Larry Masinter (LMM@acm.org) Adobe Systems Lou Montulli (montulli@netscape.com) Netscape Communications Corp. Andrew H. Mutz (mutz@hpl.hp.com) Hewlett-Packard Company Specification document(s): UA Attributes [30] 2.2.14. Header field: UA-Pixels Applicable protocol: http [11] Status: provisional Author/change controller: Larry Masinter (LMM@acm.org) Adobe Systems Lou Montulli (montulli@netscape.com) Netscape Communications Corp. Andrew H. Mutz (mutz@hpl.hp.com) Hewlett-Packard Company Specification document(s): UA Attributes [31] Nottingham & Mogul Informational [Page 47] RFC 4229 HTTP Header Fields December 2005 2.2.15. Header field: UA-Resolution Applicable protocol: http [11] Status: provisional Author/change controller: Larry Masinter (LMM@acm.org) Adobe Systems Lou Montulli (montulli@netscape.com) Netscape Communications Corp. Andrew H. Mutz (mutz@hpl.hp.com) Hewlett-Packard Company Specification document(s): UA Attributes [30] 2.2.16. Header field: UA-Windowpixels Applicable protocol: http [11] Status: provisional Author/change controller: Larry Masinter (LMM@acm.org) Adobe Systems Lou Montulli (montulli@netscape.com) Netscape Communications Corp. Andrew H. Mutz (mutz@hpl.hp.com) Hewlett-Packard Company Specification document(s): UA Attributes [30] 2.2.17. Header field: Version Applicable protocol: http [11] Status: provisional Author/change controller: Tim Berners-Lee (timbl@w3.org) MIT Laboratory for Computer Science Specification document(s): Object Headers [2] Nottingham & Mogul Informational [Page 48] RFC 4229 HTTP Header Fields December 2005 3. IANA Considerations This specification provides initial registrations of HTTP header fields in the "Permanent Message Header Field Registry", defined by Registration Procedures for Message Header Fields [1]. It also provides initial submissions of HTTP header fields in the "Provisional Message Header Field Repository", defined by the same document. 4. Security Considerations No security considerations are introduced by this document beyond those already inherent in use of the HTTP header fields referenced. 5. Acknowledgements The authors would like to thank Graham Klyne for his work in defining the message header registries, his input and help in preparing this document, and the registry generation software. 6. Informative References [1] Klyne, G., Nottingham, M., and J. Mogul, "Registration Procedures for Message Header Fields", BCP 90, RFC 3864, September 2004. [2] Berners-Lee, T., "Object Header lines in HTTP", May 1994, <http://www.w3.org/Protocols/HTTP/Object_Headers.html>. [3] Berners-Lee, T., Fielding, R., and H. Nielsen, "Hypertext Transfer Protocol -- HTTP/1.0", RFC 1945, May 1996. [4] Fielding, R., Gettys, J., Mogul, J., Nielsen, H., and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2068, January 1997. [5] Kristol, D. and L. Montulli, "HTTP State Management Mechanism", RFC 2109, February 1997. [6] Mogul, J. and P. Leach, "Simple Hit-Metering and Usage-Limiting for HTTP", RFC 2227, October 1997. [7] Holtman, K. and A. Mutz, "Transparent Content Negotiation in HTTP", RFC 2295, March 1998. [8] Holtman, K., "The Safe Response Header Field", RFC 2310, April 1998. Nottingham & Mogul Informational [Page 49] RFC 4229 HTTP Header Fields December 2005 [9] Masinter, L., "Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)", RFC 2324, April 1998. [10] Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D. Jensen, "HTTP Extensions for Distributed Authoring -- WEBDAV", RFC 2518, February 1999. [11] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. [12] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A., and L. Stewart, "HTTP Authentication: Basic and Digest Access Authentication", RFC 2617, June 1999. [13] Rescorla, E. and A. Schiffman, "The Secure HyperText Transfer Protocol", RFC 2660, August 1999. [14] Nielsen, H., Leach, P., and S. Lawrence, "An HTTP Extension Framework", RFC 2774, February 2000. [15] Kristol, D. and L. Montulli, "HTTP State Management Mechanism", RFC 2965, October 2000. [16] Mogul, J., Krishnamurthy, B., Douglis, F., Feldmann, A., Goland, Y., van Hoff, A., and D. Hellerstein, "Delta encoding in HTTP", RFC 3229, January 2002. [17] Mogul, J. and A. Van Hoff, "Instance Digests in HTTP", RFC 3230, January 2002. [18] Clemm, G., Amsden, J., Ellison, T., Kaler, C., and J. Whitehead, "Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning)", RFC 3253, March 2002. [19] Whitehead, J. and J. Reschke, Ed., "Web Distributed Authoring and Versioning (WebDAV) Ordered Collections Protocol", RFC 3648, December 2003. [20] Hoff, A., Payne, J., Hapner, M., Carter, S., and M. Medin, "The HTTP Distribution and Replication Protocol", W3C NOTE NOTE- drp-19970825, August 1997. [21] Raggett, D., Hors, A., and I. Jacobs, "HTML 4.01 Specification", W3C REC REC-html401-19991224, December 1999. Nottingham & Mogul Informational [Page 50] RFC 4229 HTTP Header Fields December 2005 [22] Hensley, P., Metral, M., Shardanand, U., Converse, D., and M. Myers, "Implementation of OPS Over HTTP", W3C NOTE NOTE-OPS- OverHTTP, June 1997. [23] Marchiori, M., "The Platform for Privacy Preferences 1.0 (P3P1.0) Specification", W3C REC REC-P3P-20020416, April 2002. [24] Krauskopf, T., Miller, J., Resnick, P., and W. Treese, "PICS 1.1 Label Distribution -- Label Syntax and Communication Protocols", W3C REC REC-PICS-labels-961031, October 1996. [25] Nottingham, M. and X. Liu, "Edge Architecture Specification", W3C NOTE NOTE-edge-arch-20010804, August 2001. [26] Chung, E. and D. Dardailler, "White Paper: Joint Electronic Payment Initiative", W3C NOTE NOTE-jepi-970519, May 1997. [27] Hallam-Baker, P., "Notification for Proxy Caches", W3C NOTE WD- proxy-960221, February 1996. [28] Box, D., Ehnebuske, D., Kakivaya, G., Layman, A., Mendelsohn, N., Nielsen, H., Thatte, S., and D. Winer, "Simple Object Access Protocol (SOAP) 1.1", W3C NOTE NOTE-SOAP-20000508, May 2000. [29] Connolly, D., Prod'hommeaux, E., Nielsen, H., and R. Khare, "PEP Specification: an Extension Mechanism for HTTP", Nov 1998, <http://www.w3.org/TR/WD-http-pep>. [30] Masinter, L., Montulli, L., and A. Mutz, "User-Agent Display Attributes Headers", Work in Progress, November 1996. [31] Mogul, J., Cohen, J., and S. Lawrence, "Specification of HTTP/1.1 OPTIONS messages", Work in Progress, August 1997. [32] Girod, L., Chen, B., Henrik, H., and J. Mallery, "WIRE - W3 Identifier Resolution Extensions", Work in Progress, March 1998. [33] Mogul, J. and A. van Hoff, "Duplicate Suppression in HTTP", Work in Progress, April 1998. Nottingham & Mogul Informational [Page 51] RFC 4229 HTTP Header Fields December 2005 Authors' Addresses Mark Nottingham EMail: mnot@pobox.com URI: http://www.mnot.net/ Jeffrey C. Mogul HP Labs 1501 Page Mill Road Palo Alto, CA 94304 US EMail: JeffMogul@acm.org Nottingham & Mogul Informational [Page 52] RFC 4229 HTTP Header Fields December 2005 Full Copyright Statement Copyright (C) The Internet Society (2005). This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights. This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Intellectual Property The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79. Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr. The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf- ipr@ietf.org. Acknowledgement Funding for the RFC Editor function is currently provided by the Internet Society. Nottingham & Mogul Informational [Page 53] |
Added doc/rfcs.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | # on http (minus webdav) rfc1945.txt http/1.0 rfc2145.txt about http version numbers rfc2295.txt "Transparent Content Negotiation in HTTP" rfc2616.txt http/1.1 rfc2617.txt "HTTP Authentication: Basic and Digest Access Authentication" rfc2818.txt "HTTP Over TLS" rfc2964.txt cookies rfc2965.txt cookies rfc3143.txt "Known HTTP Proxy/Caching Problems" rfc3205.txt "On the use of HTTP as a Substrate" rfc3230.txt "Instance Digests in HTTP" rfc4229.txt "HTTP Header Field Registrations" # on uris/urls rfc1630.txt "Universal Resource Identifiers in WWW" rfc3305.txt uri/url/urn rfc3986.txt uri syntax # to read ftp://ftp.rfc-editor.org/in-notes/rfc2660.txt ftp://ftp.rfc-editor.org/in-notes/rfc2817.txt ftp://ftp.rfc-editor.org/in-notes/rfc2936.txt ftp://ftp.rfc-editor.org/in-notes/rfc3229.txt |
Added doc/shttpd-testing.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 | # start shttpd for testing emu -c0 repo=src/shttpd bind '#U*/home' /usr; bind -b '#s' /chan; ndb/cs; ndb/dns -r; cd; home=`{pwd}; cd $home/$repo/appl/cmd/ip; sblpath=(/dis .) bind -a $home/$repo $home/$repo/doc/testroot/localhost:8000 bind -a $home/$repo/man $home/$repo/doc/testroot/_default:8000 ./shttpd -n $home/$repo/doc/ndb-testshttpd $home/$repo/doc/testroot emu -c0 repo=src/scgid bind '#U*/home' /usr; ndb/cs; cd; home=`{pwd}; cd $home/$repo/appl/cmd; sblpath=(/dis .) ./scgid ../../doc/scgid.conf # has handler on net!localhost!4006 cmd='telnet localhost 8000' cmd2='telnet localhost 8001' # plain file, http/1.0 and http/1.1 $cmd GET /README HTTP/1.0 Host: localhost:8000 Connection: close $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close # dir listing # succesful, http/1.1 $cmd GET /appl/ HTTP/1.1 Host: localhost:8000 Connection: close # with missing trailing slash # * errror 404 $cmd GET /appl HTTP/1.1 Host: localhost:8000 Connection: close # http/1.0 $cmd GET /appl/ HTTP/1.0 Host: localhost:8000 Connection: close # index file serving # index.txt $cmd GET /dir0/ HTTP/1.1 Host: localhost:8000 Connection: close # index.html (not index.txt due to config order) $cmd GET /dir1/ HTTP/1.1 Host: localhost:8000 Connection: close # no index file present # * serves directory listing $cmd GET /dir2/ HTTP/1.1 Host: localhost:8000 Connection: close # redirections # absolute redir $cmd GET /redir1 HTTP/1.1 Host: localhost:8000 Connection: close # relative redir $cmd GET /redir2 HTTP/1.1 Host: localhost:8000 Connection: close # redir configured with bad groups # * internal server error $cmd GET /redir4 HTTP/1.1 Host: localhost:8000 Connection: close # redir with two escaped $'s in destination $cmd GET /redir5 HTTP/1.1 Host: localhost:8000 Connection: close # mime type detection # built-in # user # user overrides # no extension -> text/plain $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close # unknown extension -> application/octet-stream $cmd | sed '/^$/q' GET /appl/cmd/ip/shttpd.sbl HTTP/1.1 Host: localhost:8000 Connection: close # known extension $cmd | sed '/^$/q' GET /appl/cmd/ip/shttpd.b HTTP/1.1 Host: localhost:8000 Connection: close # user-specified: .dis -> application/x-dis $cmd | sed '/^$/q' GET /appl/cmd/ip/shttpd.dis HTTP/1.1 Host: localhost:8000 Connection: close # user overriding built-in: .jpg -> testing/jpg $cmd | sed '/^$/q' GET /testing.jpg HTTP/1.1 Host: localhost:8000 Connection: close # authorization # where required # where not allowed # with empty user/pass # empty credentials where none are allowed $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close Authorization: Basic Og== # non-empty credentials where none are allowed (for sanity) # * error unauthorized $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M= # empty credentials where required # * error unauthorized $cmd GET /auth0 HTTP/1.1 Host: localhost:8000 Connection: close Authorization: Basic Og== # incorrect credentials where required # * error unauthorized $cmd GET /auth0 HTTP/1.1 Host: localhost:8000 Connection: close Authorization: Basic YmFkOmJhZA== # missing credentials where required # * error unauthorized $cmd GET /auth0 HTTP/1.1 Host: localhost:8000 Connection: close # malformed credentials where required # * error unauthorized $cmd GET /auth0 HTTP/1.1 Host: localhost:8000 Connection: close Authorization: Digest test test # correct credentials where required $cmd GET /auth0 HTTP/1.1 Host: localhost:8000 Connection: close Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M= # correct credentials on http/1.0 $cmd GET /auth0 HTTP/1.0 Host: localhost:8000 Connection: close Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M= # caching responses # for plain file $cmd | sed '/^$/q' GET /README HTTP/1.1 Host: localhost:8000 Connection: close # for dir listing $cmd GET /dir2/ HTTP/1.1 Host: localhost:8000 Connection: close # range requests # invalid ranges # valid # plain files, directory # first three bytes $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = 0-2 Connection: close # valid, random spaces $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = 0 -2 Connection: close # valid, random spaces $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = 0- 2 Connection: close # valid, random whitespace $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = 0 - 2 Connection: close # multipart/byteranges, with many different whitespace and different forms $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = -3, 1-, 0 - 2, 3-4, 5- 9, 10 -11100000000000000 Connection: close # multipart/byteranges, with empty lists $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = 0-2,,,4-5 Connection: close # bad range value, ignored $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = test Connection: close # bad range value, ignored $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = 10 Connection: close # ignored for http/1.0, returns full object $cmd GET /README HTTP/1.0 Host: localhost:8000 Range: bytes = 0-2 Connection: close # headers # date # last-modified # etag (plain files, directory listings) # server # do twice, check that last-modified,etag,server are same; date is different $cmd | sed '/^$/q' GET /README HTTP/1.0 Host: localhost:8000 Connection: close # conditional responses # if-modified-since # if-unmodified-since # if-match # if-none-match # if-range # http/1.0 only does if-unmodified-since, nothing else # if modified long in past, returns new object $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close if-modified-since: Thu, 1 Jan 1970 01:00:01 GMT # if modified far in future # * error 304 precondition failed $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close if-modified-since: Mon, 18 Jan 2020 10:01:52 GMT # http/1.0 head must ignore the if-modified-since... $cmd HEAD /README HTTP/1.0 Host: localhost:8000 if-modified-since: Mon, 18 Jan 2020 10:01:52 GMT # if unmodified since long past # * error 304 precondition failed $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close if-unmodified-since: Thu, 1 Jan 1970 01:00:01 GMT # if unmodified since far future, will return object $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close if-unmodified-since: Mon, 18 Jan 2020 10:01:52 GMT # if-match *, if it exists. returns object $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close if-match: * # NOTE: etag for README is "9207a52c44a572f6f8f36947216d395c6d05984a", replace by current for testing # if-match correct-tag, returns object $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close if-match: "9207a52c44a572f6f8f36947216d395c6d05984a" # incorrect tag, 412 precondition failed $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close if-match: "flierp" # correct tag, but as weak # * error 412 precondition failed $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close if-match: W/"9207a52c44a572f6f8f36947216d395c6d05984a" # bad syntax for if-match # * error 412 precondition failed $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close if-match: bad syntax # if-none-match *, if no such file # * error 304 not modified $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close if-none-match: * # if-none-match correct tag # * error 304 not modified $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close if-none-match: "9207a52c44a572f6f8f36947216d395c6d05984a" # if-none-match on non-existent file # * error 404 object not found $cmd GET /nosuchfile HTTP/1.1 Host: localhost:8000 Connection: close if-none-match: "9207a52c44a572f6f8f36947216d395c6d05984a" # if-none-match, bogus tag, returns file $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close if-none-match: "bogustag" # if-none-match, bad syntax, returns file $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close if-none-match: bad syntax # if-range with matching etag, returns partial response $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = 0-1 Connection: close If-Range: "9207a52c44a572f6f8f36947216d395c6d05984a" # if-range with bad syntax for range, returns full response $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = bad syntax Connection: close If-Range: "9207a52c44a572f6f8f36947216d395c6d05984a" # if-range with non-matching etag, returns full body $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = 0-2 Connection: close If-Range: "flierp" # if-range with time in past, returns full body $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = 0-2 Connection: close if-range: Thu, 1 Jan 1970 01:00:01 GMT # if-range with time in future, returns 206 partial content $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = 0-2 Connection: close if-range: Mon, 18 Jan 2020 10:01:52 GMT # now for some http/1.0 conditional requests # if modified since far in future, only conditional http/1.0 supports # * error 304 $cmd GET /README HTTP/1.0 Host: localhost:8000 Connection: close if-modified-since: Mon, 18 Jan 2020 10:01:52 GMT # if unmodified since long past, 304 for http/1.1, http/1.0 ignores it $cmd GET /README HTTP/1.0 Host: localhost:8000 Connection: close if-unmodified-since: Thu, 1 Jan 1970 01:00:01 GMT # if-match, incorrect tag, 412 precondition failed for http/1.1, http/1.0 ignores it $cmd GET /README HTTP/1.0 Host: localhost:8000 Connection: close if-match: "flierp" # if-none-match *, if no such file. 304 for http/1.1, ignored for http/1.0 $cmd GET /README HTTP/1.0 Host: localhost:8000 Connection: close if-none-match: * # if-range with matching etag, returns partial response for http/1.1, ignored for http/1.0 $cmd GET /README HTTP/1.0 Host: localhost:8000 Range: bytes = 0-1 Connection: close If-Range: "9207a52c44a572f6f8f36947216d395c6d05984a" # if-range with bad syntax for range, returns full response $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = bad syntax Connection: close If-Range: "9207a52c44a572f6f8f36947216d395c6d05984a" # if-range with non-matching etag, returns full body $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = 0-2 Connection: close If-Range: "flierp" # if-range with time in past, returns full body $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = 0-2 Connection: close if-range: Thu, 1 Jan 1970 01:00:01 GMT # if-range with time in future, returns 206 partial content $cmd GET /README HTTP/1.1 Host: localhost:8000 Range: bytes = 0-2 Connection: close if-range: Mon, 18 Jan 2020 10:01:52 GMT # test parsing of escaped double-quote. should recognize the latter valid tag # * 304 $cmd GET /README HTTP/1.1 Host: localhost:8000 Connection: close if-none-match: "double-quote \"escape\"", "67445287edaed679f8b2ce102e827815ad17d46f" # config, alias # config, default alias (unknown hostname) $cmd GET / HTTP/1.1 Host: 127.0.0.1:8000 Connection: close # serves files just like localhost:8000 $cmd GET /README HTTP/1.1 Host: localhost.local:8000 Connection: close # bogus host (_default:port) does not have /README # * error 404 $cmd GET /README HTTP/1.1 Host: bogus:8000 Connection: close # virtual hosts # change vhost to nohost and reload config. returns listing of hostdirs $cmd GET / HTTP/1.1 Host: bogus Connection: close # same, specifying a valid host has no effect $cmd GET / HTTP/1.1 Host: localhost:8000 Connection: close # enable vhosts again, reload config # known host:port $cmd GET / HTTP/1.1 Host: localhost:8000 Connection: close # known host, but missing port in host-header. still returns valid data since we connected to right address $cmd GET / HTTP/1.1 Host: localhost Connection: close # known host, missing port, connect to other ip where we are not allowed for this host # * error 404 object not found $cmd2 GET /README HTTP/1.1 Host: localhost Connection: close # known host, correctport, connect to other ip where we are not allowed for this host # * error 404 object not found $cmd2 GET /README HTTP/1.1 Host: localhost:8000 Connection: close # connect using ip as hostname, not configured # * error 404 $cmd GET /README HTTP/1.1 Host: 127.0.0.1:8000 Connection: close # connect using ip as hostname, configured, returns file $cmd GET /README HTTP/1.1 Host: 127.0.0.2:8000 Connection: close # try ip6, for fun $cmd GET /README HTTP/1.1 Host: [::1]:8000 Connection: close # bogus ip6-like # * error 400 $cmd GET /README HTTP/1.1 Host: [::1 Connection: close # bogus ip6-like # * error 404 $cmd GET /README HTTP/1.1 Host: ::1 Connection: close # bogus, should not succeed # * 404 $cmd GET /README HTTP/1.1 Host: [localhost]:8000 Connection: close # default config # ./shttpd -n /dev/null -d -a 'net!*!8000' $home/$repo/doc/testroot # should return normal response $cmd GET /_default:8000 HTTP/1.1 Host: localhost:8000 Connection: close # ctl chan: reload config # verify whether it works echo reload >/chan/shttpd # make change that breaks config, after reload it should keep config and still work echo reload >/chan/shttpd # command-line options: overrides config/ignored # start simple shttpd: # ./shttpd $home/$repo/doc/testroot # request succeeds! $cmd GET /localhost:8000/README HTTP/1.1 Host: bogus Connection: close # start shttpd with config and with conflicting options, before and after loading config # ./shttpd -h -d -a 'net!*!8001' -C 10 -f blah -i index.txt -i index.html -l /dev/null -r '^/redir0' /redir1 -s /scgi net!localhost!1234 '' -c /cgi '{echo blah}' '' -t .txt test/flierp -n /dev/null -a 'net!*!8000' $home/$repo/doc/testroot # now, all those options should be off except -f, and we should be listening on port 8000 now. # normal get should work, should not do caching $cmd GET /localhost:8000/README HTTP/1.1 Host: bogus Connection: close # should refuse connection $cmd2 # directory listings not configured # * error 404 $cmd GET /localhost:8000/ HTTP/1.1 Host: bogus Connection: close # no index file serving and no listings # * error 404 $cmd GET /_default:8000/ HTTP/1.1 Host: bogus Connection: close # this time, these options should still be used # ./shttpd -n /dev/null -d -C 10 -f blah -i index.txt -i index.html -l /dev/null -r '^/redir0' /redir1 -s /scgi net!localhost!1234 '' -c /cgi '{echo blah}' '' -t .txt test/flierp -a 'net!*!8000' $home/$repo/doc/testroot # returns listing of testroot $cmd GET / HTTP/1.1 Host: Connection: close # old http version, should return 505 http version not supported (or perhaps something else) # * error 505 $cmd GET / HTTP/0.9 Host: bogus Connection: close # new minor http version, should work as http/1.1 $cmd GET /README HTTP/1.2 Host: localhost:8000 Connection: close # new major http version, should send 505 # * error 505 $cmd GET / HTTP/2.123 Host: localhost:8000 Connection: close # other methods # options. this returns a page with "200 - OK" on it, fine by us $cmd OPTIONS * HTTP/1.1 Host: localhost:8000 Connection: close # options, host header must still be present, though it is not used $cmd OPTIONS * HTTP/1.1 Connection: close # options does not exist in http/1.0 # * error 501 $cmd OPTIONS * HTTP/1.0 Connection: close # trace. this returns the request as message/http. note that it changes the * to a / $cmd TRACE * HTTP/1.1 Host: localhost:8000 Connection: close X-Try: me # http/1.0 did not know trace # * error 501 $cmd TRACE * HTTP/1.0 Host: localhost:8000 Connection: close X-Try: me # connect, not supported, obviously # * error 501 $cmd CONNECT * HTTP/1.1 Host: localhost:8000 Connection: close # put not implemented # * error 501 $cmd PUT / HTTP/1.1 Host: localhost:8000 Connection: close # delete not implemented # * error 501 $cmd DELETE / HTTP/1.1 Host: localhost:8000 Connection: close # put not known in http/1.0 $cmd PUT / HTTP/1.0 Host: localhost:8000 Connection: close # delete not knowni n http/1.0 $cmd DELETE / HTTP/1.1 Host: localhost:8000 Connection: close # keepalive connections, closes after third request, since keepalive is onl for http/1.1 $cmd GET / HTTP/1.1 Host: localhost:8000 GET /README HTTP/1.1 Host: localhost:8000 GET / HTTP/1.0 Host: localhost:8000 # invalid request # missing http version # * 400 bad request $cmd GET / # nothing after path # * 400 bad request $cmd GET / # missing path and version # * 400 bad request $cmd GET # nothing after method # * 400 bad request $cmd GET # missing path # * 400 bad request $cmd GET HTTP/1.1 # empty path, invalid # * 400 $cmd GET HTTP/1.1 Host: localhost:8000 Connection: close # unknown method # * 501 not implemented $cmd TEST / HTTP/1.1 # lower case, invalid # * 501 not implemented $cmd get / HTTP/1.1 # lower case version # * 400 bad request $cmd GET / http/1.1 # normal head $cmd HEAD / HTTP/1.1 Host: localhost:8000 Connection: close # trikcy headers # continuation header on first line of headers # * 400 $cmd GET / HTTP/1.1 continuation: on first line # missing value for header # * 400 $cmd GET / HTTP/1.1 Host: localhost:8000 badheader # invalidly duplicate headers # * 400 $cmd GET / HTTP/1.1 Host: localhost:8000 Host: localhost:8000 Connection: close # multiple connections is valid, all unknown values should be treated as header-names $cmd GET / HTTP/1.1 Host: localhost:8000 Connection: close Connection: test # duplicate # * 400 $cmd GET / HTTP/1.1 Host: localhost:8000 Connection: close if-match: "a" if-match: "b" # duplicate # * 400 $cmd GET / HTTP/1.1 Host: localhost:8000 Connection: close if-none-match: "a" if-none-match: "b" # duplicate # * 400 $cmd GET / HTTP/1.1 Host: localhost:8000 Connection: close authorization: Basic "test" authorization: Basic "test" # note: there are a few more headers that cannot be specified twice # we are not a proxy, we don't want random credentials sent to us # * 400 $cmd GET / HTTP/1.1 Host: localhost:8000 Connection: close proxy-authorization: Basic "test" # header continuations $cmd GET / HTTP/1.1 Host: localhost:8000 Connection: test, test2 ,,test4 , ,test5 ,close X-Test: yes # cgi # get with query string. has valid QUERY_STRING, etc. $cmd GET /cgi0?q=test HTTP/1.1 Connection: close Host: localhost:8000 # and with keep-alive $cmd GET /cgi0?q=test HTTP/1.1 Host: localhost:8000 # http/1.0 does not send content-length and closes connection $cmd GET /cgi0?q=test HTTP/1.0 Host: localhost:8000 # post without content-length # * 411 $cmd POST /cgi0?q=test HTTP/1.1 Host: localhost:8000 Connection: close # post without content-length on http/1.0 causes "bad request" # * 400 $cmd POST /cgi0?q=test HTTP/1.0 Host: localhost:8000 # identity is default, and only supported $cmd POST /cgi0?q=test HTTP/1.1 Host: localhost:8000 transfer-encoding: identity content-length: 0 connection: close # chunked transfer-encoding not allowed from client # * 501 not implemented $cmd POST /cgi0?q=test HTTP/1.1 Host: localhost:8000 transfer-encoding: chunked content-length: 0 connection: close # transfer-encoding is valid, but obscure, so we don't allow it (fix?) # * 501 not implemented $cmd POST /cgi0?q=test HTTP/1.1 Host: localhost:8000 transfer-encoding: identity, identity content-length: 0 connection: close # identity content-encoding is the default $cmd POST /cgi0?q=test HTTP/1.1 Host: localhost:8000 content-encoding: identity content-length: 0 connection: close # this content-encoding is valid, but obscure, so we don't allow it (fix?) # * 501 not implemented $cmd POST /cgi0?q=test HTTP/1.1 Host: localhost:8000 content-encoding: identity, identity content-length: 0 connection: close # no compressed incoming data # * 501 not implemented $cmd POST /cgi0?q=test HTTP/1.1 Host: localhost:8000 content-encoding: gzip content-length: 0 connection: close # unparsable content-length $cmd POST /cgi0?q=test HTTP/1.1 Host: localhost:8000 content-length: test connection: close # 100-continue expect header, generated by server $cmd POST /cgi0?q=test HTTP/1.1 Host: localhost:8000 content-length: 0 connection: close expect: 100-continue # unknown expect header # * 417 $cmd POST /cgi0?q=test HTTP/1.1 Host: localhost:8000 content-length: 0 connection: close expect: test # ignore expect for http/1.0, so valid $cmd POST /cgi0?q=test HTTP/1.0 Host: localhost:8000 content-length: 0 connection: close expect: test # cgi script is broken, no status:-line # * 500 $cmd POST /cgi1 HTTP/1.1 Host: localhost:8000 content-length: 0 connection: close # cgi script is broken, sends 100-continue and then nothing # * 500 $cmd POST /cgi2 HTTP/1.1 Host: localhost:8000 connection: close content-length: 0 # cgi script sends 100-continue, not webserver. we don't require one $cmd POST /cgi3 HTTP/1.1 Host: localhost:8000 connection: close content-length: 0 # cgi script sends 100-continue, not webserver. we do require one. $cmd POST /cgi3 HTTP/1.1 Host: localhost:8000 connection: close content-length: 0 expect: 100-continue # broken cgi script, it returns a bad content-length # * 500 $cmd GET /cgi4 HTTP/1.1 Host: localhost:8000 connection: close content-length: 0 # cgi script which sets content-length $cmd GET /cgi5 HTTP/1.1 Host: localhost:8000 connection: close content-length: 0 # cgi script which sets shorter content-length than it sends data # responds with okay, but closes connection before sending data. this allows the client to detect the error $cmd GET /cgi6 HTTP/1.1 Host: localhost:8000 connection: close # even for http/1.0! $cmd GET /cgi6 HTTP/1.0 Host: localhost:8000 connection: close # cgi script which sets longer content-length than it sends data # responds with okay, but closes connection before sending data. this allows the client to detect the error $cmd GET /cgi7 HTTP/1.1 Host: localhost:8000 connection: close # same for http/1.0 $cmd GET /cgi7 HTTP/1.0 Host: localhost:8000 connection: close # since scgi handling is practically indentical to cgi handling, we don't do as many tests $cmd GET /scgi0 HTTP/1.0 Host: localhost:8000 connection: close # scgi handler that is unreachable $cmd GET /scgi1 HTTP/1.0 Host: localhost:8000 connection: close # cgi with incoming data, which is ignored by server # on incoming data, the connection is always closed afterwards $cmd POST /cgi0 HTTP/1.1 Host: localhost:8000 content-length: 2 a # test method that is explicitly allowed $cmd GET /cgi8 HTTP/1.1 Host: localhost:8000 Connection: close # test method that is not allowed # * 405 $cmd POST /cgi8 HTTP/1.1 Host: localhost:8000 Connection: close content-length: 0 # xxx returns 404, returning 403 at all the right times is hard when doing directory listings # test for permission denied # * 403 $cmd GET /test.txt HTTP/1.1 Host: localhost:8000 Connection: close |
Added doc/testroot/_default!8000/index.txt.
> | 1 | index.txt |
Added doc/testroot/localhost!8000/auth0.
> | 1 | auth0 |
Added doc/testroot/localhost!8000/dir0/index.txt.
> | 1 | index.txt |
Added doc/testroot/localhost!8000/dir1/index.html.
> | 1 | index.html |
Added doc/testroot/localhost!8000/dir1/index.txt.
> | 1 | index.txt |
Added doc/testroot/localhost!8000/testing.jpg.
Added fonts/BQN386/10/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 16 12 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/10/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/10/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 16 12 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/10a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/10a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 17 13 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/11/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/11/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 17 13 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/11a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/11a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 19 15 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/12/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/12/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 19 15 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/12a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/12a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 21 16 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/13/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/13/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 21 16 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/13a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/13a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 22 17 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/14/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/14/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 22 17 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/14a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/14a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 24 19 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/15/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/15/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 24 19 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/15a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/15a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 25 20 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/16/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/16/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 25 20 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/16a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/16a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 27 21 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/17/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/17/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 27 21 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/17a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/17a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 28 22 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/18/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/18/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 28 22 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/18a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/18a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 30 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/19/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/19/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 30 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/19a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/19a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 31 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/20/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/20/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 31 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/20a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/20a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 34 27 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/22/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/22/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 34 27 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/22a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/22a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 37 29 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/24/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/24/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 37 29 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/24a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/24a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 44 35 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/28/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/28/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 44 35 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/28a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/28a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 7 5 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/4/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/4/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 7 5 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/4a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/4a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 8 6 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/5/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/5/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 8 6 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/5a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/5a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 10 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/6/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/6/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 10 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/6a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/6a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 11 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/7/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/7/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 11 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/7a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/7a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 13 10 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/8/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/8/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 13 10 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/8a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/8a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 14 11 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/9/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/9/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 14 11 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000180 0x00019f x000180.bit 0x0001a0 0x0001bf x0001a0.bit 0x0001c0 0x0001df x0001c0.bit 0x0001e0 0x0001ff x0001e0.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x000240 0x00025f x000240.bit 0x000260 0x00027f x000260.bit 0x000280 0x00029f x000280.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000360 0x00037f x000360.bit 0x000380 0x00039f x000380.bit 0x0003a0 0x0003bf x0003a0.bit 0x0003c0 0x0003df x0003c0.bit 0x0003e0 0x0003ff x0003e0.bit 0x000400 0x00041f x000400.bit 0x000420 0x00043f x000420.bit 0x000440 0x00045f x000440.bit 0x001420 0x00143f x001420.bit 0x001440 0x00145f x001440.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x002040 0x00205f x002040.bit 0x002060 0x00207f x002060.bit 0x002080 0x00209f x002080.bit 0x0020a0 0x0020bf x0020a0.bit 0x002100 0x00211f x002100.bit 0x002120 0x00213f x002120.bit 0x002180 0x00219f x002180.bit 0x0021a0 0x0021bf x0021a0.bit 0x0021c0 0x0021df x0021c0.bit 0x0021e0 0x0021ff x0021e0.bit 0x002200 0x00221f x002200.bit 0x002220 0x00223f x002220.bit 0x002240 0x00225f x002240.bit 0x002260 0x00227f x002260.bit 0x002280 0x00229f x002280.bit 0x0022a0 0x0022bf x0022a0.bit 0x0022c0 0x0022df x0022c0.bit 0x002300 0x00231f x002300.bit 0x002320 0x00233f x002320.bit 0x002340 0x00235f x002340.bit 0x002360 0x00237f x002360.bit 0x002380 0x00239f x002380.bit 0x0023a0 0x0023bf x0023a0.bit 0x0023c0 0x0023df x0023c0.bit 0x002400 0x00241f x002400.bit 0x0024a0 0x0024bf x0024a0.bit 0x0024c0 0x0024df x0024c0.bit 0x0024e0 0x0024ff x0024e0.bit 0x002500 0x00251f x002500.bit 0x002520 0x00253f x002520.bit 0x002540 0x00255f x002540.bit 0x002560 0x00257f x002560.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x002640 0x00265f x002640.bit 0x002660 0x00267f x002660.bit 0x002680 0x00269f x002680.bit 0x0027c0 0x0027df x0027c0.bit 0x0027e0 0x0027ff x0027e0.bit 0x002940 0x00295f x002940.bit 0x002980 0x00299f x002980.bit 0x0029e0 0x0029ff x0029e0.bit 0x002b20 0x002b3f x002b20.bit 0x01d520 0x01d53f x01d520.bit 0x01d540 0x01d55f x01d540.bit 0x01d560 0x01d57f x01d560.bit |
Added fonts/BQN386/9a/x000000.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000020.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000040.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000060.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000100.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000120.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000140.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000160.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000180.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0001a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0001c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0001e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000200.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000220.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000240.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000260.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000280.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000300.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000360.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000380.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0003a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0003c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0003e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000400.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000420.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x000440.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x001420.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x001440.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002000.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002020.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002040.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002060.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002080.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002100.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002120.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002180.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0021a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0021c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0021e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002200.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002220.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002240.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002260.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002280.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0022a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0022c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002300.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002320.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002340.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002360.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002380.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0023a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0023c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002400.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0024a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0024c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0024e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002500.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002520.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002540.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002560.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002580.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002640.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002660.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002680.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0027c0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0027e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002940.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002980.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x0029e0.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x002b20.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x01d520.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x01d540.bit.
cannot compute difference between binary files
Added fonts/BQN386/9a/x01d560.bit.
cannot compute difference between binary files
Added fonts/BQN386/LICENSE.
> > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | This is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to <https://unlicense.org> |
Added fonts/hermit/LICENSE.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | Copyright (c) 2013, Pablo Caro <me AT pcaro DOT es> - http://pcaro.es/ with Reserved Font Name Hermit. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. |
Added fonts/hermit/bold/10/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 20 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/10/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 20 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/10a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/10a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 21 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/11/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 21 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/11a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/11a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 23 16 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/12/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 23 16 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/12a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/12a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 25 17 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/13/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 25 17 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/13a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/13a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 27 19 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/14/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 27 19 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/14a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/14a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 29 20 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/15/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 29 20 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/15a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/15a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 31 22 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/16/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 31 22 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/16a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/16a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 33 23 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/17/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 33 23 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/17a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/17a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 35 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/18/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 35 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/18a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/18a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 37 26 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/19/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 37 26 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/19a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/19a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 39 27 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/20/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 39 27 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/20a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/20a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 42 29 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/22/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 42 29 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/22a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/22a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 46 32 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/24/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 46 32 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/24a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/24a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 54 38 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/28/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 54 38 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/28a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/28a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 8 5 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/4/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 8 5 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/4a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/4a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 10 7 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/5/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 10 7 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/5a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/5a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 12 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/6/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 12 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/6a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/6a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 14 10 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/7/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 14 10 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/7a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/7a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 16 11 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/8/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 16 11 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/8a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/8a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 18 12 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/9/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 18 12 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bold/9a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bold/9a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 20 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/10/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 20 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/10a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/10a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 21 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/11/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 21 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/11a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/11a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 23 16 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/12/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 23 16 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/12a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/12a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 25 17 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/13/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 25 17 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/13a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/13a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 27 19 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/14/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 27 19 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/14a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/14a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 29 20 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/15/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 29 20 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/15a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/15a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 31 22 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/16/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 31 22 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/16a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/16a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 33 23 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/17/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 33 23 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/17a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/17a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 35 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/18/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 35 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/18a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/18a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 37 26 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/19/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 37 26 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/19a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/19a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 39 27 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/20/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 39 27 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/20a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/20a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 42 29 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/22/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 42 29 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/22a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/22a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 46 32 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/24/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 46 32 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/24a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/24a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 54 38 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/28/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 54 38 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/28a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/28a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 8 5 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/4/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 8 5 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/4a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/4a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 10 7 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/5/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 10 7 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/5a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/5a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 12 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/6/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 12 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/6a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/6a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 14 10 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/7/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 14 10 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/7a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/7a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 16 11 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/8/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 16 11 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/8a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/8a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 18 12 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/9/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 18 12 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/bolditalic/9a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/bolditalic/9a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 20 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/10/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 20 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/10a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/10a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 21 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/11/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 21 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/11a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/11a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 23 16 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/12/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 23 16 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/12a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/12a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 25 17 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/13/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 25 17 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/13a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/13a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 27 19 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/14/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 27 19 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/14a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/14a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 29 20 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/15/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 29 20 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/15a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/15a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 31 22 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/16/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 31 22 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/16a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/16a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 33 23 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/17/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 33 23 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/17a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/17a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 35 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/18/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 35 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/18a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/18a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 37 26 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/19/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 37 26 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/19a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/19a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 39 27 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/20/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 39 27 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/20a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/20a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 42 29 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/22/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 42 29 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/22a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/22a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 46 32 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/24/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 46 32 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/24a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/24a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 54 38 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/28/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 54 38 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/28a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/28a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 8 5 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/4/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 8 5 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/4a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/4a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 10 7 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/5/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 10 7 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/5a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/5a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 12 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/6/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 12 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/6a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/6a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 14 10 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/7/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 14 10 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/7a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/7a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 16 11 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/8/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 16 11 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/8a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/8a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 18 12 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/9/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 18 12 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/light/9a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/light/9a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 20 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/10/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 20 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/10a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/10a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 21 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/11/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 21 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/11a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/11a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 23 16 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/12/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 23 16 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/12a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/12a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 25 17 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/13/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 25 17 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/13a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/13a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 27 19 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/14/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 27 19 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/14a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/14a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 29 20 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/15/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 29 20 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/15a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/15a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 31 22 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/16/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 31 22 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/16a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/16a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 33 23 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/17/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 33 23 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/17a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/17a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 35 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/18/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 35 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/18a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/18a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 37 26 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/19/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 37 26 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/19a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/19a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 39 27 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/20/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 39 27 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/20a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/20a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 42 29 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/22/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 42 29 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/22a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/22a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 46 32 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/24/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 46 32 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/24a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/24a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 54 38 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/28/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 54 38 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/28a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/28a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 8 5 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/4/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 8 5 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/4a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/4a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 10 7 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/5/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 10 7 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/5a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/5a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 12 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/6/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 12 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/6a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/6a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 14 10 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/7/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 14 10 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/7a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/7a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 16 11 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/8/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 16 11 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/8a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/8a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 18 12 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/9/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 18 12 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/lightitalic/9a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/lightitalic/9a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 20 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/10/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 20 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/10a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/10a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 21 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/11/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 21 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/11a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/11a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 23 16 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/12/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 23 16 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/12a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/12a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 25 17 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/13/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 25 17 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/13a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/13a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 27 19 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/14/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 27 19 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/14a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/14a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 29 20 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/15/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 29 20 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/15a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/15a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 31 22 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/16/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 31 22 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/16a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/16a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 33 23 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/17/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 33 23 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/17a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/17a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 35 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/18/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 35 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/18a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/18a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 37 26 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/19/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 37 26 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/19a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/19a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 39 27 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/20/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 39 27 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/20a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/20a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 42 29 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/22/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 42 29 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/22a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/22a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 46 32 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/24/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 46 32 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/24a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/24a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 54 38 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/28/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 54 38 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/28a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/28a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 8 5 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/4/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 8 5 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/4a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/4a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 10 7 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/5/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 10 7 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/5a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/5a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 12 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/6/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 12 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/6a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/6a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 14 10 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/7/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 14 10 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/7a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/7a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 16 11 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/8/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 16 11 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/8a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/8a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 18 12 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/9/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 18 12 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regular/9a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regular/9a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 20 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/10/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 20 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/10a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/10a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 21 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/11/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 21 14 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/11a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/11a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 23 16 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/12/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 23 16 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/12a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/12a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 25 17 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/13/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 25 17 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/13a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/13a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 27 19 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/14/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 27 19 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/14a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/14a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 29 20 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/15/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 29 20 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/15a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/15a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 31 22 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/16/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 31 22 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/16a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/16a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 33 23 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/17/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 33 23 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/17a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/17a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 35 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/18/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 35 24 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/18a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/18a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 37 26 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/19/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 37 26 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/19a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/19a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 39 27 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/20/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 39 27 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/20a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/20a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 42 29 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/22/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 42 29 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/22a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/22a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 46 32 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/24/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 46 32 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/24a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/24a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 54 38 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/28/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 54 38 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/28a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/28a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 8 5 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/4/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 8 5 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/4a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/4a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 10 7 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/5/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 10 7 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/5a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/5a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 12 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/6/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 12 8 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/6a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/6a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 14 10 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/7/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 14 10 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/7a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/7a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 16 11 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/8/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 16 11 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/8a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/8a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 18 12 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/9/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/font.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 18 12 0x000000 0x00001f x000000.bit 0x000020 0x00003f x000020.bit 0x000040 0x00005f x000040.bit 0x000060 0x00007f x000060.bit 0x0000a0 0x0000bf x0000a0.bit 0x0000c0 0x0000df x0000c0.bit 0x0000e0 0x0000ff x0000e0.bit 0x000100 0x00011f x000100.bit 0x000120 0x00013f x000120.bit 0x000140 0x00015f x000140.bit 0x000160 0x00017f x000160.bit 0x000200 0x00021f x000200.bit 0x000220 0x00023f x000220.bit 0x0002c0 0x0002df x0002c0.bit 0x000300 0x00031f x000300.bit 0x000320 0x00033f x000320.bit 0x001e80 0x001e9f x001e80.bit 0x001ee0 0x001eff x001ee0.bit 0x002000 0x00201f x002000.bit 0x002020 0x00203f x002020.bit 0x0020a0 0x0020bf x0020a0.bit 0x002200 0x00221f x002200.bit 0x002580 0x00259f x002580.bit 0x0025a0 0x0025bf x0025a0.bit 0x0025c0 0x0025df x0025c0.bit 0x0025e0 0x0025ff x0025e0.bit 0x0026a0 0x0026bf x0026a0.bit 0x002700 0x00271f x002700.bit 0x00e0a0 0x00e0bf x00e0a0.bit |
Added fonts/hermit/regularitalic/9a/x000000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x000020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x000040.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x000060.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x0000a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x0000c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x0000e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x000100.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x000120.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x000140.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x000160.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x000200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x000220.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x0002c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x000300.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x000320.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x001e80.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x001ee0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x002000.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x002020.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x0020a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x002200.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x002580.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x0025a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x0025c0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x0025e0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x0026a0.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x002700.bit.
cannot compute difference between binary files
Added fonts/hermit/regularitalic/9a/x00e0a0.bit.
cannot compute difference between binary files
Added fonts/ttf/README.
> > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 | # ttf fonts original sources for system fonts and big fonts that are more efficient to use via font server. ## noto tomo el fuego is designed to be accessible to all cultures. we use noto to help facilitate that goal! the collection is very large, but it is important to have native support for all forms of human expression via text. we recognize that unicode does not yet provide support for many languages including maya. |
Added fonts/ttf/noto/LICENSE.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | Copyright 2018 The Noto Project Authors (github.com/googlei18n/noto-fonts) This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. |
Changes to lib/emptydirs.
1 2 3 4 5 6 7 | AIX/power/lib FreeBSD/386/lib Inferno/386/bin Inferno/386/lib Inferno/arm/bin Inferno/arm/lib Inferno/mips/bin | > | 1 2 3 4 5 6 7 8 | acme/mail AIX/power/lib FreeBSD/386/lib Inferno/386/bin Inferno/386/lib Inferno/arm/bin Inferno/arm/lib Inferno/mips/bin |
︙ | ︙ |
Changes to lib/limbo.vim.
1 | " Vim syntax file | | | > | < > < < < < > > > | > > > > | > | | > > > | < > > > | > > > > > > | > | > > > > > > > > > | | | | > > > > > | > > > | | > | | > | | < < < > > | < | > | > > > | | | | | > > > > | | | | | < | | | | < | | | < | | | | < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | " Vim syntax file " Language: Limbo " Maintainer: Alex Efros <powerman-asdf@ya.ru> " URL: http://powerman.name/download/vim/syntax/limbo.vim " Version: 1.0 " Last Change: 2012-12-11 if version < 600 syntax clear elseif exists("b:current_syntax") finish endif " comment syn match limboComment "#.*" contains=limboTodo,limboLineFile,@Spell extend syn match limboLineFile contained /#\@<=line\s\+\d\+\s\+"[^"]\+"$/ syn keyword limboTodo contained TODO TBD FIXME XXX NOTE BUG WARNING DEBUG OPTIMIZATION WORKAROUND " constant syn region limboStringSimple keepend extend start=+`+ end=+`+ contains=@Spell syn region limboStringQuoted keepend extend start=+"+ skip=+\\[\\"]+ end=+"+ contains=limboEscapedChar,limboErrorEscaped,limboErrorMultiline,@Spell syn region limboChar keepend extend start=+'+ skip=+\\[\\']+ end=+'+ contains=limboEscapedChar,limboErrorEscaped,limboErrorMultiline,limboErrorChar syn match limboEscapedChar contained "\\\%(u\x\{4}\|[\\'"abtnvfr0]\)" syn match limboErrorEscaped contained "\\\%(u.\{0,3}\_X\|\_[^u\\'"abtnvfr0]\)" syn match limboErrorMultiline contained "\n\@<=.\+" syn match limboErrorChar contained "'\zs'" syn match limboErrorChar contained "'\zs\%(\%([^\\]\|\\u\x\{4}\|\\[\\'"abtnvfr0]\)'\)\@!.\+" syn match limboNumber "\w\@<!\d\+\(r[0-9A-Za-z]\+\)\?\w\@!" syn match limboFloat "\w\@<!\(\d\+[.eE]\@=\(\.\d*\)\?\|\.\d\+\)\([eE][+-]\?\d\+\)\?\w\@!" " function syn match limboFunction "\w\@<!\h\w*\(\(\s*\[\s*\h\w*\(\s*,\s*\h\w*\)*\s*\]\)\?\s*(\)\@=" " delimiter (lower priority over operator) syn match limboDelimiterDecl ":" " operator syn match limboOperator "\([+*/%&|^-]\|\*\*\|<<\|>>\)=\@!" syn match limboOperatorAssign "\([+*/%&|^-]\|\*\*\|<<\|>>\)=" syn match limboOperatorAssign "=\|:=" syn match limboOperator "++\|--\|[!~]\|&&\|||" syn match limboOperator "[=!]=\|[<>]=\?" syn match limboOperatorCons "::" syn match limboOperatorIO "<-" " delimiter syn match limboDelimiter "[;{}[\],]" syn match limboDelimiterGroup "[()]" syn match limboDelimiterIdent "\.\|->" syn keyword limboDelimiterQual or to syn match limboDelimiterQual "\*\(\_s*=>\)\@=" syn match limboDelimiterQual "=>" " label syn match limboLabel "^\s*\h\w*:\_s*\(\(for\|while\|do\|case\|alt\|pick\)\>\)\@=" " keyword syn keyword limboConditional if else case alt pick syn keyword limboRepeat do while break continue syn match limboRepeat "\<for\>" syn keyword limboOperator len hd tl tagof ref load return spawn exit syn keyword limboKeyword implement import con dynamic syn match limboKeywordPoly "\<for\(\s*{\)\@=" syn keyword limboException exception raise raises syn keyword limboInclude include syn keyword limboType byte big int real string fn chan array list of syn match limboType "\<fixed([^),]\+\(,[^),]\+\)\?)" syn keyword limboStorageClass cyclic self syn keyword limboStructure adt module syn keyword limboTypedef type syn keyword limboSpecial nil iota syn sync fromstart syn sync linebreaks=1 if version >= 508 || !exists("did_limbo_syn_inits") if version < 508 let did_limbo_syn_inits = 1 command -nargs=+ HiLink hi link <args> else command -nargs=+ HiLink hi def link <args> endif HiLink limboComment Comment HiLink limboLineFile SpecialComment HiLink limboTodo Todo HiLink limboErrorEscaped Error HiLink limboErrorMultiline Error HiLink limboErrorChar Error HiLink limboStringSimple String HiLink limboStringQuoted String HiLink limboChar Character HiLink limboEscapedChar SpecialChar HiLink limboNumber Number HiLink limboFloat Float HiLink limboFunction Function HiLink limboDelimiter Delimiter HiLink limboDelimiterQual Delimiter HiLink limboDelimiterDecl Delimiter HiLink limboDelimiterGroup Delimiter HiLink limboConditional Conditional HiLink limboRepeat Repeat HiLink limboLabel Label HiLink limboOperator Operator HiLink limboOperatorAssign Operator HiLink limboOperatorCons Operator HiLink limboOperatorIO Operator HiLink limboKeyword Keyword HiLink limboKeywordPoly Special HiLink limboException Exception HiLink limboInclude Include HiLink limboType Type HiLink limboStorageClass StorageClass HiLink limboStructure Structure HiLink limboTypedef Typedef HiLink limboSpecial Special delcommand HiLink endif let b:current_syntax = "limbo" |
Changes to lib/wmsetup.
︙ | ︙ | |||
39 40 41 42 43 44 45 | # ircfs_options := (-l $home/data/irc/freenode) # ircfs -d $ircfs_connect $ircfs_options freenode >/chan/wmstdout >[2=1] #} /mnt/irc/freenode } } plumber >/chan/wmstdout >[2=1] | | < < | > > > | > > > > > > | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | # ircfs_options := (-l $home/data/irc/freenode) # ircfs -d $ircfs_connect $ircfs_options freenode >/chan/wmstdout >[2=1] #} /mnt/irc/freenode } } plumber >/chan/wmstdout >[2=1] menu 'Web Browser' {wmrun charon} menu Files {if {ftest -d $home} {wmrun wm/ftree $home} {wmrun wm/ftree /}} menu Manual {wmrun wm/man} menu Amce {wmrun acme} #menu menu '' '' menu System 'Shell' {wmrun wm/sh} menu System 'Debugger' {wmrun wm/deb} menu System 'Module manager' {wmrun wm/rt} menu System 'Task manager' {wmrun wm/task} menu System 'Memory monitor' {wmrun wm/memory} menu System 'About' {wmrun wm/about} menu Social 'irc/tilde.chat' {wmrun wm/irc /mnt/irc/tilde} menu Social 'hub/9p.zone' {wmrun wm/gridchat -g 'tcp!chat.9p.zone!9990' -n $"user} #menu Social 'hub/heropunch.io' {wmrun wm/gridchat -g 'tcp!chat.heropunch.io!9990' -n $"user} menu Misc 'Coffee' {wmrun wm/coffee} menu Misc 'Colours' {wmrun wm/colors} #menu Misc 'Winctl' {wmrun wm/winctl} menu Misc 'Clock' {wmrun wm/date} menu Misc 'Notepad' {wmrun wm/edit} menu Games 'Tetris' {wmrun wm/tetris} menu Games 'Bounce' {wmrun wm/bounce} #menu Games 'Game client' {wmrun games/gameclient >/dev/null >[2=1]} #menu Games 'Game client (local)' {wmrun games/gameclient -l > /dev/null >[2=1]} # mount host's /home on /usr if applicable if {test -f /env/emuroot} { |
︙ | ︙ |
Added lib9/setfcr-FreeBSD-386.S.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #define FN(x) .type x,@function; .global x; x #define ENT subl $16, %esp #define RET addl $16, %esp; ret .file "setfcr-FreeBSD-386.S" FN(setfcr): ENT xorb $0x3f, %al movl %eax, (%esp) fwait fldcw (%esp) RET FN(getfcr): ENT fwait fstcw (%esp) movw (%esp), %ax andl $0xffff, %eax xorb $0x3f, %al RET FN(getfsr): ENT fwait fstsw (%esp) movw (%esp), %ax andl $0xffff, %eax RET FN(setfsr): fclex ret |
Changes to libmath/FPcontrol-FreeBSD.c.
1 2 3 4 5 6 7 8 | #include "lib9.h" #include "mathi.h" void FPinit(void) { setfsr(0); /* Clear pending exceptions */ setfcr(FPPDBL|FPRNR|FPINVAL|FPZDIV|FPUNFL|FPOVFL); | > | 1 2 3 4 5 6 7 8 9 | #include "lib9.h" #include "fpuctl.h" #include "mathi.h" void FPinit(void) { setfsr(0); /* Clear pending exceptions */ setfcr(FPPDBL|FPRNR|FPINVAL|FPZDIV|FPUNFL|FPOVFL); |
︙ | ︙ |
Changes to libmath/dtoa.c.
1 2 3 4 | /* derived from /netlib/fp/dtoa.c assuming IEEE, Standard C */ /* kudos to dmg@bell-labs.com, gripes to ehg@bell-labs.com */ #include "lib9.h" | | | 1 2 3 4 5 6 7 8 9 10 11 12 | /* derived from /netlib/fp/dtoa.c assuming IEEE, Standard C */ /* kudos to dmg@bell-labs.com, gripes to ehg@bell-labs.com */ #include "lib9.h" #if defined __APPLE__ || defined __clang__ #pragma clang diagnostic ignored "-Wlogical-op-parentheses" #pragma clang diagnostic ignored "-Wparentheses" #endif #define ACQUIRE_DTOA_LOCK(n) /*nothing*/ #define FREE_DTOA_LOCK(n) /*nothing*/ /* let's provide reasonable defaults for usual implementation of IEEE f.p. */ |
︙ | ︙ |
Changes to locale/timezone.
|
| | > > > > > | | | | > | | | < > | < > | | < | > | | < | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | PST -28800 PDT -25200 9943200 25664400 41392800 57718800 73447200 89168400 104896800 120618000 126669600 152067600 162352800 183517200 199245600 215571600 230695200 247021200 262749600 278470800 294199200 309920400 325648800 341370000 357098400 372819600 388548000 404874000 419997600 436323600 452052000 467773200 483501600 499222800 514951200 530672400 544586400 562122000 576036000 594176400 607485600 625626000 638935200 657075600 670989600 688525200 702439200 719974800 733888800 752029200 765338400 783478800 796788000 814928400 828842400 846378000 860292000 877827600 891741600 909277200 923191200 941331600 954640800 972781200 986090400 1004230800 1018144800 1035680400 1049594400 1067130000 1081044000 1099184400 1112493600 1130634000 1143943200 1162083600 1173578400 1194141600 1205028000 1225591200 1236477600 1257040800 1268532000 1289095200 1299981600 1320544800 1331431200 1351994400 1362880800 1383444000 1394330400 1414893600 1425780000 1446343200 1457834400 1478397600 1489284000 1509847200 1520733600 1541296800 1552183200 1572746400 1583632800 1604196000 1615687200 1636250400 1647136800 1667700000 1678586400 1699149600 1710036000 1730599200 1741485600 1762048800 1772935200 1793498400 1804989600 1825552800 1836439200 1857002400 1867888800 1888452000 1899338400 1919901600 1930788000 1951351200 1962842400 1983405600 1994292000 2014855200 2025741600 2046304800 2057191200 2077754400 2088640800 2109204000 2120090400 2140653600 |
Added man/1/hexe.
> > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | .TH HEXE 1 .SH NAME hexe \- a hexdumping tool with 0% bloat .SH SYNOPSIS .B hexe [ .I infile ] [ .I outfile ] .SH DESCRIPTION Omitting either or using - uses stdin/stdout. .SH SOURCE .B /appl/cmd/hexe.b |
Added man/1/xargs.
> > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | .TH XARGS 1 .SH NAME xargs \- conxargsenate files (apply cmd to args list read from stdin) .SH SYNOPSIS .B xargs .I command [ .I command args ] <[ .I list of last command arg ] .SH EXAMPLES TODO .SH SOURCE .B /appl/cmd/xargs.b |
Changes to man/8/httpd.
1 2 | .TH HTTPD 8 .SH NAME | | > | < < < < < < < < < < | | < < < < < > | < | < | | | < < < < < < < < < < < | > | < < | < | | > | | > | < < | < < > > | | | | | < > | | | | < < < < < < < < < < < < < < | < < < > | < < < < | < < < < < > | | < < < | < < | < | | > | < < < | > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | .TH HTTPD 8 .SH NAME httpd \- HTTP server .SH SYNOPSIS .B svc/httpd .PP .SH DESCRIPTION .I svc/httpd .SH FILES & PATHS .TF /services/httpd/root/example.com/ .TP .B /services/httpd/root/_default/ default docroot .TP .B /services/httpd/root/example.com/ example vhost .TP .B /services/httpd/config.db config file .SH EXAMPLE config.db .EX debug #nodebug vhost ctlchan=shttpd accesslog=/services/httpd/access.log announce=net!www.example.com!80 mime ext=.text type='text/plain; charset=utf-8' mime ext=.mov type='video/quicktime' mime ext=.erl type='text/plain; charset=utf-8' # port=80 is not necessary, it's the default host=www.example.com port=80 listings path='' cachesecs=60 index file=index.html file=index.htm file=index.txt redir src='^/oldfile$' dst=/newfile redir src='^/oldpath/(.*)$' dst=/newpath/$1 alias host=example.com port=80 usehost=www.example.com useport=80 .EE For complete documentation see .IR shttpd (8), .IR attrdb (6) A cluster setup can export a file like this to support distributing work over a grid. A grid-specific svc script may be provided in the future to facilitate this use-case. .SH SOURCE .B /appl/svc/httpd.sh .SH SEE ALSO .IR svc (8) |
Added man/8/shttpd.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 | .TH SHTTPD 8 .SH NAME shttpd \- HTTP server .SH SYNOPSIS .B ip/shttpd [ .B -dh ] [ .B -A .I path realm user:pass ] [ .B -C .I cachesecs ] [ .B -L .I listpath 0|1 ] [ .B -a .I addr ] [ .B -c .I path command methods ] [ .B -f .I ctlchan ] [ .B -i .I indexfile ] [ .B -l .I logfile ] [ .B -n .I config ] [ .B -r .I pathre dest ] [ .B -s .I path addr methods ] [ .B -t .I extension mimetype ] [ .B -z .I gzippath ] .I webroot .SH DESCRIPTION .I Shttpd is an HTTP server that supports most of the reasonable features of contemporary http servers: .IP \(bu http/1.0 and http/1.1 support .IP \(bu cgi and scgi support .IP \(bu directory listings .IP \(bu index file serving .IP \(bu redirections based on regular expressions .IP \(bu virtual hosting .IP \(bu determining mimetype based on file extension .IP \(bu "range" requests, for random access to files .IP \(bu access and error logging .IP \(bu configuration in attrdb format .IP \(bu as compliant as possible, where reasonable .IP \(bu mindful of security .PP .I Shttpd serves files from .IR webroot . Options, described below, configure all features except virtual hosting. For virtual hosting, a configuration file must be used and the command-line options will only apply to the "default" hostname (i.e. all besides those explicitly configured). The configuration file, specified using .BI -n " config" is in .I attrdb(6) format. It is read only at startup and at explicit request. The attributes are described below, with their corresponding command-line options. An example configuration file: .PP .EX debug #nodebug vhost #novhost ctlchan=shttpd accesslog=/services/logs/shttpdaccess announce=net!www.example.com!80 mime ext=.text type='text/plain; charset=utf-8' mime ext=.mov type='video/quicktime' mime ext=.erl type='text/plain; charset=utf-8' # port=80 is not necessary, it's the default host=www.example.com port=80 listings path='' cachesecs=60 index file=index.html file=index.htm file=index.txt redir src='^/oldfile$' dst=/newfile redir src='^/oldpath/(.*)$' dst=/newpath/$1 scgi path=/scgi/test addr=net!localhost!4000 cgi path=/cgi/env methods=GET,HEAD cmd='{load std; echo Status: 200 OK; echo content-type: text/plain; echo; cd /env && for(i in *) { echo $i''=''`{cat $i}}}' auth path=/secret realm='secret place' user=username pass=password alias host=example.com port=80 usehost=www.example.com useport=80 .EE .PP The options and their configuration file equivalents: .PP .TP .B -d Print debug messages to standard error and the error log, .IR /services/logs/shttpderror . Attributes `debug' and `nodebug' enable and disable debugging. Due to attrdb, `nodebug' always takes precedence regardless of position in file. .TP .B -h Serve multiple domains, known as virtual hosting. The `host'-header in the request (for http/1.1-only) selects the targeted host. If enabled, the .I host and TCP .I port in the request are looked up in the configuration, and files are served from .IR webroot/host!port . Note that the port is not taken from the `host'-header, but always from the local port of the connection. If no configuration could be found or when no specific host was requested (e.g. for http/1.0 requests), the default configuration will be used: host `_default' and port 80. Files in .I webroot are never served directly with .B -h present. Attributes `vhost' and `novhost' enable and disable virtual hosting. Due to attrdb, `novhost' always takes precedence regardless of position in file. .br Virtual hosts can only be specified with the configuration file. A `host' entry starts a configuration for a domain, attribute `port' is optional and defaults to 80. The value for `host' may be `*'. In this case the entry will serve as default entry, used when no other entry matches an incoming request. A host configuraty entry can be reused for another host by an entry with attribute `alias' (value ignored). Attributes `host' and `port' specify the new host, attributes `usehost' and `useport' specify which entry to use for requests instead. `Port' may be omitted, defaulting to `80'. `Usehost' defaults to the value of `port'. .TP .BI -L " path 0|1" For .I path and its subdirectories, set whether the request for a directory returns a html-formatted listing of files (when the second parameter is `1'), or a "file not found"-error (when the second parameter is `0'). Listings are only returned when no index file (see .BR -i ) The per-host configuration attributes are `listings' and `nolistings' (value ignored). One or more paths can be specified using the attribute `path'. In determining whether to list directory contents, the most specific match (longest prefix) wins. .TP .BI -A " path realm user:pass" Require authorization for .IR path . The match on .I path is a prefix-match. Note that the path does not have to end with a slash. Only insecure "basic" authorization is currently supported, "digest" is not. The per-host configuration attribute is `auth' (value ignored). `Path' specifies the path, `realm' the descriptive realm, `user' the user name and `pass' the password. Paths may occur multiple times in different `auth'-lines, each valid user/pass combination is allowed access. .TP .BI -C " cachesecs" Add header to allow clients to keep the response in their cache for .I cachesecs seconds. This only applies to static content (i.e. files and directory listings) not cgi and scgi handlers. The per-host configuration attribute is .IR cachesecs . .TP .BI -a " address" Announce to .I address and listen for incoming connection. The global configuration attribute is `announce', the value is the address to listen on. For a reload of the configuration attributes, the announce-addresses are ignored. To announce to a different set of ports, restart .IR shttpd . If no addresses are specified, .I shttpd will listen on .IR net!*!http . .TP .BI -c " path command methods" Handle requests for .I path by executing .IR command . The normal CGI/1.1 rules apply for .IR command . .I Path is prefix-matched and does not have to end with a slash. .I Command is executed using .IR sh (2). .I Methods is a comma- or space-separated list of methods (case-sensitive) that are allowed on the resource. An empty list allows all methods. The per-host configuration attribute is `cgi' (value ignored). `Path' specifies the host, `cmd' the command and `methos' the methods. .TP .BI -f " ctlchan" Create a .IR sys-file2chan (2) control file in .I /chan named .IR ctlchan . Currently, only the command `reload' is accepted. It reloads the configuration file currently in use. This is a global configuration file option, the corresponding attribute is `ctlchan'. Only a single control file can be registered. .TP .BI -i " indexfile" Search for the file named .I indexfile when a directory is requested and return that instead. This is commonly used to serve an `index.html'. Multiple file names can be specified, each will be tried in turn until a match is found. The per-host configuration attribute is `index' (value ignored). Multiple attributes `file' can be specified, each being handled as .B -i .IR indexfile . .TP .BI -l " logfile" Write the access log to .IR logfile . For each response, the following is printed (as a list of quoted words, quoted as in .IR sh (1)): Connection id, timestamp, remote and local ip and port, method, requested host (from `host'-header), path (with query), http version, response code, message and length, the user-agent that sent the request, the referer and finally the domain name for the ip address. The global configuration attribute is `accesslog'. The file is also reopened on a reload of the configuration file. .TP .BI -n " config" Use .I config of the configuraton file, which is in .IR attrdb (6) format. There is no default configuration file. The command-line options can be used for simple configurations. Since command-line options are handled in the order specified and .B -n overrides the current configuration, command-line options specified before .B -n are effectively ignored. Options specified after .B -n are used for the `default' host. Note that a reload also replaces all command-line options. There is no equivalent for the configuration file. Be sure to use full path names on the command-line if you want reloads to work. .TP .BI -r " pathre dest" Redirect requests that match regular expression .I pathre to .I dest with an HTTP ``301 Moved Permanently'' response. .I Pathre can contain groups, specified with ()'s as per .IR regex (6) syntax. Occurrences of $0, $1, etc. in .I dest are replaced by the corresponding group in .IR pathre . Group `$0' is the entire match and `$1' the first match. Occurrences of `$$' will be replaced by the literal `$'. For .IR pathre , `^' means beginning of path and `$' means end of path. The per-host configuration attribute is `redir' (value ignored). `Src' is the equivalent of .IR pathre , `dst' the equivalent of .IR dest . .TP .BI -s " path addr methods" Handle requests for .I path by passing the requests to the SCGI handler at .IR addr . .I Path is prefix-matched and need not end with a slash. .I Methods is a comma- or space-separated list of methods (case-sensitive) that are allowed on the resource. An empty list allows all methods. The per-host configuration attribute is `scgi' (value unused). `Path' specifies the path, `addr' the address and `methods' the methods. .TP .BI -t " extension mimetype" Registers extension (which is suffix-matched and thus should usually include a dot) as being of .IR mimetype . For each response returning a static file, the mimetype to be returned is looked up in the types specified by .B -t and compiled-in types, in that order. The global configuration attribute is `mime' (value unused). `Ext' specifies the extension, `type' the mimetype. .TP .BI -z " gzippath" For a requested .I path starting with .IR gzippath , return the gzip-compressed version .I path.gz instead. .I Path.gz is only returned if it exists and is smaller than the plain version, and .I path was not modified after .IR path.gz . The per-host configuration attribute is `gzip' (value unused), one or more `path' attributes specify the paths. .PP There is one last per-host configuration attribute that cannot be specified on the command-line: `listen' (value unused). On the same line, `ip' should be present and `port' may be present (it defaults to the port of the host definition). If virtual hosts are enabled, the local address is checked for each request. If at least one ip address has been specified and the local address is not present in the addresses list of the per-host configuration for the request, a ``404 Object Not Found'' error is returned. .PP To prevent files to be served to the public inadvertently, the root directory of the .I shttpd is replaced by .I webroot with .IR sys-bind (2). Also, suspicious combinations of headers are typically responded to with an error. This policy may err on the cautious side. For example, some important headers are not allowed to be specified twice. Note that CGI programs run in the namespace .I shttpd had originally been started with. .SH SOURCE .B /appl/cmd/ip/shttpd.b .SH SEE ALSO .IR attrdb (6), .IR regex (6) .PP SCGI protocol: http://python.ca/scgi/protocol.txt .br RFC1945: "Hypertext Transfer Protocol -- HTTP/1.0" .br RFC2616: "Hypertext Transfer Protocol -- HTTP/1.1" .SH BUGS Attrdb was not designed for configuration file use. The per-host configuration attributes can not be nicely grouped as top-level entries can. No line numbers are printed for errors. .PP Usernames and passwords should be read from factotum and not be sent in the clear. .PP Incompatibilities with the rfcs: .br * If the `host'-header references a non-existing domain name and virtual hosting is enabled, .I shttpd responds with `404 Object Not Found', instead of the rfc2626-required `400 Bad Request'. .br * For http/1.0 requests, the `host'-header is also used. .br * Only a single format of dates is understood, three are specified (but deprecated). .I Shttpd returns an error when a date that can not be parsed might result in incorrect behaviour (rather can only being less efficient, e.g. in the context of caching). |
Changes to man/8/svc.
︙ | ︙ | |||
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | .B /appl/svc/net.sh .br .B /appl/svc/registry.sh .br .B /appl/svc/rstyx.sh .br .B /appl/svc/styx.sh .SH SEE ALSO .IR listen (1), .IR export (4), .IR keyfs (4), .IR keysrv (4), .IR registry (4), .IR changelogin (8), .IR createsignerkey (8), .IR cs (8), .IR dns (8), .IR logind (8), .IR rstyxd (8), | > > | > | 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | .B /appl/svc/net.sh .br .B /appl/svc/registry.sh .br .B /appl/svc/rstyx.sh .br .B /appl/svc/styx.sh .SH AUX. SERVICES .IR httpd (8) .SH SEE ALSO .IR listen (1), .IR export (4), .IR keyfs (4), .IR keysrv (4), .IR registry (4), .IR changelogin (8), .IR createsignerkey (8), .IR cs (8), .IR dns (8), .IR logind (8), .IR rstyxd (8), .IR signer (8), .IR init (8) |
Changes to services/httpd/httpd.suff.
︙ | ︙ | |||
16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .bib text plain - # BibTex input .c text plain - # C program .c++ text plain - # C++ program .cc text plain - # [Mosaic] .cdf application x-netcdf - .cpio application x-cpio - .cpp text plain - # DOS C++ program .dat text plain - # AMPL et al. .diff text plain - .dvi application x-dvi - # TeX output .enc application octet-stream - # encrypted file .eps application postscript - .etx text x-setext - # [Mosaic] .exe application octet-stream - # DOS executable | > | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .bib text plain - # BibTex input .c text plain - # C program .c++ text plain - # C++ program .cc text plain - # [Mosaic] .cdf application x-netcdf - .cpio application x-cpio - .cpp text plain - # DOS C++ program .css text css - # html stylesheet .dat text plain - # AMPL et al. .diff text plain - .dvi application x-dvi - # TeX output .enc application octet-stream - # encrypted file .eps application postscript - .etx text x-setext - # [Mosaic] .exe application octet-stream - # DOS executable |
︙ | ︙ | |||
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | .gz - - x-gzip # gziped file .h text plain - # C header file .hdf application x-hdf - .hqx application octet-stream - # Mac BinHex .htm text html - .html text html - .ief image ief - # [Mosaic] .jfif image jpeg - # [Mosaic] .jfif-tbnl image jpeg - # [Mosaic] .jpe image jpeg - # [Mosaic] .jpeg image jpeg - .jpg image jpeg - .latex application x-latex - # [Mosaic] .ltx application x-latex - .man application x-troff-man - # [Mosaic] .me application x-troff-me - # [Mosaic] .mime message rfc822 - # [Mosaic] .mod text plain - # AMPL et al. .mov video quicktime - # [Mosaic] | > > | 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | .gz - - x-gzip # gziped file .h text plain - # C header file .hdf application x-hdf - .hqx application octet-stream - # Mac BinHex .htm text html - .html text html - .ief image ief - # [Mosaic] .ico image x-icon - # favicon .jfif image jpeg - # [Mosaic] .jfif-tbnl image jpeg - # [Mosaic] .jpe image jpeg - # [Mosaic] .jpeg image jpeg - .jpg image jpeg - .js text javascript - # ECMAscript .latex application x-latex - # [Mosaic] .ltx application x-latex - .man application x-troff-man - # [Mosaic] .me application x-troff-me - # [Mosaic] .mime message rfc822 - # [Mosaic] .mod text plain - # AMPL et al. .mov video quicktime - # [Mosaic] |
︙ | ︙ | |||
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | .oda application oda - # [Mosaic] .pbm image x-portable-bitmap - # [Mosaic] .pdf application pdf - # Adobe Portable Document Format .pgm image x-portable-graymap - # [Mosaic] .pl text plain - # [Mosaic] .pnm image x-portable-anymap - # [Mosaic] .ppm image x-portable-pixmap - # [Mosaic] .ps application postscript - .qt video quicktime - # [Mosaic] .r text plain - # ratfor program .ras image x-cmu-rast - # [Mosaic] .rc text plain - # rc .rfr text plain - # refer .rgb image x-rgb - # [Mosaic] .roff application x-troff - # [Mosaic] .rtf application rtf - # [Mosaic] | > | | | | > > > > | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | .oda application oda - # [Mosaic] .pbm image x-portable-bitmap - # [Mosaic] .pdf application pdf - # Adobe Portable Document Format .pgm image x-portable-graymap - # [Mosaic] .pl text plain - # [Mosaic] .pnm image x-portable-anymap - # [Mosaic] .ppm image x-portable-pixmap - # [Mosaic] .png image png - # Portable Network Graphic .ps application postscript - .qt video quicktime - # [Mosaic] .r text plain - # ratfor program .ras image x-cmu-rast - # [Mosaic] .rc text plain - # rc .rfr text plain - # refer .rgb image x-rgb - # [Mosaic] .roff application x-troff - # [Mosaic] .rtf application rtf - # [Mosaic] .rtx text richtext - # MIME richtext [Mosaic] .sh application x-shar - .shar application x-shar - .snd audio basic - .sv4cpio application x-sv4cpio - # [Mosaic] .sv4crc application x-sv4crc - # [Mosaic] .svg image svg+xml - # vector graphic .t application x-troff - # [Mosaic] .tar application x-tar - # [Mosaic] .taz application x-tar x-compress .tcl application x-tcl - .tex application x-tex - # Tex input .texi application x-texinfo - # [Mosaic] .texinfo application x-texinfo - # [Mosaic] .text text plain - # [Mosaic] .tgz application x-tar x-gzip .tif image tiff - .tiff image tiff - .toc text plain - # table of contents .tr application x-troff - # [Mosaic] .trz application x-tar x-compress .tsv text tab-separated-values - # [Mosaic] .txt text plain - .ustar application x-ustar - # [Mosaic] .wav audio x-wav - .woff application font-woff - # webfont 1 .woff2 font woff2 - # webfont 2 .wsrc application x-wais-source - # [Mosaic] .xbm image x-xbitmap - # X bitmap .xpm image x-xpixmap - # [Mosaic] .xwd image x-xwindowdump - # [Mosaic] .z - - x-compress .Z - - x-compress .zip application zip - # vi: ts=8 |
Changes to utils/start-tomo.
1 2 3 4 5 6 7 8 | #!/usr/bin/env rc ## locations iroot = /opt/tomo if (! ~ $TOMO_IROOT '') { iroot = $TOMO_IROOT } emu_cmd = $iroot^/Linux/386/bin/emu ## setup display emu_display = 800x480 | > > | 1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/env rc # requires <https://9fans.github.io/plan9port/> ⋄ xrandr ## locations iroot = /opt/tomo if (! ~ $TOMO_IROOT '') { iroot = $TOMO_IROOT } emu_cmd = $iroot^/Linux/386/bin/emu ## setup display emu_display = 800x480 |
︙ | ︙ |
Changes to utils/tomo-dev.sh.
︙ | ︙ | |||
44 45 46 47 48 49 50 | DEBIAN_STABLE=buster debootstrap --arch i386 $DEBIAN_STABLE $MY_CHROOT http://deb.debian.org/debian/ exit 0 ;; enter-chroot) shift MY_CHROOT=$1 | | | | 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | DEBIAN_STABLE=buster debootstrap --arch i386 $DEBIAN_STABLE $MY_CHROOT http://deb.debian.org/debian/ exit 0 ;; enter-chroot) shift MY_CHROOT=$1 #echo "proc $MY_CHROOT/proc proc defaults 0 0" >> /etc/fstab mount proc $MY_CHROOT/proc -t proc #echo "sysfs $MY_CHROOT/sys sysfs defaults 0 0" >> /etc/fstab mount sysfs $MY_CHROOT/sys -t sysfs cp /etc/hosts $MY_CHROOT/etc/hosts cp /proc/mounts $MY_CHROOT/etc/mtab exec chroot $MY_CHROOT /bin/bash ;; bind-chroot) shift |
︙ | ︙ | |||
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | shift set -e export iroot=$1 export syshost=$2 export objtype=$3 export PATH=$iroot/$syshost/$objtype/bin:$PATH ./makemk.sh mk nuke mk install ;; rebuild) shift export iroot=$1 export syshost=$2 export objtype=$3 export PATH=$iroot/$syshost/$objtype/bin:$PATH mk install ;; rebuild-Linux) shift $0 rebuild ${1:-"/opt/tomo"} Linux 386 ;; build-Linux) shift $0 build ${1:-"/opt/tomo"} Linux 386 | > > > > > > > > > > > > > > | 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | shift set -e export iroot=$1 export syshost=$2 export objtype=$3 export PATH=$iroot/$syshost/$objtype/bin:$PATH ./makemk.sh mk mkdirs mk nuke mk install ;; nuke) shift set -e export iroot=$1 export syshost=$2 export objtype=$3 export PATH=$iroot/$syshost/$objtype/bin:$PATH mk nuke ;; rebuild) shift export iroot=$1 export syshost=$2 export objtype=$3 export PATH=$iroot/$syshost/$objtype/bin:$PATH mk install ;; nuke-Linux) shift $0 nuke ${1:-"/opt/tomo"} Linux 386 ;; rebuild-Linux) shift $0 rebuild ${1:-"/opt/tomo"} Linux 386 ;; build-Linux) shift $0 build ${1:-"/opt/tomo"} Linux 386 |
︙ | ︙ | |||
115 116 117 118 119 120 121 | shift # since we host on fossil, the release-upload script can be hosted using # the ext feature so access can be managed in the usual way! # https://fossil-scm.org/home/doc/trunk/www/serverext.wiki artifact="$1" curl -vSsf -m 360 \ -X POST \ | | | 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | shift # since we host on fossil, the release-upload script can be hosted using # the ext feature so access can be managed in the usual way! # https://fossil-scm.org/home/doc/trunk/www/serverext.wiki artifact="$1" curl -vSsf -m 360 \ -X POST \ --data-binary "@`realpath $artifact`" \ "https://$HP_CI_UPLOAD_KEY@$HP_CI_UPLOAD_ENDPOINT?n=$artifact" ;; *) echo "$0 [make-chroot|enter-chroot] MY_CHROOT" echo TODO: print useful help exit 1 ;; esac |
Added utils/tomo-shell.
> > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/env rc # * https://9fans.github.io/plan9port/ # * xorg xrandr / x11-xserver-utils # * xorg xsetroot / x11-xserver-utils # PATH=$PATH:/opt/tomo/Linux/386/bin:/opt/tomo/utils TOMO_SCREEN = `{xrandr \ | 9 grep '\*' \ | 9 awk '{print $1}' \ | 9 sort \ | 9 head -n1} xsetroot -cursor_name left_ptr start-tomo $* -- :0 vt$XDG_VTNR |