Wordfence Security – Firewall & Malware Scan - Version 1.1

Version Description

Download this release

Release Info

Developer mmaunder
Plugin Icon 128x128 Wordfence Security – Firewall & Malware Scan
Version 1.1
Comparing to
See all releases

Version 1.1

Files changed (71) hide show
  1. css/colorbox.css +64 -0
  2. css/diff.css +118 -0
  3. css/dt_table.css +54 -0
  4. css/iptraf.css +49 -0
  5. css/main.css +208 -0
  6. css/phpinfo.css +30 -0
  7. images/back_disabled.jpg +0 -0
  8. images/back_enabled.jpg +0 -0
  9. images/button-grad-grey.png +0 -0
  10. images/forward_disabled.jpg +0 -0
  11. images/forward_enabled.jpg +0 -0
  12. images/icons/ajax24.gif +0 -0
  13. images/icons/ajax3.gif +0 -0
  14. images/icons/ajaxWhite32x32.gif +0 -0
  15. images/icons/arrow_refresh.png +0 -0
  16. images/icons/bullet_yellow.png +0 -0
  17. images/icons/email_go.png +0 -0
  18. images/icons/error128.png +0 -0
  19. images/icons/tick128.png +0 -0
  20. images/icons/warning128.png +0 -0
  21. images/lightbox-controls.png +0 -0
  22. images/loading.gif +0 -0
  23. images/loading_background.png +0 -0
  24. images/sort_asc.gif +0 -0
  25. images/sort_asc_disabled.gif +0 -0
  26. images/sort_both.gif +0 -0
  27. images/sort_desc.gif +0 -0
  28. images/sort_desc_disabled.gif +0 -0
  29. images/wordfence-logo-16x16.png +0 -0
  30. images/wordfence-logo-32x32.png +0 -0
  31. images/wordfence-logo-64x64.png +0 -0
  32. js/admin.js +682 -0
  33. js/jquery.colorbox-min.js +4 -0
  34. js/jquery.dataTables.min.js +151 -0
  35. js/jquery.tmpl.min.js +10 -0
  36. js/jquery.tools.min.js +15 -0
  37. lib/.htaccess +2 -0
  38. lib/Diff.php +176 -0
  39. lib/Diff/Renderer/Abstract.php +82 -0
  40. lib/Diff/Renderer/Html/Array.php +224 -0
  41. lib/Diff/Renderer/Html/SideBySide.php +163 -0
  42. lib/Diff/SequenceMatcher.php +742 -0
  43. lib/IPTraf.php +40 -0
  44. lib/diffResult.php +38 -0
  45. lib/email_genericAlert.php +15 -0
  46. lib/email_newIssues.php +21 -0
  47. lib/geshi.php +4755 -0
  48. lib/geshi/apache.php +483 -0
  49. lib/geshi/bash.php +440 -0
  50. lib/geshi/css.php +223 -0
  51. lib/geshi/html4strict.php +190 -0
  52. lib/geshi/html5.php +212 -0
  53. lib/geshi/java.php +983 -0
  54. lib/geshi/javascript.php +152 -0
  55. lib/geshi/perl.php +213 -0
  56. lib/geshi/php-brief.php +222 -0
  57. lib/geshi/php.php +1114 -0
  58. lib/geshi/python.php +244 -0
  59. lib/geshi/ruby.php +231 -0
  60. lib/geshi/text.php +84 -0
  61. lib/menu_activity.php +164 -0
  62. lib/menu_blockedIPs.php +153 -0
  63. lib/menu_config.php +26 -0
  64. lib/menu_options.php +170 -0
  65. lib/menu_scan.php +470 -0
  66. lib/sysinfo.php +21 -0
  67. lib/wf503.php +9 -0
  68. lib/wfAPI.php +130 -0
  69. lib/wfAction.php +4 -0
  70. lib/wfBrowscap.php +58 -0
  71. lib/wfBrowscapCache.php +4 -0
css/colorbox.css ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ ColorBox Core Style:
3
+ The following CSS is consistent between example themes and should not be altered.
4
+ */
5
+ #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
6
+ #cboxOverlay{position:fixed; width:100%; height:100%;}
7
+ #cboxMiddleLeft, #cboxBottomLeft{clear:left;}
8
+ #cboxContent{position:relative;}
9
+ #cboxLoadedContent{overflow:auto;}
10
+ #cboxTitle{margin:0;}
11
+ #cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;}
12
+ #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
13
+ .cboxPhoto{float:left; margin:auto; border:0; display:block;}
14
+ .cboxIframe{width:100%; height:100%; display:block; border:0;}
15
+
16
+ /*
17
+ User Style:
18
+ Change the following styles to modify the appearance of ColorBox. They are
19
+ ordered & tabbed in a way that represents the nesting of the generated HTML.
20
+ */
21
+ #cboxOverlay{
22
+ background: #777;
23
+ background: -webkit-radial-gradient(rgba(120, 120, 120, 0.8), rgba(100, 100, 100, 0.8) 50%, rgba(70, 70, 70, 1));
24
+ background: -moz-radial-gradient(rgba(120, 120, 120, 0.6), rgba(100, 100, 100, 0.8) 20%, rgba(70, 70, 70, 1));
25
+ }
26
+ #colorbox { }
27
+ #cboxContent { background:#fff; overflow:hidden; padding: 0 0 8px; margin: 20px;
28
+ -webkit-border-radius: 3px 3px 2px 2px; -moz-border-radius: 3px 3px 2px 2px; border-radius: 3px 3px 2px 2px; /* border radius */
29
+ -webkit-box-shadow: 0 2px 4px rgba(0,0,0,.4); -moz-box-shadow: 0 2px 4px rgba(0,0,0,.4); box-shadow: 0 2px 4px rgba(0,0,0,.4); /* box shadow */
30
+ -webkit-background-clip: padding-box; /* smoother borders with webkit */ }
31
+ #cboxError{padding:50px; border:1px solid #ccc;}
32
+ #cboxLoadedContent {
33
+ /* margin-bottom:28px; */
34
+ /* MDM added: */ margin: 10px 20px 28px 20px; font-family: Arial; color: #333;
35
+ -webkit-border-radius: 2px 2px 0 0; -moz-border-radius: 2px 2px 0 0; border-radius: 2px 2px 0 0; /* border radius */
36
+ }
37
+ #cboxTitle{position:absolute; bottom:8px; left:5px; text-align:center; width:100%; color:#949494;}
38
+ #cboxCurrent{position:absolute; bottom:8px; left:63px; color:#949494; text-indent: -9999px;}
39
+ #cboxSlideshow{position:absolute; bottom:8px; right:35px; color:#0092ef;}
40
+ #cboxPrevious{position:absolute; bottom:5px; left:5px; background:url(../images/lightbox-controls.png) no-repeat -75px 0; width:25px; height:25px; text-indent:-9999px;}
41
+ #cboxPrevious.hover{background-position:-75px -25px;}
42
+ #cboxNext{position:absolute; bottom:5px; left:32px; background:url(../images/lightbox-controls.png) no-repeat -50px 0; width:25px; height:25px; text-indent:-9999px;}
43
+ #cboxNext.hover{background-position:-50px -25px;}
44
+ #cboxLoadingOverlay{background:url(../images/loading_background.png) no-repeat center center;}
45
+ #cboxLoadingGraphic{background:url(../images/loading.gif) no-repeat center center;}
46
+ #cboxClose{position:absolute; bottom:5px; right:5px; background:url(../images/lightbox-controls.png) no-repeat -25px 0; width:25px; height:25px; text-indent:-9999px;}
47
+ #cboxClose.hover{background-position:-25px -25px;}
48
+
49
+ /*
50
+ The following fixes a problem where IE7+ replaces a PNG's alpha transparency with a black fill
51
+ when an alpha filter (opacity change) is set on the element or ancestor element.
52
+ */
53
+ .cboxIE #cboxTopLeft,
54
+ .cboxIE #cboxTopCenter,
55
+ .cboxIE #cboxTopRight,
56
+ .cboxIE #cboxBottomLeft,
57
+ .cboxIE #cboxBottomCenter,
58
+ .cboxIE #cboxBottomRight,
59
+ .cboxIE #cboxMiddleLeft,
60
+ .cboxIE #cboxMiddleRight {
61
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
62
+ }
63
+
64
+
css/diff.css ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body {
2
+ background: #fff;
3
+ font-family: Arial;
4
+ font-size: 12px;
5
+ }
6
+ .Differences {
7
+ width: 100%;
8
+ border-collapse: collapse;
9
+ border-spacing: 0;
10
+ empty-cells: show;
11
+ }
12
+
13
+ .Differences thead th {
14
+ text-align: left;
15
+ border-bottom: 1px solid #000;
16
+ background: #aaa;
17
+ color: #000;
18
+ padding: 4px;
19
+ }
20
+ .Differences tbody th {
21
+ text-align: right;
22
+ background: #ccc;
23
+ width: 4em;
24
+ padding: 1px 2px;
25
+ border-right: 1px solid #000;
26
+ vertical-align: top;
27
+ font-size: 13px;
28
+ }
29
+
30
+ .Differences td {
31
+ padding: 1px 2px;
32
+ font-family: Consolas, monospace;
33
+ font-size: 13px;
34
+ }
35
+
36
+ .DifferencesSideBySide .ChangeInsert td.Left {
37
+ background: #dfd;
38
+ }
39
+
40
+ .DifferencesSideBySide .ChangeInsert td.Right {
41
+ background: #cfc;
42
+ }
43
+
44
+ .DifferencesSideBySide .ChangeDelete td.Left {
45
+ background: #f88;
46
+ }
47
+
48
+ .DifferencesSideBySide .ChangeDelete td.Right {
49
+ background: #faa;
50
+ }
51
+
52
+ .DifferencesSideBySide .ChangeReplace .Left {
53
+ background: #fe9;
54
+ }
55
+
56
+ .DifferencesSideBySide .ChangeReplace .Right {
57
+ background: #fd8;
58
+ }
59
+
60
+ .Differences ins, .Differences del {
61
+ text-decoration: none;
62
+ }
63
+
64
+ .DifferencesSideBySide .ChangeReplace ins, .DifferencesSideBySide .ChangeReplace del {
65
+ background: #fc0;
66
+ }
67
+
68
+ .Differences .Skipped {
69
+ background: #f7f7f7;
70
+ }
71
+
72
+ .DifferencesInline .ChangeReplace .Left,
73
+ .DifferencesInline .ChangeDelete .Left {
74
+ background: #fdd;
75
+ }
76
+
77
+ .DifferencesInline .ChangeReplace .Right,
78
+ .DifferencesInline .ChangeInsert .Right {
79
+ background: #dfd;
80
+ }
81
+
82
+ .DifferencesInline .ChangeReplace ins {
83
+ background: #9e9;
84
+ }
85
+
86
+ .DifferencesInline .ChangeReplace del {
87
+ background: #e99;
88
+ }
89
+
90
+ pre {
91
+ width: 100%;
92
+ overflow: auto;
93
+ }
94
+ h1 {
95
+ background: url(../images/wordfence-logo-64x64.png);
96
+ background-position: 0 0;
97
+ background-repeat: no-repeat;
98
+ height: 64px;
99
+ vertical-align: middle;
100
+ padding: 10px 0 0 70px;
101
+ margin: 20px 0 10px 0;
102
+ font-size: 34px;
103
+ color: #777;
104
+ }
105
+ table.summary {
106
+ font-weight: bold;
107
+ }
108
+ .diffFooter {
109
+ text-align: center;
110
+ font-size: 16px;
111
+ color: #999;
112
+ font-family: Verdana;
113
+ margin: 50px auto 50px auto;
114
+ }
115
+ .diffFooter a {
116
+ color: #999;
117
+ }
118
+
css/dt_table.css ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .paging_two_button .ui-button{float:left;cursor:hand}
2
+ .paging_full_numbers .ui-button{cursor:hand;margin:0;padding:2px 6px}
3
+ .dataTables_paginate .ui-button{margin-right:-.1em!important}
4
+ .dataTables_wrapper .ui-toolbar{padding:5px}
5
+ .dataTables_paginate{width:auto;float:right;text-align:right}
6
+ .dataTables_info{float:left}
7
+ table.display thead th{cursor:pointer;text-align:left;font-size:11px;border:1px solid #ccc;padding-right:4px;text-transform:uppercase}
8
+ table.display thead th .th_wrapp{padding:8px 4px 5px 9px}
9
+ table.display thead th.sorting_disabled{cursor:default}
10
+ div.dataTables_wrapper .ui-widget-header{font-weight:400}
11
+ table.display thead th div.DataTables_sort_wrapper{position:relative;padding-right:20px}
12
+ table.display thead th div.DataTables_sort_wrapper span{position:absolute;top:50%;margin-top:-8px;right:0}
13
+ .dataTables_wrapper{position:relative;_height:302px;clear:both;overflow:hidden}
14
+ .dataTables_processing{position:absolute;top:0;left:50%;width:250px;margin-left:-125px;border:1px solid #ddd;text-align:center;color:#999;padding:2px 0}
15
+ .dataTables_length{width:40%;float:left}
16
+ .dataTables_filter{width:50%;float:right;text-align:right}
17
+ .dataTables_filter input {border:1px;border-color:#b8b8b8 #e2e2e2 #e2e2e2 #b8b8b8;border-style:solid;padding:2px}
18
+ .paginate_disabled_previous,.paginate_enabled_previous,.paginate_disabled_next,.paginate_enabled_next{height:19px;width:19px;margin-left:3px;float:left}
19
+ .paginate_enabled_previous,.paginate_enabled_next{cursor:pointer}
20
+ .paginate_disabled_previous{background-image:url(../images/back_disabled.jpg)}
21
+ .paginate_enabled_previous{background-image:url(../images/back_enabled.jpg)}
22
+ .paginate_disabled_next{background-image:url(../images/forward_disabled.jpg)}
23
+ .paginate_enabled_next{background-image:url(../images/forward_enabled.jpg)}
24
+ table.display{width:800px;clear:both;border-collapse:collapse;margin:0 0 24px;background:#fff;position:relative;top:12px}
25
+ table.display tfoot th{font-weight:400;padding:3px 8px 3px 8px}
26
+ table.display tr.heading2 td{border-bottom:1px solid #aaa}
27
+ table.display td{padding:5px 8px;border:1px solid #ccc}
28
+ .sorting_asc div.th_wrapp{background:url(../images/sort_asc.gif) no-repeat right center}
29
+ .sorting_desc div.th_wrapp{background:url(../images/sort_desc.gif) no-repeat right center}
30
+ .sorting_asc_disabled div.th_wrapp{background: url('../images/sort_asc_disabled.gif') no-repeat center right}
31
+ .sorting_desc_disabled div.th_wrapp{background: url('../images/sort_desc_disabled.gif') no-repeat center right}
32
+ .sorting div.th_wrapp{background:url(../images/sort_both.gif) no-repeat right center}
33
+ tr.odd{background-color:#f5f5f5}
34
+ tr.even{background-color:#fff}
35
+ .top,.bottom{background-color:#F5F5F5;border:1px solid #CCC;padding:15px}
36
+ .top .dataTables_info{float:none}
37
+ tfoot input{width:100%;color:#444;margin:.5em 0}
38
+ tfoot input.search_init{color:#999}
39
+ td.group{background-color:#d1cfd0;border-bottom:2px solid #A19B9E;border-top:2px solid #A19B9E}
40
+ td.details{background-color:#d1cfd0;border:2px solid #A19B9E}
41
+ .example_alt_pagination div.dataTables_info{width:40%}
42
+ .paging_full_numbers span.paginate_button,.paging_full_numbers span.paginate_active{border:1px solid #ccc;cursor:pointer;margin:0 0 0 5px;padding:2px 5px}
43
+ .paging_full_numbers span.paginate_button:hover{background-color:#e5e5e5}
44
+ .paging_full_numbers span.paginate_active{background-color:#e5e5e5}
45
+ .paging_full_numbers span.paginate_button_disabled {color:#ccc;cursor:default}
46
+ .paging_full_numbers span.paginate_button_disabled:hover {background:#fff}
47
+ table.display tr.even.row_selected td{background-color:#B0BED9}
48
+ table.display tr.odd.row_selected td{background-color:#9FAFD1}
49
+ .sorting_1 {background:#f5f5f5}
50
+ table.display td.center,.dataTables_empty{text-align:center}
51
+ .dataTables_empty{background:#fff}
52
+ .paging_full_numbers span.paginate_button{background-color:#fff}
53
+ .dataTables_scroll,.clear{clear:both}
54
+ .dataTables_info,.dataTables_length,.dataTables_filter,.dataTables_processing,.paging_full_numbers span.paginate_button,.paging_full_numbers span.paginate_active {font-size:11px}
css/iptraf.css ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body {
2
+ background: #fff;
3
+ font-family: Arial;
4
+ font-size: 12px;
5
+ }
6
+
7
+
8
+ pre {
9
+ width: 100%;
10
+ overflow: auto;
11
+ }
12
+ h1 {
13
+ background: url(../images/wordfence-logo-64x64.png);
14
+ background-position: 0 0;
15
+ background-repeat: no-repeat;
16
+ height: 64px;
17
+ vertical-align: middle;
18
+ padding: 10px 0 0 70px;
19
+ margin: 20px 0 10px 0;
20
+ font-size: 34px;
21
+ color: #777;
22
+ }
23
+
24
+ .footer {
25
+ text-align: center;
26
+ font-size: 16px;
27
+ color: #999;
28
+ font-family: Verdana;
29
+ margin: 50px auto 50px auto;
30
+ }
31
+ .footer a {
32
+ color: #999;
33
+ }
34
+ td, th {
35
+ vertical-align: top;
36
+ }
37
+ th, td {
38
+ text-align: left;
39
+ padding-bottom: 5px;
40
+ }
41
+ th {
42
+ white-space:nowrap;
43
+ }
44
+ th.HTTP, td.HTTP {
45
+ padding: 0;
46
+ font-weight: normal;
47
+ font-size: 10px;
48
+ }
49
+ th.HTTP { padding-right: 5px; }
css/main.css ADDED
@@ -0,0 +1,208 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wordfenceWrap {
2
+ margin: 0 0 0 20px;
3
+ }
4
+ div.wordfenceLive {
5
+ height: 29px;
6
+ white-space: nowrap;
7
+ overflow: hidden;
8
+ border-width: 1px 0 1px 0;
9
+ background-color: #FFFCEF;
10
+ border-color: #666;
11
+ border-style: solid;
12
+ margin: 20px 0 10px 0;
13
+ padding: 3px 3px 3px 10px;
14
+ font-family: Arial;
15
+ font-size: 14px;
16
+ -webkit-font-smoothing: antialiased;
17
+ }
18
+ div.wordfenceLive h2 {
19
+ font-weight: bold;
20
+ color: #888;
21
+ margin: 0 10px 0 0;
22
+ padding: 0;
23
+ display: inline;
24
+ font-size: 14px;
25
+ font-family: Georgia, serif;
26
+ font-style: italic;
27
+ -webkit-font-smoothing: antialiased;
28
+ }
29
+ div.wordfenceLive p {
30
+ color: #000;
31
+ font-weight: normal;
32
+ display: inline;
33
+ }
34
+ .wordfence-icon32 {
35
+ width: 32px;
36
+ height: 32px;
37
+ background-position: 0 0;
38
+ background-repeat: no-repeat;
39
+ padding: 0;
40
+ margin: 7px 5px 0 0;
41
+ float: left;
42
+ }
43
+ .wordfence-lock-icon {
44
+ background-image: url(../images/wordfence-logo-32x32.png);
45
+ }
46
+
47
+ .wordfence .resulticon {
48
+ display: block;
49
+ float: left;
50
+ width: 16px;
51
+ height: 16px;
52
+ background-position: 0 0;
53
+ background-repeat: no-repeat;
54
+ border-width: 0;
55
+ padding: 0;
56
+ margin: 0 3px 0 0;
57
+ background-image: url(../images/icons/bullet_yellow.png);
58
+ }
59
+
60
+ .wordfence .wordfenceScanButton { margin: 20px 0 20px 0; }
61
+
62
+ .wordfenceBoldTD {
63
+ font-weight: bold;
64
+ }
65
+
66
+ .wfAjax24 {
67
+ display: none;
68
+ width: 24px;
69
+ height: 24px;
70
+ background-image: url(../images/icons/ajax24.gif);
71
+ margin: 0;
72
+ padding: 0;
73
+ }
74
+
75
+
76
+ div.wfLoadingWhite32 {
77
+ width: 32px;
78
+ height: 32px;
79
+ background-image: url(../images/icons/ajaxWhite32x32.gif);
80
+ margin: 0;
81
+ padding: 0;
82
+ }
83
+
84
+ div.wordfenceScanButton input.button-wf-grey {
85
+ background: #EFEFEF url(../images/button-grad-grey.png) repeat-x scroll left top;
86
+ border-color: #EFEFEF;
87
+ }
88
+
89
+ .wfTabsContainer {
90
+ overflow: hidden;
91
+ border: 1px solid #CCC;
92
+ max-width: 970px;
93
+ padding: 15px;
94
+ min-height: 200px;
95
+ -webkit-font-smoothing: antialiased;
96
+ }
97
+ #wfTabs::after {
98
+ content: ".";
99
+ display: block;
100
+ height: 0;
101
+ width: 0;
102
+ line-height: 0;
103
+ clear: both;
104
+ visibility: hidden;
105
+ }
106
+ #wfTabs a {
107
+ float: left;
108
+ z-index: 10;
109
+ height: 18px;
110
+ margin: 0 5px -1px 0;
111
+ padding: 5px 8px;
112
+ border: 1px solid #CCC;
113
+ text-decoration: none;
114
+ background-color: #EFEFEF;
115
+ color: #21759B;
116
+ -moz-border-radius-topright: 3px;
117
+ -moz-border-radius-topleft: 3px;
118
+ border-top-right-radius: 3px;
119
+ border-top-left-radius: 3px;
120
+ }
121
+ #wfTabs a.selected {
122
+ border-bottom: 1px solid #FFF;
123
+ background-color: #FFF;
124
+ color: #777;
125
+ }
126
+ table.wfSummaryParent { font-family: sans-serif; font-size: 14px; color: #000; z-index: 9;}
127
+ table.wfSummaryParent td { vertical-align: top; padding: 0; margin: 0; }
128
+ table.wfSummaryParent table.wfSummaryChild th { font-weight: bold; text-align: right; font-family: Georgia, serif; color: #000; padding: 5px 10px 5px 0; border-top: 1px solid #CCC; }
129
+ table.wfSummaryParent table.wfSummaryChild td { font-weight: normal; text-align: left; padding: 5px 0 5px 0; border-top: 1px solid #CCC; }
130
+ table.wfSummaryParent table.wfSC1 td { width: 300px; padding: 0px 25px 10px 0; }
131
+ table.wfSummaryParent table.wfSC2 th { width: 80px; }
132
+ table.wfSummaryParent table.wfSC2 td { width: 100px; }
133
+ table.wfSummaryParent table.wfSC3 th { width: 80px; }
134
+ table.wfSummaryParent table.wfSC3 td { width: 250px; }
135
+ table.wfSummaryParent th.wfHead { font-size: 22px; font-family: Georgia, serif; font-style: italic; color: #555; font-weight: bold; text-align: left; padding: 20px 0 20px 0px; -webkit-font-smoothing: antialiased; }
136
+
137
+ div.wfIssue table.wfIssue td { padding: 2px; margin: 0; border-width: 0px; text-align: left; }
138
+ div.wfIssue table.wfIssue th { padding: 2px; margin: 0; font-weight: bold; text-align: left; color: #777; }
139
+ div.wfIssue h2 { margin: 0px 0 5px 0; padding: 0; }
140
+ div.wfIssue table.wfIssueLinks td { border-width: 0px; text-align: left; padding-right: 10px; }
141
+ .wfIssueOptions {
142
+ border-top: 1px solid #CCC;
143
+ padding: 10px;
144
+ }
145
+ .wfIssueOptions a {
146
+ margin-left: 10px;
147
+ }
148
+ .wfIssueOptions strong {
149
+ float: left;
150
+ display: block;
151
+ width: 60px;
152
+ }
153
+ .wfProbSev1, .wfProbSev2, .wfAjaxLight128, .wfResolved {
154
+ width: 128px;
155
+ height: 128px;
156
+ border: 0;
157
+ margin: 0 auto;
158
+ background-repeat: no-repeat; background-position: 0 0;
159
+ text-decoration: none;
160
+ display: block;
161
+ }
162
+ .wfProbSev1 { background-image: url(../images/icons/error128.png); }
163
+ .wfProbSev2 { background-image: url(../images/icons/warning128.png); }
164
+ .wfResolved { background-image: url(../images/icons/tick128.png); }
165
+ .wfAjaxLight128 { background-image: url(../images/icons/ajax3.gif); }
166
+ .wfStrong { font-weight: bold; }
167
+ .wordfenceModeElem { display: none; }
168
+ .wfIssuesContainer { width: 800px; display: none; }
169
+ .wfIssuesContainer p { width: 550px; }
170
+ .wfWarn { color: #F00; }
171
+ img.wfFlag { vertical-align: middle; margin: -3px 4px 0 0; }
172
+ .wfHitTime { font-style: italic; }
173
+ .wfAvatar img { vertical-align: middle; }
174
+ .wfActEvent { border-bottom: 1px solid #CCC; margin: 0 0 10px 0; padding: 0 0 10px 0; }
175
+ .wfTimeAgo { font-family: Georgia, times; color: #999; font-weight: bold; font-style: italic; }
176
+ table.wfConfigForm th {
177
+ font-weight: normal;
178
+ text-align: left;
179
+ padding: 2px 3px 1px 0;
180
+ vertical-align: middle;
181
+ }
182
+ table.wfConfigForm td {
183
+ vertical-align: middle;
184
+ }
185
+ table th.wfConfigEnable { font-weight: bold; }
186
+ .wfSavedMsg { display: none; color: #A00; }
187
+ table th.wfSubheading { font-weight: bold; padding-top: 10px; }
188
+ .wfALogTime { color: #999; }
189
+ .wfALogEntry { }
190
+ .wfALogMailLink, .wfALogReloadLink {
191
+ display: block;
192
+ position: absolute;
193
+ width: 16px;
194
+ height: 16px;
195
+ padding: 0;
196
+ margin: 0;
197
+ }
198
+ .wfALogMailLink {
199
+ right: 20px;
200
+ top: 2px;
201
+ background-image: url(../images/icons/email_go.png);
202
+ }
203
+ .wfALogReloadLink {
204
+ right: 42px;
205
+ top: 2px;
206
+ background-image: url(../images/icons/arrow_refresh.png);
207
+ }
208
+ #wfActivity { position: relative; }
css/phpinfo.css ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+
3
+ h1.p {
4
+ background: url(../images/wordfence-logo-64x64.png);
5
+ background-position: 0 0;
6
+ background-repeat: no-repeat;
7
+ height: 64px;
8
+ vertical-align: middle;
9
+ padding: 10px 0 0 70px;
10
+ margin: 20px 0 10px 0;
11
+ font-family: Arial;
12
+ font-weight: normal;
13
+ font-size: 26px;
14
+ }
15
+ h1.p:before {
16
+ content: "Wordfence System Info for ";
17
+ }
18
+ td img { display: none; }
19
+
20
+ .diffFooter {
21
+ text-align: center;
22
+ font-size: 16px;
23
+ color: #999;
24
+ font-family: Verdana;
25
+ margin: 50px auto 50px auto;
26
+ }
27
+ .diffFooter a {
28
+ color: #999;
29
+ }
30
+
images/back_disabled.jpg ADDED
Binary file
images/back_enabled.jpg ADDED
Binary file
images/button-grad-grey.png ADDED
Binary file
images/forward_disabled.jpg ADDED
Binary file
images/forward_enabled.jpg ADDED
Binary file
images/icons/ajax24.gif ADDED
Binary file
images/icons/ajax3.gif ADDED
Binary file
images/icons/ajaxWhite32x32.gif ADDED
Binary file
images/icons/arrow_refresh.png ADDED
Binary file
images/icons/bullet_yellow.png ADDED
Binary file
images/icons/email_go.png ADDED
Binary file
images/icons/error128.png ADDED
Binary file
images/icons/tick128.png ADDED
Binary file
images/icons/warning128.png ADDED
Binary file
images/lightbox-controls.png ADDED
Binary file
images/loading.gif ADDED
Binary file
images/loading_background.png ADDED
Binary file
images/sort_asc.gif ADDED
Binary file
images/sort_asc_disabled.gif ADDED
Binary file
images/sort_both.gif ADDED
Binary file
images/sort_desc.gif ADDED
Binary file
images/sort_desc_disabled.gif ADDED
Binary file
images/wordfence-logo-16x16.png ADDED
Binary file
images/wordfence-logo-32x32.png ADDED
Binary file
images/wordfence-logo-64x64.png ADDED
Binary file
js/admin.js ADDED
@@ -0,0 +1,682 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ if(! window['wordfenceAdmin']){
2
+ window['wordfenceAdmin'] = {
3
+ loading16: '<div class="wfLoading16"></div>',
4
+ dbCheckTables: [],
5
+ dbCheckCount_ok: 0,
6
+ dbCheckCount_skipped: 0,
7
+ dbCheckCount_errors: 0,
8
+ issues: [],
9
+ ignoreData: false,
10
+ iconErrorMsgs: [],
11
+ scanIDLoaded: 0,
12
+ colorboxQueue: [],
13
+ colorboxOpen: false,
14
+ scanPending: false,
15
+ mode: '',
16
+ visibleIssuesPanel: 'new',
17
+ preFirstScanMsgsLoaded: false,
18
+ newestActivityTime: 0, //must be 0 to force loading of all initially
19
+ elementGeneratorIter: 1,
20
+ reloadConfigPage: false,
21
+ nonce: false,
22
+ init: function(){
23
+ this.nonce = WordfenceAdminVars.firstNonce;
24
+ if(jQuery('#wordfenceMode_scan').length > 0){
25
+ this.mode = 'scan';
26
+ this.noScanHTML = jQuery('#wfNoScanYetTmpl').tmpl().html();
27
+ } else if(jQuery('#wordfenceMode_activity').length > 0){
28
+ this.mode = 'activity';
29
+ this.activityMode = 'hit';
30
+ this.updateTicker();
31
+ } else if(jQuery('#wordfenceMode_options').length > 0){
32
+ this.mode = 'options';
33
+ jQuery('.wfConfigElem').change(function(){ jQuery('#securityLevel').val('CUSTOM'); });
34
+ this.updateTicker();
35
+ } else if(jQuery('#wordfenceMode_blockedIPs').length > 0){
36
+ this.mode = 'blocked';
37
+ this.staticTabChanged();
38
+ this.updateTicker();
39
+ } else {
40
+ this.mode = false;
41
+ }
42
+ if(this.mode){ //We are in a Wordfence page
43
+ var self = this;
44
+ this.liveInt = setInterval(function(){ self.updateTicker(); }, 1000);
45
+ jQuery(document).bind('cbox_closed', function(){ self.colorboxIsOpen = false; self.colorboxServiceQueue(); });
46
+ }
47
+
48
+ },
49
+ updateTicker: function(){
50
+ var self = this;
51
+ var alsoGet = '';
52
+ var otherParams = '';
53
+ if(this.mode == 'activity' && /^(?:404|hit|human|ruser|gCrawler|crawler|loginLogout)$/.test(this.activityMode)){
54
+ alsoGet = 'logList_' + this.activityMode;
55
+ otherParams = this.newestActivityTime;
56
+ }
57
+ this.ajax('wordfence_ticker', {
58
+ alsoGet: alsoGet,
59
+ otherParams: otherParams
60
+ }, function(res){
61
+ self.handleTickerReturn(res);
62
+ });
63
+ },
64
+ handleTickerReturn: function(res){
65
+ var statusMsgChanged = false;
66
+ var newMsg = "";
67
+ var oldMsg = jQuery('#wfLiveStatus').html();
68
+ if( res.msg ){
69
+ newMsg = res.msg;
70
+ } else {
71
+ newMsg = "Idle";
72
+ }
73
+ if(newMsg && oldMsg && newMsg != oldMsg){
74
+ statusMsgChanged = true;
75
+ }
76
+ if(newMsg && newMsg != oldMsg){
77
+ jQuery('#wfLiveStatus').hide().html(newMsg).fadeIn(200);
78
+ }
79
+
80
+ if(this.mode == 'scan'){
81
+ if(res.running){
82
+ jQuery('.wfStartScanButton').addClass('button-wf-grey').val("A scan is in progress...").unbind('click').click(function(){ wordfenceAdmin.scanRunningMsg(); }).show();
83
+ } else {
84
+ if(! this.scanPending){
85
+ jQuery('.wfStartScanButton').removeClass('button-wf-grey').val("Start a Wordfence Scan").unbind('click').click(function(){ wordfenceAdmin.startScan(); }).show();
86
+ }
87
+ }
88
+ if(res.currentScanID && res.currentScanID != this.scanIDLoaded){
89
+ this.scanIDLoaded = res.currentScanID;
90
+ this.loadIssues();
91
+ } else if( (! res.currentScanID) && (! this.scanIDLoaded)){
92
+ //We haven't done our first scan yet.
93
+ if(! this.preFirstScanMsgsLoaded){
94
+ this.preFirstScanMsgsLoaded = true;
95
+ jQuery('#wfSummaryTables').html(this.noScanHTML);
96
+ this.switchIssuesTab(jQuery('#wfNewIssuesTab'), 'new');
97
+ jQuery('#wfActivity').html('<p>No events to report yet. Please complete your first scan.</p>');
98
+ }
99
+ }
100
+ } else if(this.mode == 'activity'){
101
+ if(res.alsoGet != 'logList_' + this.activityMode){ return; } //user switched panels since ajax request started
102
+ if(/^(?:topScanners|topLeechers)$/.test(this.activityMode)){
103
+ if(statusMsgChanged){ this.updateTicker(); } return;
104
+ }
105
+ if(res.events.length > 0){
106
+ this.newestActivityTime = res.events[0]['ctime'];
107
+ }
108
+ var haveEvents = false;
109
+ if(jQuery('#wfActivity_' + this.activityMode + ' .wfActEvent').length > 0){
110
+ haveEvents = true;
111
+ }
112
+ if(res.events.length > 0){
113
+ if(! haveEvents){
114
+ jQuery('#wfActivity_' + this.activityMode).empty();
115
+ }
116
+ for(i = res.events.length - 1; i >= 0; i--){
117
+ var elemID = '#wfActEvent_' + res.events[i].id;
118
+ if(jQuery(elemID).length < 1){
119
+ res.events[i]['activityMode'] = this.activityMode;
120
+ var newElem;
121
+ if(this.activityMode == 'loginLogout'){
122
+ newElem = jQuery('#wfLoginLogoutEventTmpl').tmpl(res.events[i]);
123
+ } else {
124
+ newElem = jQuery('#wfHitsEventTmpl').tmpl(res.events[i]);
125
+ }
126
+ jQuery(newElem).find('.wfTimeAgo').data('wfctime', res.events[i].ctime);
127
+ newElem.prependTo('#wfActivity_' + this.activityMode).fadeIn();
128
+ }
129
+ }
130
+ this.reverseLookupIPs();
131
+ } else {
132
+ if(! haveEvents){
133
+ jQuery('#wfActivity_' + this.activityMode).html('<div>No events to report yet.</div>');
134
+ }
135
+ }
136
+ var self = this;
137
+ jQuery('.wfTimeAgo').each(function(idx, elem){
138
+ jQuery(elem).html(self.makeTimeAgo(res.serverTime - jQuery(elem).data('wfctime')) + ' ago');
139
+ });
140
+ }
141
+ if(statusMsgChanged){ this.updateTicker(); } return;
142
+ },
143
+ reverseLookupIPs: function(){
144
+ var ips = [];
145
+ jQuery('.wfReverseLookup').each(function(idx, elem){
146
+ var txt = jQuery(elem).text();
147
+ if(/^\d+\.\d+\.\d+\.\d+$/.test(txt) && (! jQuery(elem).data('wfReverseDone'))){
148
+ jQuery(elem).data('wfReverseDone', true);
149
+ ips.push(jQuery(elem).text());
150
+ }
151
+ });
152
+ if(ips.length < 1){ return; }
153
+ var uni = {};
154
+ var uniqueIPs = [];
155
+ for(var i = 0; i < ips.length; i++){
156
+ if(! uni[ips[i]]){
157
+ uni[ips[i]] = true;
158
+ uniqueIPs.push(ips[i]);
159
+ }
160
+ }
161
+ this.ajax('wordfence_reverseLookup', {
162
+ ips: uniqueIPs.join(',')
163
+ },
164
+ function(res){
165
+ if(res.ok){
166
+ jQuery('.wfReverseLookup').each(function(idx, elem){
167
+ var txt = jQuery(elem).text();
168
+ for(ip in res.ips){
169
+ if(txt == ip){
170
+ if(res.ips[ip]){
171
+ jQuery(elem).html('<strong>Hostname:</strong>&nbsp;' + res.ips[ip]);
172
+ } else {
173
+ jQuery(elem).html('');
174
+ }
175
+ }
176
+ }
177
+ });
178
+ }
179
+ }
180
+ );
181
+ },
182
+ activateWF: function(key){
183
+ jQuery('.wfAjax24').show();
184
+ this.ajax('wordfence_activate', {
185
+ key: key
186
+ },
187
+ function(res){
188
+ jQuery('.wfAjax24').hide();
189
+ if(res.ok){
190
+ window.location = "admin.php?page=Wordfence&wfAct=" + Math.floor(Math.random()*999999999);
191
+ return;
192
+ } else if(res.errorAlert){
193
+ jQuery.colorbox({ width: '400px', html:
194
+ "<h3>An error occured:</h3><p>" + res.errorAlert + "</p>"
195
+ });
196
+ }
197
+
198
+ });
199
+ },
200
+ startScan: function(){
201
+ var self = this;
202
+ jQuery('.wfStartScanButton').addClass('button-wf-grey').val("A scan is in progress...").unbind('click').click(function(){ wordfenceAdmin.scanRunningMsg(); }).show();
203
+ //scanPending prevents the button from switching to grey when clicked and then quickly to blue and grey again as the ticker us updated.
204
+ this.scanPending = true;
205
+ var self = this;
206
+ setTimeout(function(){ self.scanPending = false; }, 10000);
207
+ this.ajax('wordfence_scan', {}, function(res){ } );
208
+ },
209
+ loadIssues: function(callback){
210
+ if(this.mode != 'scan'){
211
+ return;
212
+ }
213
+ var self = this;
214
+ this.ajax('wordfence_loadIssues', { }, function(res){
215
+ self.displayIssues(res, callback);
216
+ });
217
+ },
218
+ sev2num: function(str){
219
+ if(/wfProbSev1/.test(str)){
220
+ return 1;
221
+ } else if(/wfProbSev2/.test(str)){
222
+ return 2;
223
+ } else {
224
+ return 0;
225
+ }
226
+ },
227
+ displayIssues: function(res, callback){
228
+ var self = this;
229
+ res.summary['lastScanCompleted'] = res['lastScanCompleted'];
230
+ jQuery('#wfSummaryTables').html( jQuery('#wfScanSummaryTmpl').tmpl(res.summary).html() );
231
+ jQuery('.wfIssuesContainer').hide();
232
+ for(issueStatus in res.issuesLists){
233
+ var containerID = 'wfIssues_dataTable_' + issueStatus;
234
+ var tableID = 'wfIssuesTable_' + issueStatus;
235
+ if(jQuery('#' + containerID).length < 1){
236
+ //Invalid issue status
237
+ continue;
238
+ }
239
+ if(res.issuesLists[issueStatus].length < 1){
240
+ if(issueStatus == 'new'){
241
+ if(res.lastScanCompleted == 'ok'){
242
+ jQuery('#' + containerID).html('<p style="font-size: 20px; color: #0A0;">Congratulations! You have no security issues on your site.</p>');
243
+ } else if(res['lastScanCompleted']){
244
+ //jQuery('#' + containerID).html('<p style="font-size: 12px; color: #A00;">The latest scan failed: ' + res.lastScanCompleted + '</p>');
245
+ } else {
246
+ jQuery('#' + containerID).html();
247
+ }
248
+
249
+ } else {
250
+ jQuery('#' + containerID).html('<p>There are currently <strong>no issues</strong> being ignored on this site.</p>');
251
+ }
252
+ continue;
253
+ }
254
+ jQuery('#' + containerID).html('<table cellpadding="0" cellspacing="0" border="0" class="display" id="' + tableID + '"></table>');
255
+
256
+ jQuery.fn.dataTableExt.oSort['severity-asc'] = function(y,x){ x = WFAD.sev2num(x); y = WFAD.sev2num(y); if(x < y){ return 1; } if(x > y){ return -1; } return 0; };
257
+ jQuery.fn.dataTableExt.oSort['severity-desc'] = function(y,x){ x = WFAD.sev2num(x); y = WFAD.sev2num(y); if(x > y){ return 1; } if(x < y){ return -1; } return 0; };
258
+
259
+ jQuery('#' + tableID).dataTable({
260
+ "bFilter": false,
261
+ "bInfo": false,
262
+ "bPaginate": false,
263
+ "bLengthChange": false,
264
+ "bAutoWidth": false,
265
+ "aaData": res.issuesLists[issueStatus],
266
+ "aoColumns": [
267
+ {
268
+ "sTitle": '<div class="th_wrapp">Severity</div>',
269
+ "sWidth": '128px',
270
+ "sClass": "center",
271
+ "sType": 'severity',
272
+ "fnRender": function(obj) {
273
+ var cls = "";
274
+ cls = 'wfProbSev' + obj.aData.severity;
275
+ return '<span class="' + cls + '"></span>';
276
+ }
277
+ },
278
+ {
279
+ "sTitle": '<div class="th_wrapp">Issue</div>',
280
+ "bSortable": false,
281
+ "sWidth": '400px',
282
+ "sType": 'html',
283
+ fnRender: function(obj){
284
+ var tmplName = 'issueTmpl_' + obj.aData.type;
285
+ return jQuery('#' + tmplName).tmpl(obj.aData).html();
286
+ }
287
+ }
288
+ ]
289
+ });
290
+ }
291
+ if(callback){
292
+ jQuery('#wfIssues_' + this.visibleIssuesPanel).fadeIn(500, function(){ callback(); });
293
+ } else {
294
+ jQuery('#wfIssues_' + this.visibleIssuesPanel).fadeIn(500);
295
+ }
296
+ return true;
297
+ },
298
+ ajax: function(action, data, cb, cbErr){
299
+ if(typeof(data) == 'string'){
300
+ if(data.length > 0){
301
+ data += '&';
302
+ }
303
+ data += 'action=' + action + '&nonce=' + this.nonce;
304
+ } else if(typeof(data) == 'object'){
305
+ data['action'] = action;
306
+ data['nonce'] = this.nonce;
307
+ }
308
+ if(! cbErr){
309
+ cbErr = function(){};
310
+ }
311
+ var self = this;
312
+ jQuery.ajax({
313
+ type: 'POST',
314
+ url: WordfenceAdminVars.ajaxURL,
315
+ dataType: "json",
316
+ data: data,
317
+ success: function(json){
318
+ if(json && json.nonce){
319
+ self.nonce = json.nonce;
320
+ }
321
+ if(json && json.errorMsg){
322
+ self.colorbox('400px', 'An error occured', json.errorMsg);
323
+ }
324
+ cb(json);
325
+ },
326
+ error: cbErr
327
+ });
328
+ },
329
+ colorbox: function(width, heading, body){
330
+ this.colorboxQueue.push([width, heading, body]);
331
+ this.colorboxServiceQueue();
332
+ },
333
+ colorboxServiceQueue: function(){
334
+ if(this.colorboxIsOpen){ return; }
335
+ if(this.colorboxQueue.length < 1){ return; }
336
+ var elem = this.colorboxQueue.shift();
337
+ this.colorboxOpen(elem[0], elem[1], elem[2]);
338
+ },
339
+ colorboxOpen: function(width, heading, body){
340
+ this.colorboxIsOpen = true;
341
+ jQuery.colorbox({ width: width, html: "<h3>" + heading + "</h3><p>" + body + "</p>"});
342
+ },
343
+ scanRunningMsg: function(){ this.colorbox('400px', "A scan is running", "A scan is currently in progress. Please wait until it finishes before starting another scan."); },
344
+ errorMsg: function(msg){ this.colorbox('400px', "An error occured:", msg); },
345
+ deleteFile: function(issueID){
346
+ var self = this;
347
+ this.ajax('wordfence_deleteFile', {
348
+ issueID: issueID
349
+ }, function(res){ self.doneDeleteFile(res); });
350
+ },
351
+ doneDeleteFile: function(res){
352
+ if(res.ok){
353
+ var self = this;
354
+ this.loadIssues(function(){ self.colorbox('400px', "Success deleting file", "The file " + res.file + " containing " + res.filesize + " bytes was successfully deleted."); });
355
+ } else if(res.errorMsg){
356
+ this.loadIssues();
357
+ }
358
+ },
359
+ restoreFile: function(issueID){
360
+ var self = this;
361
+ this.ajax('wordfence_restoreFile', {
362
+ issueID: issueID
363
+ }, function(res){ self.doneRestoreFile(res); });
364
+ },
365
+ doneRestoreFile: function(res){
366
+ this.loadIssues();
367
+ if(res.ok){
368
+ this.colorbox("400px", "File restored OK", "The file " + res.file + " was restored succesfully.");
369
+ }
370
+ },
371
+ deleteIssue: function(id){
372
+ var self = this;
373
+ this.ajax('wordfence_deleteIssue', { id: id }, function(res){
374
+ self.loadIssues();
375
+ if(res.errMsg){
376
+ self.colorbox('400px', "An error occured", res.errMsg);
377
+ }
378
+ });
379
+ },
380
+ updateIssueStatus: function(id, st){
381
+ var self = this;
382
+ this.ajax('wordfence_updateIssueStatus', { id: id, 'status': st }, function(res){
383
+ self.loadIssues();
384
+ if(res.errMsg){
385
+ self.colorbox('400px', "An error occured", res.errMsg);
386
+ }
387
+ });
388
+ },
389
+ updateAllIssues: function(op){ // deleteIgnored, deleteNew, ignoreAllNew
390
+ var head = "Please confirm";
391
+ if(op == 'deleteIgnored'){
392
+ body = "You have chosen to remove all ignored issues. Once these issues are removed they will be re-scanned by Wordfence and if they have not been fixed, they will appear in the 'new issues' list. Are you sure you want to do this?";
393
+ } else if(op == 'deleteNew'){
394
+ body = "You have chosen to mark all new issues as fixed. If you have not really fixed these issues, they will reappear in the new issues list on the next scan. If you have not fixed them and want them excluded from scans you should choose to 'ignore' them instead. Are you sure you want to mark all new issues as fixed?";
395
+ } else if(op == 'ignoreAllNew'){
396
+ body = "You have chosen to ignore all new issues. That means they will be excluded from future scans. You should only do this if you're sure all new issues are not a problem. Are you sure you want to ignore all new issues?";
397
+ } else {
398
+ return;
399
+ }
400
+ this.colorbox('450px', head, body + '<br /><br /><center><input type="button" name="but1" value="Cancel" onclick="jQuery.colorbox.close();" />&nbsp;&nbsp;&nbsp;<input type="button" name="but2" value="Yes I\'m sure" onclick="jQuery.colorbox.close(); WFAD.confirmUpdateAllIssues(\'' + op + '\');" /><br />');
401
+ },
402
+ confirmUpdateAllIssues: function(op){
403
+ var self = this;
404
+ this.ajax('wordfence_updateAllIssues', { op: op }, function(res){ self.loadIssues(); });
405
+ },
406
+ es: function(val){
407
+ if(val){
408
+ return val;
409
+ } else {
410
+ return "";
411
+ }
412
+ },
413
+ noQuotes: function(str){
414
+ return str.replace(/"/g,'&#34;').replace(/\'/g, '&#145;');
415
+ },
416
+ commify: function(num){
417
+ return ("" + num).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
418
+ },
419
+ switchToLiveTab: function(elem){
420
+ jQuery('.wfTab1').removeClass('selected');
421
+ jQuery(elem).addClass('selected');
422
+ jQuery('.wfDataPanel').hide();
423
+ var self = this;
424
+ jQuery('#wfActivity').fadeIn(function(){ self.completeLiveTabSwitch(); });
425
+ },
426
+ completeLiveTabSwitch: function(){
427
+ this.ajax('wordfence_loadActivityLog', {}, function(res){
428
+ var html = '<a href="#" class="wfALogMailLink" onclick="WFAD.emailActivityLog(); return false;"></a><a href="#" class="wfALogReloadLink" onclick="WFAD.reloadActivityData(); return false;"></a>';
429
+ if(res.events && res.events.length > 0){
430
+ jQuery('#wfActivity').empty();
431
+ for(var i = 0; i < res.events.length; i++){
432
+ var timeTaken = '0.0000';
433
+ if(res.events[i + 1]){
434
+ timeTaken = (res.events[i].ctime - res.events[i + 1].ctime).toFixed(4);
435
+ }
436
+ var red = "";
437
+ if(res.events[i].type == 'error'){
438
+ red = ' class="wfWarn" ';
439
+ }
440
+ html += '<div ' + red + 'class="wfALogEntry"><span ' + red + 'class="wfALogTime">[' + res.events[i].type + '&nbsp;:&nbsp;' + timeTaken + '&nbsp;:&nbsp;' + res.events[i].timeAgo + ' ago]</span>&nbsp;' + res.events[i].msg + "</div>";
441
+ }
442
+ jQuery('#wfActivity').html(html);
443
+ } else {
444
+ jQuery('#wfActivity').html("<p>&nbsp;&nbsp;No activity to report yet. Please complete your first scan.</p>");
445
+ }
446
+ });
447
+ },
448
+ emailActivityLog: function(){
449
+ this.colorbox('400px', 'Email Wordfence Activity Log', "Enter the email address you would like to send the Wordfence activity log to. Note that the activity log may contain thousands of lines of data. This log is usually only sent to a member of the Wordfence support team.<br /><br /><input type='text' size='20' id='wfALogRecip' /><input type='button' value='Send' onclick=\"WFAD.completeEmailActivityLog();\" /><input type='button' value='Cancel' onclick='jQuery.colorbox.close();' /><br /><br />");
450
+ },
451
+ completeEmailActivityLog: function(){
452
+ jQuery.colorbox.close();
453
+ var email = jQuery('#wfALogRecip').val();
454
+ if(! /^[^@]+@[^@]+$/.test(email)){
455
+ alert("Please enter a valid email address.");
456
+ return;
457
+ }
458
+ var self = this;
459
+ this.ajax('wordfence_sendActivityLog', { email: jQuery('#wfALogRecip').val() }, function(res){
460
+ if(res.ok){
461
+ self.colorbox('400px', 'Activity Log Sent', "Your Wordfence activity log was sent to " + email + "<br /><br /><input type='button' value='Close' onclick='jQuery.colorbox.close();' /><br /><br />");
462
+ }
463
+ });
464
+ },
465
+ reloadActivityData: function(){
466
+ jQuery('#wfActivity').html('<div class="wfLoadingWhite32"></div>'); //&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />
467
+ this.completeLiveTabSwitch();
468
+ },
469
+ switchToSummaryTab: function(elem){
470
+ jQuery('.wfTab1').removeClass('selected');
471
+ jQuery(elem).addClass('selected');
472
+ jQuery('.wfDataPanel').hide();
473
+ jQuery('#wfSummaryTables').fadeIn();
474
+ },
475
+ switchIssuesTab: function(elem, type){
476
+ jQuery('.wfTab2').removeClass('selected');
477
+ jQuery('.wfIssuesContainer').hide();
478
+ jQuery(elem).addClass('selected');
479
+ this.visibleIssuesPanel = type;
480
+ jQuery('#wfIssues_' + type).fadeIn();
481
+ },
482
+ switchTab: function(tabElement, tabClass, contentClass, selectedContentID, callback){
483
+ jQuery('.' + tabClass).removeClass('selected');
484
+ jQuery(tabElement).addClass('selected');
485
+ jQuery('.' + contentClass).hide().html('<div class="wfLoadingWhite32"></div>');
486
+ var func = function(){};
487
+ if(callback){
488
+ func = function(){ callback(); };
489
+ }
490
+ jQuery('#' + selectedContentID).fadeIn(func);
491
+ },
492
+ activityTabChanged: function(){
493
+ var mode = jQuery('.wfDataPanel:visible')[0].id.replace('wfActivity_','');
494
+ if(! mode){ return; }
495
+ this.activityMode = mode;
496
+ this.reloadActivities();
497
+ },
498
+ reloadActivities: function(){
499
+ jQuery('#wfActivity_' + this.activityMode).html('<div class="wfLoadingWhite32"></div>');
500
+ this.newestActivityTime = 0;
501
+ this.updateTicker();
502
+ },
503
+ staticTabChanged: function(){
504
+ var mode = jQuery('.wfDataPanel:visible')[0].id.replace('wfActivity_','');
505
+ if(! mode){ return; }
506
+ this.activityMode = mode;
507
+
508
+ var self = this;
509
+ this.ajax('wordfence_loadStaticPanel', {
510
+ mode: this.activityMode
511
+ }, function(res){
512
+ self.completeLoadStaticPanel(res);
513
+ });
514
+ },
515
+ completeLoadStaticPanel: function(res){
516
+ var contentElem = '#wfActivity_' + this.activityMode;
517
+ jQuery(contentElem).empty();
518
+ if(res.results && res.results.length > 0){
519
+ var tmpl;
520
+ if(this.activityMode == 'topScanners' || this.activityMode == 'topLeechers'){
521
+ tmpl = '#wfLeechersTmpl';
522
+ } else if(this.activityMode == 'blockedIPs'){
523
+ tmpl = '#wfBlockedIPsTmpl';
524
+ } else if(this.activityMode == 'lockedOutIPs'){
525
+ tmpl = '#wfLockedOutIPsTmpl';
526
+ } else if(this.activityMode == 'throttledIPs'){
527
+ tmpl = '#wfThrottledIPsTmpl';
528
+ } else { return; }
529
+ jQuery(tmpl).tmpl(res).prependTo(contentElem);
530
+ this.reverseLookupIPs();
531
+ } else {
532
+ if(this.activityMode == 'topScanners' || this.activityMode == 'topLeechers'){
533
+ jQuery(contentElem).html("No site hits have been logged yet. Check back soon.");
534
+ } else if(this.activityMode == 'blockedIPs'){
535
+ jQuery(contentElem).html("No IP addresses have been blocked yet. If you manually block an IP address or if Wordfence automatically blocks one, it will appear here.");
536
+ } else if(this.activityMode == 'lockedOutIPs'){
537
+ jQuery(contentElem).html("No IP addresses have been locked out from signing in or using the password recovery system.");
538
+ } else if(this.activityMode == 'throttledIPs'){
539
+ jQuery(contentElem).html("No IP addresses have been throttled yet. If an IP address accesses the site too quickly and breaks one of the Wordfence rules, it will appear here.");
540
+ } else { return; }
541
+ }
542
+ },
543
+ ucfirst: function(str){
544
+ str = "" + str;
545
+ return str.charAt(0).toUpperCase() + str.slice(1);
546
+ },
547
+ makeIPTrafLink: function(IP){
548
+ return '/?_wfsf=IPTraf&nonce=' + this.nonce + '&IP=' + encodeURIComponent(IP);
549
+ },
550
+ makeDiffLink: function(dat){
551
+ return '/?_wfsf=diff&nonce=' + this.nonce +
552
+ '&file=' + encodeURIComponent(this.es(dat['file'])) +
553
+ '&cType=' + encodeURIComponent(this.es(dat['cType'])) +
554
+ '&cKey=' + encodeURIComponent(this.es(dat['cKey'])) +
555
+ '&cName=' + encodeURIComponent(this.es(dat['cName'])) +
556
+ '&cVersion=' + encodeURIComponent(this.es(dat['cVersion']));
557
+ },
558
+ makeTimeAgo: function(t){
559
+ var months = Math.floor(t / (86400 * 30));
560
+ var days = Math.floor(t / 86400);
561
+ var hours = Math.floor(t / 3600);
562
+ var minutes = Math.floor(t / 60);
563
+ if(months > 0){
564
+ days -= months * 30;
565
+ return this.pluralize(months, 'month', days, 'day');
566
+ } else if(days > 0){
567
+ hours -= days * 24;
568
+ return this.pluralize(days, 'day', hours, 'hour');
569
+ } else if(hours > 0) {
570
+ minutes -= hours * 60;
571
+ return this.pluralize(hours, 'hour', minutes, 'min');
572
+ } else if(minutes > 0) {
573
+ //t -= minutes * 60;
574
+ return this.pluralize(minutes, 'minute');
575
+ } else {
576
+ return Math.round(t) + " seconds";
577
+ }
578
+ },
579
+ pluralize: function(m1, t1, m2, t2){
580
+ if(m1 != 1) {
581
+ t1 = t1 + 's';
582
+ }
583
+ if(m2 != 1) {
584
+ t2 = t2 + 's';
585
+ }
586
+ if(m1 && m2){
587
+ return m1 + ' ' + t1 + ' ' + m2 + ' ' + t2;
588
+ } else {
589
+ return m1 + ' ' + t1;
590
+ }
591
+ },
592
+ blockIP: function(IP, reason){
593
+ var self = this;
594
+ this.ajax('wordfence_blockIP', {
595
+ IP: IP,
596
+ reason: reason
597
+ }, function(res){
598
+ if(res.errorMsg){
599
+ return;
600
+ } else {
601
+ self.reloadActivities();
602
+ }
603
+ });
604
+ },
605
+ unlockOutIP: function(IP){
606
+ var self = this;
607
+ this.ajax('wordfence_unlockOutIP', {
608
+ IP: IP
609
+ }, function(res){ self.staticTabChanged(); });
610
+ },
611
+ unblockIP: function(IP){
612
+ var self = this;
613
+ this.ajax('wordfence_unblockIP', {
614
+ IP: IP
615
+ }, function(res){ self.staticTabChanged(); });
616
+ },
617
+ makeElemID: function(){
618
+ return 'wfElemGen' + this.elementGeneratorIter++;
619
+ },
620
+ pulse: function(sel){
621
+ jQuery(sel).fadeIn(function(){
622
+ setTimeout(function(){ jQuery(sel).fadeOut(); }, 2000);
623
+ });
624
+ },
625
+ saveConfig: function(){
626
+ var qstr = jQuery('#wfConfigForm').serialize();
627
+ var self = this;
628
+ jQuery('.wfSavedMsg').hide();
629
+ jQuery('.wfAjax24').show();
630
+ this.ajax('wordfence_saveConfig', qstr, function(res){
631
+ jQuery('.wfAjax24').hide();
632
+ if(res.ok){
633
+ if(WFAD.reloadConfigPage){
634
+ self.colorbox('400px', "Please reload this page", "You selected a config option that changes the Wordfence menu on the left. Click the button below to reload this page to update the menu.<br /><br /><center><input type='button' name='wfReload' value='Reload page' onclick='window.location.reload();' /></center>");
635
+ return;
636
+ } else {
637
+ self.pulse('.wfSavedMsg');
638
+ }
639
+ } else if(res.errorMsg){
640
+ return;
641
+ } else {
642
+ self.colorbox('400px', 'An error occured', 'We encountered an error trying to save your changes.');
643
+ }
644
+ });
645
+ },
646
+ changeSecurityLevel: function(){
647
+ var level = jQuery('#securityLevel').val();
648
+ for(var k in WFSLevels[level].checkboxes){
649
+ if(k != 'liveTraf_ignorePublishers'){
650
+ jQuery('#' + k).prop("checked", WFSLevels[level].checkboxes[k]);
651
+ }
652
+ }
653
+ for(var k in WFSLevels[level].otherParams){
654
+ if(! /^(?:apiKey|securityLevel|alertEmails|liveTraf_ignoreUsers|liveTraf_ignoreIPs|liveTraf_ignoreUA|liveTraf_hitsMaxSize)$/.test(k)){
655
+ jQuery('#' + k).val(WFSLevels[level].otherParams[k]);
656
+ }
657
+ }
658
+ },
659
+ clearAllBlocked: function(op){
660
+ if(op == 'blocked'){
661
+ body = "Are you sure you want to clear all blocked IP addresses and allow visitors from those addresses to access the site again?";
662
+ } else if(op == 'locked'){
663
+ body = "Are you sure you want to clear all locked IP addresses and allow visitors from those addresses to sign in again?";
664
+ } else {
665
+ return;
666
+ }
667
+ this.colorbox('450px', "Please confirm", body +
668
+ '<br /><br /><center><input type="button" name="but1" value="Cancel" onclick="jQuery.colorbox.close();" />&nbsp;&nbsp;&nbsp;' +
669
+ '<input type="button" name="but2" value="Yes I\'m sure" onclick="jQuery.colorbox.close(); WFAD.confirmClearAllBlocked(\'' + op + '\');"><br />');
670
+ },
671
+ confirmClearAllBlocked: function(op){
672
+ var self = this;
673
+ this.ajax('wordfence_clearAllBlocked', { op: op }, function(res){
674
+ self.staticTabChanged();
675
+ });
676
+ }
677
+ };
678
+ window['WFAD'] = window['wordfenceAdmin'];
679
+ }
680
+ jQuery(function(){
681
+ wordfenceAdmin.init();
682
+ });
js/jquery.colorbox-min.js ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ // ColorBox v1.3.19 - jQuery lightbox plugin
2
+ // (c) 2011 Jack Moore - jacklmoore.com
3
+ // License: http://www.opensource.org/licenses/mit-license.php
4
+ (function(a,b,c){function Z(c,d,e){var g=b.createElement(c);return d&&(g.id=f+d),e&&(g.style.cssText=e),a(g)}function $(a){var b=y.length,c=(Q+a)%b;return c<0?b+c:c}function _(a,b){return Math.round((/%/.test(a)?(b==="x"?z.width():z.height())/100:1)*parseInt(a,10))}function ba(a){return K.photo||/\.(gif|png|jpe?g|bmp|ico)((#|\?).*)?$/i.test(a)}function bb(){var b;K=a.extend({},a.data(P,e));for(b in K)a.isFunction(K[b])&&b.slice(0,2)!=="on"&&(K[b]=K[b].call(P));K.rel=K.rel||P.rel||"nofollow",K.href=K.href||a(P).attr("href"),K.title=K.title||P.title,typeof K.href=="string"&&(K.href=a.trim(K.href))}function bc(b,c){a.event.trigger(b),c&&c.call(P)}function bd(){var a,b=f+"Slideshow_",c="click."+f,d,e,g;K.slideshow&&y[1]?(d=function(){F.text(K.slideshowStop).unbind(c).bind(j,function(){if(K.loop||y[Q+1])a=setTimeout(W.next,K.slideshowSpeed)}).bind(i,function(){clearTimeout(a)}).one(c+" "+k,e),r.removeClass(b+"off").addClass(b+"on"),a=setTimeout(W.next,K.slideshowSpeed)},e=function(){clearTimeout(a),F.text(K.slideshowStart).unbind([j,i,k,c].join(" ")).one(c,function(){W.next(),d()}),r.removeClass(b+"on").addClass(b+"off")},K.slideshowAuto?d():e()):r.removeClass(b+"off "+b+"on")}function be(b){U||(P=b,bb(),y=a(P),Q=0,K.rel!=="nofollow"&&(y=a("."+g).filter(function(){var b=a.data(this,e).rel||this.rel;return b===K.rel}),Q=y.index(P),Q===-1&&(y=y.add(P),Q=y.length-1)),S||(S=T=!0,r.show(),K.returnFocus&&a(P).blur().one(l,function(){a(this).focus()}),q.css({opacity:+K.opacity,cursor:K.overlayClose?"pointer":"auto"}).show(),K.w=_(K.initialWidth,"x"),K.h=_(K.initialHeight,"y"),W.position(),o&&z.bind("resize."+p+" scroll."+p,function(){q.css({width:z.width(),height:z.height(),top:z.scrollTop(),left:z.scrollLeft()})}).trigger("resize."+p),bc(h,K.onOpen),J.add(D).hide(),I.html(K.close).show()),W.load(!0))}function bf(){!r&&b.body&&(Y=!1,z=a(c),r=Z(X).attr({id:e,"class":n?f+(o?"IE6":"IE"):""}).hide(),q=Z(X,"Overlay",o?"position:absolute":"").hide(),s=Z(X,"Wrapper"),t=Z(X,"Content").append(A=Z(X,"LoadedContent","width:0; height:0; overflow:hidden"),C=Z(X,"LoadingOverlay").add(Z(X,"LoadingGraphic")),D=Z(X,"Title"),E=Z(X,"Current"),G=Z(X,"Next"),H=Z(X,"Previous"),F=Z(X,"Slideshow").bind(h,bd),I=Z(X,"Close")),s.append(Z(X).append(Z(X,"TopLeft"),u=Z(X,"TopCenter"),Z(X,"TopRight")),Z(X,!1,"clear:left").append(v=Z(X,"MiddleLeft"),t,w=Z(X,"MiddleRight")),Z(X,!1,"clear:left").append(Z(X,"BottomLeft"),x=Z(X,"BottomCenter"),Z(X,"BottomRight"))).find("div div").css({"float":"left"}),B=Z(X,!1,"position:absolute; width:9999px; visibility:hidden; display:none"),J=G.add(H).add(E).add(F),a(b.body).append(q,r.append(s,B)))}function bg(){return r?(Y||(Y=!0,L=u.height()+x.height()+t.outerHeight(!0)-t.height(),M=v.width()+w.width()+t.outerWidth(!0)-t.width(),N=A.outerHeight(!0),O=A.outerWidth(!0),r.css({"padding-bottom":L,"padding-right":M}),G.click(function(){W.next()}),H.click(function(){W.prev()}),I.click(function(){W.close()}),q.click(function(){K.overlayClose&&W.close()}),a(b).bind("keydown."+f,function(a){var b=a.keyCode;S&&K.escKey&&b===27&&(a.preventDefault(),W.close()),S&&K.arrowKey&&y[1]&&(b===37?(a.preventDefault(),H.click()):b===39&&(a.preventDefault(),G.click()))}),a("."+g,b).live("click",function(a){a.which>1||a.shiftKey||a.altKey||a.metaKey||(a.preventDefault(),be(this))})),!0):!1}var d={transition:"elastic",speed:300,width:!1,initialWidth:"600",innerWidth:!1,maxWidth:!1,height:!1,initialHeight:"450",innerHeight:!1,maxHeight:!1,scalePhotos:!0,scrolling:!0,inline:!1,html:!1,iframe:!1,fastIframe:!0,photo:!1,href:!1,title:!1,rel:!1,opacity:.9,preloading:!0,current:"image {current} of {total}",previous:"previous",next:"next",close:"close",open:!1,returnFocus:!0,reposition:!0,loop:!0,slideshow:!1,slideshowAuto:!0,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",onOpen:!1,onLoad:!1,onComplete:!1,onCleanup:!1,onClosed:!1,overlayClose:!0,escKey:!0,arrowKey:!0,top:!1,bottom:!1,left:!1,right:!1,fixed:!1,data:undefined},e="colorbox",f="cbox",g=f+"Element",h=f+"_open",i=f+"_load",j=f+"_complete",k=f+"_cleanup",l=f+"_closed",m=f+"_purge",n=!a.support.opacity&&!a.support.style,o=n&&!c.XMLHttpRequest,p=f+"_IE6",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="div",Y;if(a.colorbox)return;a(bf),W=a.fn[e]=a[e]=function(b,c){var f=this;b=b||{},bf();if(bg()){if(!f[0]){if(f.selector)return f;f=a("<a/>"),b.open=!0}c&&(b.onComplete=c),f.each(function(){a.data(this,e,a.extend({},a.data(this,e)||d,b))}).addClass(g),(a.isFunction(b.open)&&b.open.call(f)||b.open)&&be(f[0])}return f},W.position=function(a,b){function i(a){u[0].style.width=x[0].style.width=t[0].style.width=a.style.width,t[0].style.height=v[0].style.height=w[0].style.height=a.style.height}var c=0,d=0,e=r.offset(),g=z.scrollTop(),h=z.scrollLeft();z.unbind("resize."+f),r.css({top:-9e4,left:-9e4}),K.fixed&&!o?(e.top-=g,e.left-=h,r.css({position:"fixed"})):(c=g,d=h,r.css({position:"absolute"})),K.right!==!1?d+=Math.max(z.width()-K.w-O-M-_(K.right,"x"),0):K.left!==!1?d+=_(K.left,"x"):d+=Math.round(Math.max(z.width()-K.w-O-M,0)/2),K.bottom!==!1?c+=Math.max(z.height()-K.h-N-L-_(K.bottom,"y"),0):K.top!==!1?c+=_(K.top,"y"):c+=Math.round(Math.max(z.height()-K.h-N-L,0)/2),r.css({top:e.top,left:e.left}),a=r.width()===K.w+O&&r.height()===K.h+N?0:a||0,s[0].style.width=s[0].style.height="9999px",r.dequeue().animate({width:K.w+O,height:K.h+N,top:c,left:d},{duration:a,complete:function(){i(this),T=!1,s[0].style.width=K.w+O+M+"px",s[0].style.height=K.h+N+L+"px",K.reposition&&setTimeout(function(){z.bind("resize."+f,W.position)},1),b&&b()},step:function(){i(this)}})},W.resize=function(a){S&&(a=a||{},a.width&&(K.w=_(a.width,"x")-O-M),a.innerWidth&&(K.w=_(a.innerWidth,"x")),A.css({width:K.w}),a.height&&(K.h=_(a.height,"y")-N-L),a.innerHeight&&(K.h=_(a.innerHeight,"y")),!a.innerHeight&&!a.height&&(A.css({height:"auto"}),K.h=A.height()),A.css({height:K.h}),W.position(K.transition==="none"?0:K.speed))},W.prep=function(b){function g(){return K.w=K.w||A.width(),K.w=K.mw&&K.mw<K.w?K.mw:K.w,K.w}function h(){return K.h=K.h||A.height(),K.h=K.mh&&K.mh<K.h?K.mh:K.h,K.h}if(!S)return;var c,d=K.transition==="none"?0:K.speed;A.remove(),A=Z(X,"LoadedContent").append(b),A.hide().appendTo(B.show()).css({width:g(),overflow:K.scrolling?"auto":"hidden"}).css({height:h()}).prependTo(t),B.hide(),a(R).css({"float":"none"}),o&&a("select").not(r.find("select")).filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one(k,function(){this.style.visibility="inherit"}),c=function(){function q(){n&&r[0].style.removeAttribute("filter")}var b,c,g=y.length,h,i="frameBorder",k="allowTransparency",l,o,p;if(!S)return;l=function(){clearTimeout(V),C.hide(),bc(j,K.onComplete)},n&&R&&A.fadeIn(100),D.html(K.title).add(A).show();if(g>1){typeof K.current=="string"&&E.html(K.current.replace("{current}",Q+1).replace("{total}",g)).show(),G[K.loop||Q<g-1?"show":"hide"]().html(K.next),H[K.loop||Q?"show":"hide"]().html(K.previous),K.slideshow&&F.show();if(K.preloading){b=[$(-1),$(1)];while(c=y[b.pop()])o=a.data(c,e).href||c.href,a.isFunction(o)&&(o=o.call(c)),ba(o)&&(p=new Image,p.src=o)}}else J.hide();K.iframe?(h=Z("iframe")[0],i in h&&(h[i]=0),k in h&&(h[k]="true"),h.name=f+ +(new Date),K.fastIframe?l():a(h).one("load",l),h.src=K.href,K.scrolling||(h.scrolling="no"),a(h).addClass(f+"Iframe").appendTo(A).one(m,function(){h.src="//about:blank"})):l(),K.transition==="fade"?r.fadeTo(d,1,q):q()},K.transition==="fade"?r.fadeTo(d,0,function(){W.position(0,c)}):W.position(d,c)},W.load=function(b){var c,d,e=W.prep;T=!0,R=!1,P=y[Q],b||bb(),bc(m),bc(i,K.onLoad),K.h=K.height?_(K.height,"y")-N-L:K.innerHeight&&_(K.innerHeight,"y"),K.w=K.width?_(K.width,"x")-O-M:K.innerWidth&&_(K.innerWidth,"x"),K.mw=K.w,K.mh=K.h,K.maxWidth&&(K.mw=_(K.maxWidth,"x")-O-M,K.mw=K.w&&K.w<K.mw?K.w:K.mw),K.maxHeight&&(K.mh=_(K.maxHeight,"y")-N-L,K.mh=K.h&&K.h<K.mh?K.h:K.mh),c=K.href,V=setTimeout(function(){C.show()},100),K.inline?(Z(X).hide().insertBefore(a(c)[0]).one(m,function(){a(this).replaceWith(A.children())}),e(a(c))):K.iframe?e(" "):K.html?e(K.html):ba(c)?(a(R=new Image).addClass(f+"Photo").error(function(){K.title=!1,e(Z(X,"Error").text("This image could not be loaded"))}).load(function(){var a;R.onload=null,K.scalePhotos&&(d=function(){R.height-=R.height*a,R.width-=R.width*a},K.mw&&R.width>K.mw&&(a=(R.width-K.mw)/R.width,d()),K.mh&&R.height>K.mh&&(a=(R.height-K.mh)/R.height,d())),K.h&&(R.style.marginTop=Math.max(K.h-R.height,0)/2+"px"),y[1]&&(K.loop||y[Q+1])&&(R.style.cursor="pointer",R.onclick=function(){W.next()}),n&&(R.style.msInterpolationMode="bicubic"),setTimeout(function(){e(R)},1)}),setTimeout(function(){R.src=c},1)):c&&B.load(c,K.data,function(b,c,d){e(c==="error"?Z(X,"Error").text("Request unsuccessful: "+d.statusText):a(this).contents())})},W.next=function(){!T&&y[1]&&(K.loop||y[Q+1])&&(Q=$(1),W.load())},W.prev=function(){!T&&y[1]&&(K.loop||Q)&&(Q=$(-1),W.load())},W.close=function(){S&&!U&&(U=!0,S=!1,bc(k,K.onCleanup),z.unbind("."+f+" ."+p),q.fadeTo(200,0),r.stop().fadeTo(300,0,function(){r.add(q).css({opacity:1,cursor:"auto"}).hide(),bc(m),A.remove(),setTimeout(function(){U=!1,bc(l,K.onClosed)},1)}))},W.remove=function(){a([]).add(r).add(q).remove(),r=null,a("."+g).removeData(e).removeClass(g).die()},W.element=function(){return a(P)},W.settings=d})(jQuery,document,this);
js/jquery.dataTables.min.js ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * File: jquery.dataTables.min.js
3
+ * Version: 1.8.2
4
+ * Author: Allan Jardine (www.sprymedia.co.uk)
5
+ * Info: www.datatables.net
6
+ *
7
+ * Copyright 2008-2011 Allan Jardine, all rights reserved.
8
+ *
9
+ * This source file is free software, under either the GPL v2 license or a
10
+ * BSD style license, as supplied with this software.
11
+ *
12
+ * This source file is distributed in the hope that it will be useful, but
13
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
15
+ */
16
+ (function(i,za,p){i.fn.dataTableSettings=[];var D=i.fn.dataTableSettings;i.fn.dataTableExt={};var n=i.fn.dataTableExt;n.sVersion="1.8.2";n.sErrMode="alert";n.iApiIndex=0;n.oApi={};n.afnFiltering=[];n.aoFeatures=[];n.ofnSearch={};n.afnSortData=[];n.oStdClasses={sPagePrevEnabled:"paginate_enabled_previous",sPagePrevDisabled:"paginate_disabled_previous",sPageNextEnabled:"paginate_enabled_next",sPageNextDisabled:"paginate_disabled_next",sPageJUINext:"",sPageJUIPrev:"",sPageButton:"paginate_button",sPageButtonActive:"paginate_active",
17
+ sPageButtonStaticDisabled:"paginate_button paginate_button_disabled",sPageFirst:"first",sPagePrevious:"previous",sPageNext:"next",sPageLast:"last",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",
18
+ sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sFooterTH:""};n.oJUIClasses={sPagePrevEnabled:"fg-button ui-button ui-state-default ui-corner-left",
19
+ sPagePrevDisabled:"fg-button ui-button ui-state-default ui-corner-left ui-state-disabled",sPageNextEnabled:"fg-button ui-button ui-state-default ui-corner-right",sPageNextDisabled:"fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",sPageJUINext:"ui-icon ui-icon-circle-arrow-e",sPageJUIPrev:"ui-icon ui-icon-circle-arrow-w",sPageButton:"fg-button ui-button ui-state-default",sPageButtonActive:"fg-button ui-button ui-state-default ui-state-disabled",sPageButtonStaticDisabled:"fg-button ui-button ui-state-default ui-state-disabled",
20
+ sPageFirst:"first ui-corner-tl ui-corner-bl",sPagePrevious:"previous",sPageNext:"next",sPageLast:"last ui-corner-tr ui-corner-br",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"ui-state-default",sSortDesc:"ui-state-default",sSortable:"ui-state-default",
21
+ sSortableAsc:"ui-state-default",sSortableDesc:"ui-state-default",sSortableNone:"ui-state-default",sSortColumn:"sorting_",sSortJUIAsc:"css_right ui-icon ui-icon-triangle-1-n",sSortJUIDesc:"css_right ui-icon ui-icon-triangle-1-s",sSortJUI:"css_right ui-icon ui-icon-carat-2-n-s",sSortJUIAscAllowed:"css_right ui-icon ui-icon-carat-1-n",sSortJUIDescAllowed:"css_right ui-icon ui-icon-carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon",sScrollWrapper:"dataTables_scroll",
22
+ sScrollHead:"dataTables_scrollHead ui-state-default",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot ui-state-default",sScrollFootInner:"dataTables_scrollFootInner",sFooterTH:"ui-state-default"};n.oPagination={two_button:{fnInit:function(g,l,s){var t,w,y;if(g.bJUI){t=p.createElement("a");w=p.createElement("a");y=p.createElement("span");y.className=g.oClasses.sPageJUINext;w.appendChild(y);y=p.createElement("span");y.className=g.oClasses.sPageJUIPrev;
23
+ t.appendChild(y)}else{t=p.createElement("div");w=p.createElement("div")}t.className=g.oClasses.sPagePrevDisabled;w.className=g.oClasses.sPageNextDisabled;t.title=g.oLanguage.oPaginate.sPrevious;w.title=g.oLanguage.oPaginate.sNext;l.appendChild(t);l.appendChild(w);i(t).bind("click.DT",function(){g.oApi._fnPageChange(g,"previous")&&s(g)});i(w).bind("click.DT",function(){g.oApi._fnPageChange(g,"next")&&s(g)});i(t).bind("selectstart.DT",function(){return false});i(w).bind("selectstart.DT",function(){return false});
24
+ if(g.sTableId!==""&&typeof g.aanFeatures.p=="undefined"){l.setAttribute("id",g.sTableId+"_paginate");t.setAttribute("id",g.sTableId+"_previous");w.setAttribute("id",g.sTableId+"_next")}},fnUpdate:function(g){if(g.aanFeatures.p)for(var l=g.aanFeatures.p,s=0,t=l.length;s<t;s++)if(l[s].childNodes.length!==0){l[s].childNodes[0].className=g._iDisplayStart===0?g.oClasses.sPagePrevDisabled:g.oClasses.sPagePrevEnabled;l[s].childNodes[1].className=g.fnDisplayEnd()==g.fnRecordsDisplay()?g.oClasses.sPageNextDisabled:
25
+ g.oClasses.sPageNextEnabled}}},iFullNumbersShowPages:5,full_numbers:{fnInit:function(g,l,s){var t=p.createElement("span"),w=p.createElement("span"),y=p.createElement("span"),F=p.createElement("span"),x=p.createElement("span");t.innerHTML=g.oLanguage.oPaginate.sFirst;w.innerHTML=g.oLanguage.oPaginate.sPrevious;F.innerHTML=g.oLanguage.oPaginate.sNext;x.innerHTML=g.oLanguage.oPaginate.sLast;var v=g.oClasses;t.className=v.sPageButton+" "+v.sPageFirst;w.className=v.sPageButton+" "+v.sPagePrevious;F.className=
26
+ v.sPageButton+" "+v.sPageNext;x.className=v.sPageButton+" "+v.sPageLast;l.appendChild(t);l.appendChild(w);l.appendChild(y);l.appendChild(F);l.appendChild(x);i(t).bind("click.DT",function(){g.oApi._fnPageChange(g,"first")&&s(g)});i(w).bind("click.DT",function(){g.oApi._fnPageChange(g,"previous")&&s(g)});i(F).bind("click.DT",function(){g.oApi._fnPageChange(g,"next")&&s(g)});i(x).bind("click.DT",function(){g.oApi._fnPageChange(g,"last")&&s(g)});i("span",l).bind("mousedown.DT",function(){return false}).bind("selectstart.DT",
27
+ function(){return false});if(g.sTableId!==""&&typeof g.aanFeatures.p=="undefined"){l.setAttribute("id",g.sTableId+"_paginate");t.setAttribute("id",g.sTableId+"_first");w.setAttribute("id",g.sTableId+"_previous");F.setAttribute("id",g.sTableId+"_next");x.setAttribute("id",g.sTableId+"_last")}},fnUpdate:function(g,l){if(g.aanFeatures.p){var s=n.oPagination.iFullNumbersShowPages,t=Math.floor(s/2),w=Math.ceil(g.fnRecordsDisplay()/g._iDisplayLength),y=Math.ceil(g._iDisplayStart/g._iDisplayLength)+1,F=
28
+ "",x,v=g.oClasses;if(w<s){t=1;x=w}else if(y<=t){t=1;x=s}else if(y>=w-t){t=w-s+1;x=w}else{t=y-Math.ceil(s/2)+1;x=t+s-1}for(s=t;s<=x;s++)F+=y!=s?'<span class="'+v.sPageButton+'">'+s+"</span>":'<span class="'+v.sPageButtonActive+'">'+s+"</span>";x=g.aanFeatures.p;var z,$=function(M){g._iDisplayStart=(this.innerHTML*1-1)*g._iDisplayLength;l(g);M.preventDefault()},X=function(){return false};s=0;for(t=x.length;s<t;s++)if(x[s].childNodes.length!==0){z=i("span:eq(2)",x[s]);z.html(F);i("span",z).bind("click.DT",
29
+ $).bind("mousedown.DT",X).bind("selectstart.DT",X);z=x[s].getElementsByTagName("span");z=[z[0],z[1],z[z.length-2],z[z.length-1]];i(z).removeClass(v.sPageButton+" "+v.sPageButtonActive+" "+v.sPageButtonStaticDisabled);if(y==1){z[0].className+=" "+v.sPageButtonStaticDisabled;z[1].className+=" "+v.sPageButtonStaticDisabled}else{z[0].className+=" "+v.sPageButton;z[1].className+=" "+v.sPageButton}if(w===0||y==w||g._iDisplayLength==-1){z[2].className+=" "+v.sPageButtonStaticDisabled;z[3].className+=" "+
30
+ v.sPageButtonStaticDisabled}else{z[2].className+=" "+v.sPageButton;z[3].className+=" "+v.sPageButton}}}}}};n.oSort={"string-asc":function(g,l){if(typeof g!="string")g="";if(typeof l!="string")l="";g=g.toLowerCase();l=l.toLowerCase();return g<l?-1:g>l?1:0},"string-desc":function(g,l){if(typeof g!="string")g="";if(typeof l!="string")l="";g=g.toLowerCase();l=l.toLowerCase();return g<l?1:g>l?-1:0},"html-asc":function(g,l){g=g.replace(/<.*?>/g,"").toLowerCase();l=l.replace(/<.*?>/g,"").toLowerCase();return g<
31
+ l?-1:g>l?1:0},"html-desc":function(g,l){g=g.replace(/<.*?>/g,"").toLowerCase();l=l.replace(/<.*?>/g,"").toLowerCase();return g<l?1:g>l?-1:0},"date-asc":function(g,l){g=Date.parse(g);l=Date.parse(l);if(isNaN(g)||g==="")g=Date.parse("01/01/1970 00:00:00");if(isNaN(l)||l==="")l=Date.parse("01/01/1970 00:00:00");return g-l},"date-desc":function(g,l){g=Date.parse(g);l=Date.parse(l);if(isNaN(g)||g==="")g=Date.parse("01/01/1970 00:00:00");if(isNaN(l)||l==="")l=Date.parse("01/01/1970 00:00:00");return l-
32
+ g},"numeric-asc":function(g,l){return(g=="-"||g===""?0:g*1)-(l=="-"||l===""?0:l*1)},"numeric-desc":function(g,l){return(l=="-"||l===""?0:l*1)-(g=="-"||g===""?0:g*1)}};n.aTypes=[function(g){if(typeof g=="number")return"numeric";else if(typeof g!="string")return null;var l,s=false;l=g.charAt(0);if("0123456789-".indexOf(l)==-1)return null;for(var t=1;t<g.length;t++){l=g.charAt(t);if("0123456789.".indexOf(l)==-1)return null;if(l=="."){if(s)return null;s=true}}return"numeric"},function(g){var l=Date.parse(g);
33
+ if(l!==null&&!isNaN(l)||typeof g=="string"&&g.length===0)return"date";return null},function(g){if(typeof g=="string"&&g.indexOf("<")!=-1&&g.indexOf(">")!=-1)return"html";return null}];n.fnVersionCheck=function(g){var l=function(x,v){for(;x.length<v;)x+="0";return x},s=n.sVersion.split(".");g=g.split(".");for(var t="",w="",y=0,F=g.length;y<F;y++){t+=l(s[y],3);w+=l(g[y],3)}return parseInt(t,10)>=parseInt(w,10)};n._oExternConfig={iNextUnique:0};i.fn.dataTable=function(g){function l(){this.fnRecordsTotal=
34
+ function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsTotal,10):this.aiDisplayMaster.length};this.fnRecordsDisplay=function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsDisplay,10):this.aiDisplay.length};this.fnDisplayEnd=function(){return this.oFeatures.bServerSide?this.oFeatures.bPaginate===false||this._iDisplayLength==-1?this._iDisplayStart+this.aiDisplay.length:Math.min(this._iDisplayStart+this._iDisplayLength,this._iRecordsDisplay):this._iDisplayEnd};this.sInstance=
35
+ this.oInstance=null;this.oFeatures={bPaginate:true,bLengthChange:true,bFilter:true,bSort:true,bInfo:true,bAutoWidth:true,bProcessing:false,bSortClasses:true,bStateSave:false,bServerSide:false,bDeferRender:false};this.oScroll={sX:"",sXInner:"",sY:"",bCollapse:false,bInfinite:false,iLoadGap:100,iBarWidth:0,bAutoCss:true};this.aanFeatures=[];this.oLanguage={sProcessing:"Processing...",sLengthMenu:"Show _MENU_ entries",sZeroRecords:"No matching records found",sEmptyTable:"No data available in table",
36
+ sLoadingRecords:"Loading...",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sInfoThousands:",",sSearch:"Search:",sUrl:"",oPaginate:{sFirst:"First",sPrevious:"Previous",sNext:"Next",sLast:"Last"},fnInfoCallback:null};this.aoData=[];this.aiDisplay=[];this.aiDisplayMaster=[];this.aoColumns=[];this.aoHeader=[];this.aoFooter=[];this.iNextId=0;this.asDataSearch=[];this.oPreviousSearch={sSearch:"",
37
+ bRegex:false,bSmart:true};this.aoPreSearchCols=[];this.aaSorting=[[0,"asc",0]];this.aaSortingFixed=null;this.asStripeClasses=[];this.asDestroyStripes=[];this.sDestroyWidth=0;this.fnFooterCallback=this.fnHeaderCallback=this.fnRowCallback=null;this.aoDrawCallback=[];this.fnInitComplete=this.fnPreDrawCallback=null;this.sTableId="";this.nTableWrapper=this.nTBody=this.nTFoot=this.nTHead=this.nTable=null;this.bInitialised=this.bDeferLoading=false;this.aoOpenRows=[];this.sDom="lfrtip";this.sPaginationType=
38
+ "two_button";this.iCookieDuration=7200;this.sCookiePrefix="SpryMedia_DataTables_";this.fnCookieCallback=null;this.aoStateSave=[];this.aoStateLoad=[];this.sAjaxSource=this.oLoadedState=null;this.sAjaxDataProp="aaData";this.bAjaxDataGet=true;this.jqXHR=null;this.fnServerData=function(a,b,c,d){d.jqXHR=i.ajax({url:a,data:b,success:function(f){i(d.oInstance).trigger("xhr",d);c(f)},dataType:"json",cache:false,error:function(f,e){e=="parsererror"&&alert("DataTables warning: JSON data from server could not be parsed. This is caused by a JSON formatting error.")}})};
39
+ this.aoServerParams=[];this.fnFormatNumber=function(a){if(a<1E3)return a;else{var b=a+"";a=b.split("");var c="";b=b.length;for(var d=0;d<b;d++){if(d%3===0&&d!==0)c=this.oLanguage.sInfoThousands+c;c=a[b-d-1]+c}}return c};this.aLengthMenu=[10,25,50,100];this.bDrawing=this.iDraw=0;this.iDrawError=-1;this._iDisplayLength=10;this._iDisplayStart=0;this._iDisplayEnd=10;this._iRecordsDisplay=this._iRecordsTotal=0;this.bJUI=false;this.oClasses=n.oStdClasses;this.bSortCellsTop=this.bSorted=this.bFiltered=false;
40
+ this.oInit=null;this.aoDestroyCallback=[]}function s(a){return function(){var b=[A(this[n.iApiIndex])].concat(Array.prototype.slice.call(arguments));return n.oApi[a].apply(this,b)}}function t(a){var b,c,d=a.iInitDisplayStart;if(a.bInitialised===false)setTimeout(function(){t(a)},200);else{Aa(a);X(a);M(a,a.aoHeader);a.nTFoot&&M(a,a.aoFooter);K(a,true);a.oFeatures.bAutoWidth&&ga(a);b=0;for(c=a.aoColumns.length;b<c;b++)if(a.aoColumns[b].sWidth!==null)a.aoColumns[b].nTh.style.width=q(a.aoColumns[b].sWidth);
41
+ if(a.oFeatures.bSort)R(a);else if(a.oFeatures.bFilter)N(a,a.oPreviousSearch);else{a.aiDisplay=a.aiDisplayMaster.slice();E(a);C(a)}if(a.sAjaxSource!==null&&!a.oFeatures.bServerSide){c=[];ha(a,c);a.fnServerData.call(a.oInstance,a.sAjaxSource,c,function(f){var e=f;if(a.sAjaxDataProp!=="")e=aa(a.sAjaxDataProp)(f);for(b=0;b<e.length;b++)v(a,e[b]);a.iInitDisplayStart=d;if(a.oFeatures.bSort)R(a);else{a.aiDisplay=a.aiDisplayMaster.slice();E(a);C(a)}K(a,false);w(a,f)},a)}else if(!a.oFeatures.bServerSide){K(a,
42
+ false);w(a)}}}function w(a,b){a._bInitComplete=true;if(typeof a.fnInitComplete=="function")typeof b!="undefined"?a.fnInitComplete.call(a.oInstance,a,b):a.fnInitComplete.call(a.oInstance,a)}function y(a,b,c){a.oLanguage=i.extend(true,a.oLanguage,b);typeof b.sEmptyTable=="undefined"&&typeof b.sZeroRecords!="undefined"&&o(a.oLanguage,b,"sZeroRecords","sEmptyTable");typeof b.sLoadingRecords=="undefined"&&typeof b.sZeroRecords!="undefined"&&o(a.oLanguage,b,"sZeroRecords","sLoadingRecords");c&&t(a)}function F(a,
43
+ b){var c=a.aoColumns.length;b={sType:null,_bAutoType:true,bVisible:true,bSearchable:true,bSortable:true,asSorting:["asc","desc"],sSortingClass:a.oClasses.sSortable,sSortingClassJUI:a.oClasses.sSortJUI,sTitle:b?b.innerHTML:"",sName:"",sWidth:null,sWidthOrig:null,sClass:null,fnRender:null,bUseRendered:true,iDataSort:c,mDataProp:c,fnGetData:null,fnSetData:null,sSortDataType:"std",sDefaultContent:null,sContentPadding:"",nTh:b?b:p.createElement("th"),nTf:null};a.aoColumns.push(b);if(typeof a.aoPreSearchCols[c]==
44
+ "undefined"||a.aoPreSearchCols[c]===null)a.aoPreSearchCols[c]={sSearch:"",bRegex:false,bSmart:true};else{if(typeof a.aoPreSearchCols[c].bRegex=="undefined")a.aoPreSearchCols[c].bRegex=true;if(typeof a.aoPreSearchCols[c].bSmart=="undefined")a.aoPreSearchCols[c].bSmart=true}x(a,c,null)}function x(a,b,c){b=a.aoColumns[b];if(typeof c!="undefined"&&c!==null){if(typeof c.sType!="undefined"){b.sType=c.sType;b._bAutoType=false}o(b,c,"bVisible");o(b,c,"bSearchable");o(b,c,"bSortable");o(b,c,"sTitle");o(b,
45
+ c,"sName");o(b,c,"sWidth");o(b,c,"sWidth","sWidthOrig");o(b,c,"sClass");o(b,c,"fnRender");o(b,c,"bUseRendered");o(b,c,"iDataSort");o(b,c,"mDataProp");o(b,c,"asSorting");o(b,c,"sSortDataType");o(b,c,"sDefaultContent");o(b,c,"sContentPadding")}b.fnGetData=aa(b.mDataProp);b.fnSetData=Ba(b.mDataProp);if(!a.oFeatures.bSort)b.bSortable=false;if(!b.bSortable||i.inArray("asc",b.asSorting)==-1&&i.inArray("desc",b.asSorting)==-1){b.sSortingClass=a.oClasses.sSortableNone;b.sSortingClassJUI=""}else if(b.bSortable||
46
+ i.inArray("asc",b.asSorting)==-1&&i.inArray("desc",b.asSorting)==-1){b.sSortingClass=a.oClasses.sSortable;b.sSortingClassJUI=a.oClasses.sSortJUI}else if(i.inArray("asc",b.asSorting)!=-1&&i.inArray("desc",b.asSorting)==-1){b.sSortingClass=a.oClasses.sSortableAsc;b.sSortingClassJUI=a.oClasses.sSortJUIAscAllowed}else if(i.inArray("asc",b.asSorting)==-1&&i.inArray("desc",b.asSorting)!=-1){b.sSortingClass=a.oClasses.sSortableDesc;b.sSortingClassJUI=a.oClasses.sSortJUIDescAllowed}}function v(a,b){var c;
47
+ c=i.isArray(b)?b.slice():i.extend(true,{},b);b=a.aoData.length;var d={nTr:null,_iId:a.iNextId++,_aData:c,_anHidden:[],_sRowStripe:""};a.aoData.push(d);for(var f,e=0,h=a.aoColumns.length;e<h;e++){c=a.aoColumns[e];typeof c.fnRender=="function"&&c.bUseRendered&&c.mDataProp!==null&&O(a,b,e,c.fnRender({iDataRow:b,iDataColumn:e,aData:d._aData,oSettings:a}));if(c._bAutoType&&c.sType!="string"){f=G(a,b,e,"type");if(f!==null&&f!==""){f=ia(f);if(c.sType===null)c.sType=f;else if(c.sType!=f&&c.sType!="html")c.sType=
48
+ "string"}}}a.aiDisplayMaster.push(b);a.oFeatures.bDeferRender||z(a,b);return b}function z(a,b){var c=a.aoData[b],d;if(c.nTr===null){c.nTr=p.createElement("tr");typeof c._aData.DT_RowId!="undefined"&&c.nTr.setAttribute("id",c._aData.DT_RowId);typeof c._aData.DT_RowClass!="undefined"&&i(c.nTr).addClass(c._aData.DT_RowClass);for(var f=0,e=a.aoColumns.length;f<e;f++){var h=a.aoColumns[f];d=p.createElement("td");d.innerHTML=typeof h.fnRender=="function"&&(!h.bUseRendered||h.mDataProp===null)?h.fnRender({iDataRow:b,
49
+ iDataColumn:f,aData:c._aData,oSettings:a}):G(a,b,f,"display");if(h.sClass!==null)d.className=h.sClass;if(h.bVisible){c.nTr.appendChild(d);c._anHidden[f]=null}else c._anHidden[f]=d}}}function $(a){var b,c,d,f,e,h,j,k,m;if(a.bDeferLoading||a.sAjaxSource===null){j=a.nTBody.childNodes;b=0;for(c=j.length;b<c;b++)if(j[b].nodeName.toUpperCase()=="TR"){k=a.aoData.length;a.aoData.push({nTr:j[b],_iId:a.iNextId++,_aData:[],_anHidden:[],_sRowStripe:""});a.aiDisplayMaster.push(k);h=j[b].childNodes;d=e=0;for(f=
50
+ h.length;d<f;d++){m=h[d].nodeName.toUpperCase();if(m=="TD"||m=="TH"){O(a,k,e,i.trim(h[d].innerHTML));e++}}}}j=ba(a);h=[];b=0;for(c=j.length;b<c;b++){d=0;for(f=j[b].childNodes.length;d<f;d++){e=j[b].childNodes[d];m=e.nodeName.toUpperCase();if(m=="TD"||m=="TH")h.push(e)}}h.length!=j.length*a.aoColumns.length&&J(a,1,"Unexpected number of TD elements. Expected "+j.length*a.aoColumns.length+" and got "+h.length+". DataTables does not support rowspan / colspan in the table body, and there must be one cell for each row/column combination.");
51
+ d=0;for(f=a.aoColumns.length;d<f;d++){if(a.aoColumns[d].sTitle===null)a.aoColumns[d].sTitle=a.aoColumns[d].nTh.innerHTML;j=a.aoColumns[d]._bAutoType;m=typeof a.aoColumns[d].fnRender=="function";e=a.aoColumns[d].sClass!==null;k=a.aoColumns[d].bVisible;var u,r;if(j||m||e||!k){b=0;for(c=a.aoData.length;b<c;b++){u=h[b*f+d];if(j&&a.aoColumns[d].sType!="string"){r=G(a,b,d,"type");if(r!==""){r=ia(r);if(a.aoColumns[d].sType===null)a.aoColumns[d].sType=r;else if(a.aoColumns[d].sType!=r&&a.aoColumns[d].sType!=
52
+ "html")a.aoColumns[d].sType="string"}}if(m){r=a.aoColumns[d].fnRender({iDataRow:b,iDataColumn:d,aData:a.aoData[b]._aData,oSettings:a});u.innerHTML=r;a.aoColumns[d].bUseRendered&&O(a,b,d,r)}if(e)u.className+=" "+a.aoColumns[d].sClass;if(k)a.aoData[b]._anHidden[d]=null;else{a.aoData[b]._anHidden[d]=u;u.parentNode.removeChild(u)}}}}}function X(a){var b,c,d;a.nTHead.getElementsByTagName("tr");if(a.nTHead.getElementsByTagName("th").length!==0){b=0;for(d=a.aoColumns.length;b<d;b++){c=a.aoColumns[b].nTh;
53
+ a.aoColumns[b].sClass!==null&&i(c).addClass(a.aoColumns[b].sClass);if(a.aoColumns[b].sTitle!=c.innerHTML)c.innerHTML=a.aoColumns[b].sTitle}}else{var f=p.createElement("tr");b=0;for(d=a.aoColumns.length;b<d;b++){c=a.aoColumns[b].nTh;c.innerHTML=a.aoColumns[b].sTitle;a.aoColumns[b].sClass!==null&&i(c).addClass(a.aoColumns[b].sClass);f.appendChild(c)}i(a.nTHead).html("")[0].appendChild(f);Y(a.aoHeader,a.nTHead)}if(a.bJUI){b=0;for(d=a.aoColumns.length;b<d;b++){c=a.aoColumns[b].nTh;f=p.createElement("div");
54
+ f.className=a.oClasses.sSortJUIWrapper;i(c).contents().appendTo(f);var e=p.createElement("span");e.className=a.oClasses.sSortIcon;f.appendChild(e);c.appendChild(f)}}d=function(){this.onselectstart=function(){return false};return false};if(a.oFeatures.bSort)for(b=0;b<a.aoColumns.length;b++)if(a.aoColumns[b].bSortable!==false){ja(a,a.aoColumns[b].nTh,b);i(a.aoColumns[b].nTh).bind("mousedown.DT",d)}else i(a.aoColumns[b].nTh).addClass(a.oClasses.sSortableNone);a.oClasses.sFooterTH!==""&&i(a.nTFoot).children("tr").children("th").addClass(a.oClasses.sFooterTH);
55
+ if(a.nTFoot!==null){c=S(a,null,a.aoFooter);b=0;for(d=a.aoColumns.length;b<d;b++)if(typeof c[b]!="undefined")a.aoColumns[b].nTf=c[b]}}function M(a,b,c){var d,f,e,h=[],j=[],k=a.aoColumns.length;if(typeof c=="undefined")c=false;d=0;for(f=b.length;d<f;d++){h[d]=b[d].slice();h[d].nTr=b[d].nTr;for(e=k-1;e>=0;e--)!a.aoColumns[e].bVisible&&!c&&h[d].splice(e,1);j.push([])}d=0;for(f=h.length;d<f;d++){if(h[d].nTr){a=0;for(e=h[d].nTr.childNodes.length;a<e;a++)h[d].nTr.removeChild(h[d].nTr.childNodes[0])}e=0;
56
+ for(b=h[d].length;e<b;e++){k=c=1;if(typeof j[d][e]=="undefined"){h[d].nTr.appendChild(h[d][e].cell);for(j[d][e]=1;typeof h[d+c]!="undefined"&&h[d][e].cell==h[d+c][e].cell;){j[d+c][e]=1;c++}for(;typeof h[d][e+k]!="undefined"&&h[d][e].cell==h[d][e+k].cell;){for(a=0;a<c;a++)j[d+a][e+k]=1;k++}h[d][e].cell.rowSpan=c;h[d][e].cell.colSpan=k}}}}function C(a){var b,c,d=[],f=0,e=false;b=a.asStripeClasses.length;c=a.aoOpenRows.length;if(!(a.fnPreDrawCallback!==null&&a.fnPreDrawCallback.call(a.oInstance,a)===
57
+ false)){a.bDrawing=true;if(typeof a.iInitDisplayStart!="undefined"&&a.iInitDisplayStart!=-1){a._iDisplayStart=a.oFeatures.bServerSide?a.iInitDisplayStart:a.iInitDisplayStart>=a.fnRecordsDisplay()?0:a.iInitDisplayStart;a.iInitDisplayStart=-1;E(a)}if(a.bDeferLoading){a.bDeferLoading=false;a.iDraw++}else if(a.oFeatures.bServerSide){if(!a.bDestroying&&!Ca(a))return}else a.iDraw++;if(a.aiDisplay.length!==0){var h=a._iDisplayStart,j=a._iDisplayEnd;if(a.oFeatures.bServerSide){h=0;j=a.aoData.length}for(h=
58
+ h;h<j;h++){var k=a.aoData[a.aiDisplay[h]];k.nTr===null&&z(a,a.aiDisplay[h]);var m=k.nTr;if(b!==0){var u=a.asStripeClasses[f%b];if(k._sRowStripe!=u){i(m).removeClass(k._sRowStripe).addClass(u);k._sRowStripe=u}}if(typeof a.fnRowCallback=="function"){m=a.fnRowCallback.call(a.oInstance,m,a.aoData[a.aiDisplay[h]]._aData,f,h);if(!m&&!e){J(a,0,"A node was not returned by fnRowCallback");e=true}}d.push(m);f++;if(c!==0)for(k=0;k<c;k++)m==a.aoOpenRows[k].nParent&&d.push(a.aoOpenRows[k].nTr)}}else{d[0]=p.createElement("tr");
59
+ if(typeof a.asStripeClasses[0]!="undefined")d[0].className=a.asStripeClasses[0];e=a.oLanguage.sZeroRecords.replace("_MAX_",a.fnFormatNumber(a.fnRecordsTotal()));if(a.iDraw==1&&a.sAjaxSource!==null&&!a.oFeatures.bServerSide)e=a.oLanguage.sLoadingRecords;else if(typeof a.oLanguage.sEmptyTable!="undefined"&&a.fnRecordsTotal()===0)e=a.oLanguage.sEmptyTable;b=p.createElement("td");b.setAttribute("valign","top");b.colSpan=Z(a);b.className=a.oClasses.sRowEmpty;b.innerHTML=e;d[f].appendChild(b)}typeof a.fnHeaderCallback==
60
+ "function"&&a.fnHeaderCallback.call(a.oInstance,i(a.nTHead).children("tr")[0],ca(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay);typeof a.fnFooterCallback=="function"&&a.fnFooterCallback.call(a.oInstance,i(a.nTFoot).children("tr")[0],ca(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay);f=p.createDocumentFragment();b=p.createDocumentFragment();if(a.nTBody){e=a.nTBody.parentNode;b.appendChild(a.nTBody);if(!a.oScroll.bInfinite||!a._bInitComplete||a.bSorted||a.bFiltered){c=a.nTBody.childNodes;for(b=
61
+ c.length-1;b>=0;b--)c[b].parentNode.removeChild(c[b])}b=0;for(c=d.length;b<c;b++)f.appendChild(d[b]);a.nTBody.appendChild(f);e!==null&&e.appendChild(a.nTBody)}for(b=a.aoDrawCallback.length-1;b>=0;b--)a.aoDrawCallback[b].fn.call(a.oInstance,a);i(a.oInstance).trigger("draw",a);a.bSorted=false;a.bFiltered=false;a.bDrawing=false;if(a.oFeatures.bServerSide){K(a,false);typeof a._bInitComplete=="undefined"&&w(a)}}}function da(a){if(a.oFeatures.bSort)R(a,a.oPreviousSearch);else if(a.oFeatures.bFilter)N(a,
62
+ a.oPreviousSearch);else{E(a);C(a)}}function Ca(a){if(a.bAjaxDataGet){a.iDraw++;K(a,true);var b=Da(a);ha(a,b);a.fnServerData.call(a.oInstance,a.sAjaxSource,b,function(c){Ea(a,c)},a);return false}else return true}function Da(a){var b=a.aoColumns.length,c=[],d,f;c.push({name:"sEcho",value:a.iDraw});c.push({name:"iColumns",value:b});c.push({name:"sColumns",value:ka(a)});c.push({name:"iDisplayStart",value:a._iDisplayStart});c.push({name:"iDisplayLength",value:a.oFeatures.bPaginate!==false?a._iDisplayLength:
63
+ -1});for(f=0;f<b;f++){d=a.aoColumns[f].mDataProp;c.push({name:"mDataProp_"+f,value:typeof d=="function"?"function":d})}if(a.oFeatures.bFilter!==false){c.push({name:"sSearch",value:a.oPreviousSearch.sSearch});c.push({name:"bRegex",value:a.oPreviousSearch.bRegex});for(f=0;f<b;f++){c.push({name:"sSearch_"+f,value:a.aoPreSearchCols[f].sSearch});c.push({name:"bRegex_"+f,value:a.aoPreSearchCols[f].bRegex});c.push({name:"bSearchable_"+f,value:a.aoColumns[f].bSearchable})}}if(a.oFeatures.bSort!==false){d=
64
+ a.aaSortingFixed!==null?a.aaSortingFixed.length:0;var e=a.aaSorting.length;c.push({name:"iSortingCols",value:d+e});for(f=0;f<d;f++){c.push({name:"iSortCol_"+f,value:a.aaSortingFixed[f][0]});c.push({name:"sSortDir_"+f,value:a.aaSortingFixed[f][1]})}for(f=0;f<e;f++){c.push({name:"iSortCol_"+(f+d),value:a.aaSorting[f][0]});c.push({name:"sSortDir_"+(f+d),value:a.aaSorting[f][1]})}for(f=0;f<b;f++)c.push({name:"bSortable_"+f,value:a.aoColumns[f].bSortable})}return c}function ha(a,b){for(var c=0,d=a.aoServerParams.length;c<
65
+ d;c++)a.aoServerParams[c].fn.call(a.oInstance,b)}function Ea(a,b){if(typeof b.sEcho!="undefined")if(b.sEcho*1<a.iDraw)return;else a.iDraw=b.sEcho*1;if(!a.oScroll.bInfinite||a.oScroll.bInfinite&&(a.bSorted||a.bFiltered))la(a);a._iRecordsTotal=b.iTotalRecords;a._iRecordsDisplay=b.iTotalDisplayRecords;var c=ka(a);if(c=typeof b.sColumns!="undefined"&&c!==""&&b.sColumns!=c)var d=Fa(a,b.sColumns);b=aa(a.sAjaxDataProp)(b);for(var f=0,e=b.length;f<e;f++)if(c){for(var h=[],j=0,k=a.aoColumns.length;j<k;j++)h.push(b[f][d[j]]);
66
+ v(a,h)}else v(a,b[f]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=false;C(a);a.bAjaxDataGet=true;K(a,false)}function Aa(a){var b=p.createElement("div");a.nTable.parentNode.insertBefore(b,a.nTable);a.nTableWrapper=p.createElement("div");a.nTableWrapper.className=a.oClasses.sWrapper;a.sTableId!==""&&a.nTableWrapper.setAttribute("id",a.sTableId+"_wrapper");a.nTableReinsertBefore=a.nTable.nextSibling;for(var c=a.nTableWrapper,d=a.sDom.split(""),f,e,h,j,k,m,u,r=0;r<d.length;r++){e=0;h=d[r];if(h==
67
+ "<"){j=p.createElement("div");k=d[r+1];if(k=="'"||k=='"'){m="";for(u=2;d[r+u]!=k;){m+=d[r+u];u++}if(m=="H")m="fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix";else if(m=="F")m="fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix";if(m.indexOf(".")!=-1){k=m.split(".");j.setAttribute("id",k[0].substr(1,k[0].length-1));j.className=k[1]}else if(m.charAt(0)=="#")j.setAttribute("id",m.substr(1,m.length-1));else j.className=m;r+=u}c.appendChild(j);
68
+ c=j}else if(h==">")c=c.parentNode;else if(h=="l"&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange){f=Ga(a);e=1}else if(h=="f"&&a.oFeatures.bFilter){f=Ha(a);e=1}else if(h=="r"&&a.oFeatures.bProcessing){f=Ia(a);e=1}else if(h=="t"){f=Ja(a);e=1}else if(h=="i"&&a.oFeatures.bInfo){f=Ka(a);e=1}else if(h=="p"&&a.oFeatures.bPaginate){f=La(a);e=1}else if(n.aoFeatures.length!==0){j=n.aoFeatures;u=0;for(k=j.length;u<k;u++)if(h==j[u].cFeature){if(f=j[u].fnInit(a))e=1;break}}if(e==1&&f!==null){if(typeof a.aanFeatures[h]!=
69
+ "object")a.aanFeatures[h]=[];a.aanFeatures[h].push(f);c.appendChild(f)}}b.parentNode.replaceChild(a.nTableWrapper,b)}function Ja(a){if(a.oScroll.sX===""&&a.oScroll.sY==="")return a.nTable;var b=p.createElement("div"),c=p.createElement("div"),d=p.createElement("div"),f=p.createElement("div"),e=p.createElement("div"),h=p.createElement("div"),j=a.nTable.cloneNode(false),k=a.nTable.cloneNode(false),m=a.nTable.getElementsByTagName("thead")[0],u=a.nTable.getElementsByTagName("tfoot").length===0?null:a.nTable.getElementsByTagName("tfoot")[0],
70
+ r=typeof g.bJQueryUI!="undefined"&&g.bJQueryUI?n.oJUIClasses:n.oStdClasses;c.appendChild(d);e.appendChild(h);f.appendChild(a.nTable);b.appendChild(c);b.appendChild(f);d.appendChild(j);j.appendChild(m);if(u!==null){b.appendChild(e);h.appendChild(k);k.appendChild(u)}b.className=r.sScrollWrapper;c.className=r.sScrollHead;d.className=r.sScrollHeadInner;f.className=r.sScrollBody;e.className=r.sScrollFoot;h.className=r.sScrollFootInner;if(a.oScroll.bAutoCss){c.style.overflow="hidden";c.style.position="relative";
71
+ e.style.overflow="hidden";f.style.overflow="auto"}c.style.border="0";c.style.width="100%";e.style.border="0";d.style.width="150%";j.removeAttribute("id");j.style.marginLeft="0";a.nTable.style.marginLeft="0";if(u!==null){k.removeAttribute("id");k.style.marginLeft="0"}d=i(a.nTable).children("caption");h=0;for(k=d.length;h<k;h++)j.appendChild(d[h]);if(a.oScroll.sX!==""){c.style.width=q(a.oScroll.sX);f.style.width=q(a.oScroll.sX);if(u!==null)e.style.width=q(a.oScroll.sX);i(f).scroll(function(){c.scrollLeft=
72
+ this.scrollLeft;if(u!==null)e.scrollLeft=this.scrollLeft})}if(a.oScroll.sY!=="")f.style.height=q(a.oScroll.sY);a.aoDrawCallback.push({fn:Ma,sName:"scrolling"});a.oScroll.bInfinite&&i(f).scroll(function(){if(!a.bDrawing)if(i(this).scrollTop()+i(this).height()>i(a.nTable).height()-a.oScroll.iLoadGap)if(a.fnDisplayEnd()<a.fnRecordsDisplay()){ma(a,"next");E(a);C(a)}});a.nScrollHead=c;a.nScrollFoot=e;return b}function Ma(a){var b=a.nScrollHead.getElementsByTagName("div")[0],c=b.getElementsByTagName("table")[0],
73
+ d=a.nTable.parentNode,f,e,h,j,k,m,u,r,H=[],L=a.nTFoot!==null?a.nScrollFoot.getElementsByTagName("div")[0]:null,T=a.nTFoot!==null?L.getElementsByTagName("table")[0]:null,B=i.browser.msie&&i.browser.version<=7;h=a.nTable.getElementsByTagName("thead");h.length>0&&a.nTable.removeChild(h[0]);if(a.nTFoot!==null){k=a.nTable.getElementsByTagName("tfoot");k.length>0&&a.nTable.removeChild(k[0])}h=a.nTHead.cloneNode(true);a.nTable.insertBefore(h,a.nTable.childNodes[0]);if(a.nTFoot!==null){k=a.nTFoot.cloneNode(true);
74
+ a.nTable.insertBefore(k,a.nTable.childNodes[1])}if(a.oScroll.sX===""){d.style.width="100%";b.parentNode.style.width="100%"}var U=S(a,h);f=0;for(e=U.length;f<e;f++){u=Na(a,f);U[f].style.width=a.aoColumns[u].sWidth}a.nTFoot!==null&&P(function(I){I.style.width=""},k.getElementsByTagName("tr"));f=i(a.nTable).outerWidth();if(a.oScroll.sX===""){a.nTable.style.width="100%";if(B&&(d.scrollHeight>d.offsetHeight||i(d).css("overflow-y")=="scroll"))a.nTable.style.width=q(i(a.nTable).outerWidth()-a.oScroll.iBarWidth)}else if(a.oScroll.sXInner!==
75
+ "")a.nTable.style.width=q(a.oScroll.sXInner);else if(f==i(d).width()&&i(d).height()<i(a.nTable).height()){a.nTable.style.width=q(f-a.oScroll.iBarWidth);if(i(a.nTable).outerWidth()>f-a.oScroll.iBarWidth)a.nTable.style.width=q(f)}else a.nTable.style.width=q(f);f=i(a.nTable).outerWidth();e=a.nTHead.getElementsByTagName("tr");h=h.getElementsByTagName("tr");P(function(I,na){m=I.style;m.paddingTop="0";m.paddingBottom="0";m.borderTopWidth="0";m.borderBottomWidth="0";m.height=0;r=i(I).width();na.style.width=
76
+ q(r);H.push(r)},h,e);i(h).height(0);if(a.nTFoot!==null){j=k.getElementsByTagName("tr");k=a.nTFoot.getElementsByTagName("tr");P(function(I,na){m=I.style;m.paddingTop="0";m.paddingBottom="0";m.borderTopWidth="0";m.borderBottomWidth="0";m.height=0;r=i(I).width();na.style.width=q(r);H.push(r)},j,k);i(j).height(0)}P(function(I){I.innerHTML="";I.style.width=q(H.shift())},h);a.nTFoot!==null&&P(function(I){I.innerHTML="";I.style.width=q(H.shift())},j);if(i(a.nTable).outerWidth()<f){j=d.scrollHeight>d.offsetHeight||
77
+ i(d).css("overflow-y")=="scroll"?f+a.oScroll.iBarWidth:f;if(B&&(d.scrollHeight>d.offsetHeight||i(d).css("overflow-y")=="scroll"))a.nTable.style.width=q(j-a.oScroll.iBarWidth);d.style.width=q(j);b.parentNode.style.width=q(j);if(a.nTFoot!==null)L.parentNode.style.width=q(j);if(a.oScroll.sX==="")J(a,1,"The table cannot fit into the current element which will cause column misalignment. The table has been drawn at its minimum possible width.");else a.oScroll.sXInner!==""&&J(a,1,"The table cannot fit into the current element which will cause column misalignment. Increase the sScrollXInner value or remove it to allow automatic calculation")}else{d.style.width=
78
+ q("100%");b.parentNode.style.width=q("100%");if(a.nTFoot!==null)L.parentNode.style.width=q("100%")}if(a.oScroll.sY==="")if(B)d.style.height=q(a.nTable.offsetHeight+a.oScroll.iBarWidth);if(a.oScroll.sY!==""&&a.oScroll.bCollapse){d.style.height=q(a.oScroll.sY);B=a.oScroll.sX!==""&&a.nTable.offsetWidth>d.offsetWidth?a.oScroll.iBarWidth:0;if(a.nTable.offsetHeight<d.offsetHeight)d.style.height=q(i(a.nTable).height()+B)}B=i(a.nTable).outerWidth();c.style.width=q(B);b.style.width=q(B+a.oScroll.iBarWidth);
79
+ if(a.nTFoot!==null){L.style.width=q(a.nTable.offsetWidth+a.oScroll.iBarWidth);T.style.width=q(a.nTable.offsetWidth)}if(a.bSorted||a.bFiltered)d.scrollTop=0}function ea(a){if(a.oFeatures.bAutoWidth===false)return false;ga(a);for(var b=0,c=a.aoColumns.length;b<c;b++)a.aoColumns[b].nTh.style.width=a.aoColumns[b].sWidth}function Ha(a){var b=a.oLanguage.sSearch;b=b.indexOf("_INPUT_")!==-1?b.replace("_INPUT_",'<input type="text" />'):b===""?'<input type="text" />':b+' <input type="text" />';var c=p.createElement("div");
80
+ c.className=a.oClasses.sFilter;c.innerHTML="<label>"+b+"</label>";a.sTableId!==""&&typeof a.aanFeatures.f=="undefined"&&c.setAttribute("id",a.sTableId+"_filter");b=i("input",c);b.val(a.oPreviousSearch.sSearch.replace('"',"&quot;"));b.bind("keyup.DT",function(){for(var d=a.aanFeatures.f,f=0,e=d.length;f<e;f++)d[f]!=i(this).parents("div.dataTables_filter")[0]&&i("input",d[f]).val(this.value);this.value!=a.oPreviousSearch.sSearch&&N(a,{sSearch:this.value,bRegex:a.oPreviousSearch.bRegex,bSmart:a.oPreviousSearch.bSmart})});
81
+ b.bind("keypress.DT",function(d){if(d.keyCode==13)return false});return c}function N(a,b,c){Oa(a,b.sSearch,c,b.bRegex,b.bSmart);for(b=0;b<a.aoPreSearchCols.length;b++)Pa(a,a.aoPreSearchCols[b].sSearch,b,a.aoPreSearchCols[b].bRegex,a.aoPreSearchCols[b].bSmart);n.afnFiltering.length!==0&&Qa(a);a.bFiltered=true;i(a.oInstance).trigger("filter",a);a._iDisplayStart=0;E(a);C(a);oa(a,0)}function Qa(a){for(var b=n.afnFiltering,c=0,d=b.length;c<d;c++)for(var f=0,e=0,h=a.aiDisplay.length;e<h;e++){var j=a.aiDisplay[e-
82
+ f];if(!b[c](a,fa(a,j,"filter"),j)){a.aiDisplay.splice(e-f,1);f++}}}function Pa(a,b,c,d,f){if(b!==""){var e=0;b=pa(b,d,f);for(d=a.aiDisplay.length-1;d>=0;d--){f=qa(G(a,a.aiDisplay[d],c,"filter"),a.aoColumns[c].sType);if(!b.test(f)){a.aiDisplay.splice(d,1);e++}}}}function Oa(a,b,c,d,f){var e=pa(b,d,f);if(typeof c=="undefined"||c===null)c=0;if(n.afnFiltering.length!==0)c=1;if(b.length<=0){a.aiDisplay.splice(0,a.aiDisplay.length);a.aiDisplay=a.aiDisplayMaster.slice()}else if(a.aiDisplay.length==a.aiDisplayMaster.length||
83
+ a.oPreviousSearch.sSearch.length>b.length||c==1||b.indexOf(a.oPreviousSearch.sSearch)!==0){a.aiDisplay.splice(0,a.aiDisplay.length);oa(a,1);for(c=0;c<a.aiDisplayMaster.length;c++)e.test(a.asDataSearch[c])&&a.aiDisplay.push(a.aiDisplayMaster[c])}else{var h=0;for(c=0;c<a.asDataSearch.length;c++)if(!e.test(a.asDataSearch[c])){a.aiDisplay.splice(c-h,1);h++}}a.oPreviousSearch.sSearch=b;a.oPreviousSearch.bRegex=d;a.oPreviousSearch.bSmart=f}function oa(a,b){if(!a.oFeatures.bServerSide){a.asDataSearch.splice(0,
84
+ a.asDataSearch.length);b=typeof b!="undefined"&&b==1?a.aiDisplayMaster:a.aiDisplay;for(var c=0,d=b.length;c<d;c++)a.asDataSearch[c]=ra(a,fa(a,b[c],"filter"))}}function ra(a,b){var c="";if(typeof a.__nTmpFilter=="undefined")a.__nTmpFilter=p.createElement("div");for(var d=a.__nTmpFilter,f=0,e=a.aoColumns.length;f<e;f++)if(a.aoColumns[f].bSearchable)c+=qa(b[f],a.aoColumns[f].sType)+" ";if(c.indexOf("&")!==-1){d.innerHTML=c;c=d.textContent?d.textContent:d.innerText;c=c.replace(/\n/g," ").replace(/\r/g,
85
+ "")}return c}function pa(a,b,c){if(c){a=b?a.split(" "):sa(a).split(" ");a="^(?=.*?"+a.join(")(?=.*?")+").*$";return new RegExp(a,"i")}else{a=b?a:sa(a);return new RegExp(a,"i")}}function qa(a,b){if(typeof n.ofnSearch[b]=="function")return n.ofnSearch[b](a);else if(b=="html")return a.replace(/\n/g," ").replace(/<.*?>/g,"");else if(typeof a=="string")return a.replace(/\n/g," ");else if(a===null)return"";return a}function R(a,b){var c,d,f,e,h=[],j=[],k=n.oSort;d=a.aoData;var m=a.aoColumns;if(!a.oFeatures.bServerSide&&
86
+ (a.aaSorting.length!==0||a.aaSortingFixed!==null)){h=a.aaSortingFixed!==null?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(c=0;c<h.length;c++){var u=h[c][0];f=ta(a,u);e=a.aoColumns[u].sSortDataType;if(typeof n.afnSortData[e]!="undefined"){var r=n.afnSortData[e](a,u,f);f=0;for(e=d.length;f<e;f++)O(a,f,u,r[f])}}c=0;for(d=a.aiDisplayMaster.length;c<d;c++)j[a.aiDisplayMaster[c]]=c;var H=h.length;a.aiDisplayMaster.sort(function(L,T){var B,U;for(c=0;c<H;c++){B=m[h[c][0]].iDataSort;U=m[B].sType;
87
+ B=k[(U?U:"string")+"-"+h[c][1]](G(a,L,B,"sort"),G(a,T,B,"sort"));if(B!==0)return B}return k["numeric-asc"](j[L],j[T])})}if((typeof b=="undefined"||b)&&!a.oFeatures.bDeferRender)V(a);a.bSorted=true;i(a.oInstance).trigger("sort",a);if(a.oFeatures.bFilter)N(a,a.oPreviousSearch,1);else{a.aiDisplay=a.aiDisplayMaster.slice();a._iDisplayStart=0;E(a);C(a)}}function ja(a,b,c,d){i(b).bind("click.DT",function(f){if(a.aoColumns[c].bSortable!==false){var e=function(){var h,j;if(f.shiftKey){for(var k=false,m=0;m<
88
+ a.aaSorting.length;m++)if(a.aaSorting[m][0]==c){k=true;h=a.aaSorting[m][0];j=a.aaSorting[m][2]+1;if(typeof a.aoColumns[h].asSorting[j]=="undefined")a.aaSorting.splice(m,1);else{a.aaSorting[m][1]=a.aoColumns[h].asSorting[j];a.aaSorting[m][2]=j}break}k===false&&a.aaSorting.push([c,a.aoColumns[c].asSorting[0],0])}else if(a.aaSorting.length==1&&a.aaSorting[0][0]==c){h=a.aaSorting[0][0];j=a.aaSorting[0][2]+1;if(typeof a.aoColumns[h].asSorting[j]=="undefined")j=0;a.aaSorting[0][1]=a.aoColumns[h].asSorting[j];
89
+ a.aaSorting[0][2]=j}else{a.aaSorting.splice(0,a.aaSorting.length);a.aaSorting.push([c,a.aoColumns[c].asSorting[0],0])}R(a)};if(a.oFeatures.bProcessing){K(a,true);setTimeout(function(){e();a.oFeatures.bServerSide||K(a,false)},0)}else e();typeof d=="function"&&d(a)}})}function V(a){var b,c,d,f,e,h=a.aoColumns.length,j=a.oClasses;for(b=0;b<h;b++)a.aoColumns[b].bSortable&&i(a.aoColumns[b].nTh).removeClass(j.sSortAsc+" "+j.sSortDesc+" "+a.aoColumns[b].sSortingClass);f=a.aaSortingFixed!==null?a.aaSortingFixed.concat(a.aaSorting):
90
+ a.aaSorting.slice();for(b=0;b<a.aoColumns.length;b++)if(a.aoColumns[b].bSortable){e=a.aoColumns[b].sSortingClass;d=-1;for(c=0;c<f.length;c++)if(f[c][0]==b){e=f[c][1]=="asc"?j.sSortAsc:j.sSortDesc;d=c;break}i(a.aoColumns[b].nTh).addClass(e);if(a.bJUI){c=i("span",a.aoColumns[b].nTh);c.removeClass(j.sSortJUIAsc+" "+j.sSortJUIDesc+" "+j.sSortJUI+" "+j.sSortJUIAscAllowed+" "+j.sSortJUIDescAllowed);c.addClass(d==-1?a.aoColumns[b].sSortingClassJUI:f[d][1]=="asc"?j.sSortJUIAsc:j.sSortJUIDesc)}}else i(a.aoColumns[b].nTh).addClass(a.aoColumns[b].sSortingClass);
91
+ e=j.sSortColumn;if(a.oFeatures.bSort&&a.oFeatures.bSortClasses){d=Q(a);if(a.oFeatures.bDeferRender)i(d).removeClass(e+"1 "+e+"2 "+e+"3");else if(d.length>=h)for(b=0;b<h;b++)if(d[b].className.indexOf(e+"1")!=-1){c=0;for(a=d.length/h;c<a;c++)d[h*c+b].className=i.trim(d[h*c+b].className.replace(e+"1",""))}else if(d[b].className.indexOf(e+"2")!=-1){c=0;for(a=d.length/h;c<a;c++)d[h*c+b].className=i.trim(d[h*c+b].className.replace(e+"2",""))}else if(d[b].className.indexOf(e+"3")!=-1){c=0;for(a=d.length/
92
+ h;c<a;c++)d[h*c+b].className=i.trim(d[h*c+b].className.replace(" "+e+"3",""))}j=1;var k;for(b=0;b<f.length;b++){k=parseInt(f[b][0],10);c=0;for(a=d.length/h;c<a;c++)d[h*c+k].className+=" "+e+j;j<3&&j++}}}function La(a){if(a.oScroll.bInfinite)return null;var b=p.createElement("div");b.className=a.oClasses.sPaging+a.sPaginationType;n.oPagination[a.sPaginationType].fnInit(a,b,function(c){E(c);C(c)});typeof a.aanFeatures.p=="undefined"&&a.aoDrawCallback.push({fn:function(c){n.oPagination[c.sPaginationType].fnUpdate(c,
93
+ function(d){E(d);C(d)})},sName:"pagination"});return b}function ma(a,b){var c=a._iDisplayStart;if(b=="first")a._iDisplayStart=0;else if(b=="previous"){a._iDisplayStart=a._iDisplayLength>=0?a._iDisplayStart-a._iDisplayLength:0;if(a._iDisplayStart<0)a._iDisplayStart=0}else if(b=="next")if(a._iDisplayLength>=0){if(a._iDisplayStart+a._iDisplayLength<a.fnRecordsDisplay())a._iDisplayStart+=a._iDisplayLength}else a._iDisplayStart=0;else if(b=="last")if(a._iDisplayLength>=0){b=parseInt((a.fnRecordsDisplay()-
94
+ 1)/a._iDisplayLength,10)+1;a._iDisplayStart=(b-1)*a._iDisplayLength}else a._iDisplayStart=0;else J(a,0,"Unknown paging action: "+b);i(a.oInstance).trigger("page",a);return c!=a._iDisplayStart}function Ka(a){var b=p.createElement("div");b.className=a.oClasses.sInfo;if(typeof a.aanFeatures.i=="undefined"){a.aoDrawCallback.push({fn:Ra,sName:"information"});a.sTableId!==""&&b.setAttribute("id",a.sTableId+"_info")}return b}function Ra(a){if(!(!a.oFeatures.bInfo||a.aanFeatures.i.length===0)){var b=a._iDisplayStart+
95
+ 1,c=a.fnDisplayEnd(),d=a.fnRecordsTotal(),f=a.fnRecordsDisplay(),e=a.fnFormatNumber(b),h=a.fnFormatNumber(c),j=a.fnFormatNumber(d),k=a.fnFormatNumber(f);if(a.oScroll.bInfinite)e=a.fnFormatNumber(1);e=a.fnRecordsDisplay()===0&&a.fnRecordsDisplay()==a.fnRecordsTotal()?a.oLanguage.sInfoEmpty+a.oLanguage.sInfoPostFix:a.fnRecordsDisplay()===0?a.oLanguage.sInfoEmpty+" "+a.oLanguage.sInfoFiltered.replace("_MAX_",j)+a.oLanguage.sInfoPostFix:a.fnRecordsDisplay()==a.fnRecordsTotal()?a.oLanguage.sInfo.replace("_START_",
96
+ e).replace("_END_",h).replace("_TOTAL_",k)+a.oLanguage.sInfoPostFix:a.oLanguage.sInfo.replace("_START_",e).replace("_END_",h).replace("_TOTAL_",k)+" "+a.oLanguage.sInfoFiltered.replace("_MAX_",a.fnFormatNumber(a.fnRecordsTotal()))+a.oLanguage.sInfoPostFix;if(a.oLanguage.fnInfoCallback!==null)e=a.oLanguage.fnInfoCallback(a,b,c,d,f,e);a=a.aanFeatures.i;b=0;for(c=a.length;b<c;b++)i(a[b]).html(e)}}function Ga(a){if(a.oScroll.bInfinite)return null;var b='<select size="1" '+(a.sTableId===""?"":'name="'+
97
+ a.sTableId+'_length"')+">",c,d;if(a.aLengthMenu.length==2&&typeof a.aLengthMenu[0]=="object"&&typeof a.aLengthMenu[1]=="object"){c=0;for(d=a.aLengthMenu[0].length;c<d;c++)b+='<option value="'+a.aLengthMenu[0][c]+'">'+a.aLengthMenu[1][c]+"</option>"}else{c=0;for(d=a.aLengthMenu.length;c<d;c++)b+='<option value="'+a.aLengthMenu[c]+'">'+a.aLengthMenu[c]+"</option>"}b+="</select>";var f=p.createElement("div");a.sTableId!==""&&typeof a.aanFeatures.l=="undefined"&&f.setAttribute("id",a.sTableId+"_length");
98
+ f.className=a.oClasses.sLength;f.innerHTML="<label>"+a.oLanguage.sLengthMenu.replace("_MENU_",b)+"</label>";i('select option[value="'+a._iDisplayLength+'"]',f).attr("selected",true);i("select",f).bind("change.DT",function(){var e=i(this).val(),h=a.aanFeatures.l;c=0;for(d=h.length;c<d;c++)h[c]!=this.parentNode&&i("select",h[c]).val(e);a._iDisplayLength=parseInt(e,10);E(a);if(a.fnDisplayEnd()==a.fnRecordsDisplay()){a._iDisplayStart=a.fnDisplayEnd()-a._iDisplayLength;if(a._iDisplayStart<0)a._iDisplayStart=
99
+ 0}if(a._iDisplayLength==-1)a._iDisplayStart=0;C(a)});return f}function Ia(a){var b=p.createElement("div");a.sTableId!==""&&typeof a.aanFeatures.r=="undefined"&&b.setAttribute("id",a.sTableId+"_processing");b.innerHTML=a.oLanguage.sProcessing;b.className=a.oClasses.sProcessing;a.nTable.parentNode.insertBefore(b,a.nTable);return b}function K(a,b){if(a.oFeatures.bProcessing){a=a.aanFeatures.r;for(var c=0,d=a.length;c<d;c++)a[c].style.visibility=b?"visible":"hidden"}}function Na(a,b){for(var c=-1,d=0;d<
100
+ a.aoColumns.length;d++){a.aoColumns[d].bVisible===true&&c++;if(c==b)return d}return null}function ta(a,b){for(var c=-1,d=0;d<a.aoColumns.length;d++){a.aoColumns[d].bVisible===true&&c++;if(d==b)return a.aoColumns[d].bVisible===true?c:null}return null}function W(a,b){var c,d;c=a._iDisplayStart;for(d=a._iDisplayEnd;c<d;c++)if(a.aoData[a.aiDisplay[c]].nTr==b)return a.aiDisplay[c];c=0;for(d=a.aoData.length;c<d;c++)if(a.aoData[c].nTr==b)return c;return null}function Z(a){for(var b=0,c=0;c<a.aoColumns.length;c++)a.aoColumns[c].bVisible===
101
+ true&&b++;return b}function E(a){a._iDisplayEnd=a.oFeatures.bPaginate===false?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength>a.aiDisplay.length||a._iDisplayLength==-1?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength}function Sa(a,b){if(!a||a===null||a==="")return 0;if(typeof b=="undefined")b=p.getElementsByTagName("body")[0];var c=p.createElement("div");c.style.width=q(a);b.appendChild(c);a=c.offsetWidth;b.removeChild(c);return a}function ga(a){var b=0,c,d=0,f=a.aoColumns.length,e,h=i("th",
102
+ a.nTHead);for(e=0;e<f;e++)if(a.aoColumns[e].bVisible){d++;if(a.aoColumns[e].sWidth!==null){c=Sa(a.aoColumns[e].sWidthOrig,a.nTable.parentNode);if(c!==null)a.aoColumns[e].sWidth=q(c);b++}}if(f==h.length&&b===0&&d==f&&a.oScroll.sX===""&&a.oScroll.sY==="")for(e=0;e<a.aoColumns.length;e++){c=i(h[e]).width();if(c!==null)a.aoColumns[e].sWidth=q(c)}else{b=a.nTable.cloneNode(false);e=a.nTHead.cloneNode(true);d=p.createElement("tbody");c=p.createElement("tr");b.removeAttribute("id");b.appendChild(e);if(a.nTFoot!==
103
+ null){b.appendChild(a.nTFoot.cloneNode(true));P(function(k){k.style.width=""},b.getElementsByTagName("tr"))}b.appendChild(d);d.appendChild(c);d=i("thead th",b);if(d.length===0)d=i("tbody tr:eq(0)>td",b);h=S(a,e);for(e=d=0;e<f;e++){var j=a.aoColumns[e];if(j.bVisible&&j.sWidthOrig!==null&&j.sWidthOrig!=="")h[e-d].style.width=q(j.sWidthOrig);else if(j.bVisible)h[e-d].style.width="";else d++}for(e=0;e<f;e++)if(a.aoColumns[e].bVisible){d=Ta(a,e);if(d!==null){d=d.cloneNode(true);if(a.aoColumns[e].sContentPadding!==
104
+ "")d.innerHTML+=a.aoColumns[e].sContentPadding;c.appendChild(d)}}f=a.nTable.parentNode;f.appendChild(b);if(a.oScroll.sX!==""&&a.oScroll.sXInner!=="")b.style.width=q(a.oScroll.sXInner);else if(a.oScroll.sX!==""){b.style.width="";if(i(b).width()<f.offsetWidth)b.style.width=q(f.offsetWidth)}else if(a.oScroll.sY!=="")b.style.width=q(f.offsetWidth);b.style.visibility="hidden";Ua(a,b);f=i("tbody tr:eq(0)",b).children();if(f.length===0)f=S(a,i("thead",b)[0]);if(a.oScroll.sX!==""){for(e=d=c=0;e<a.aoColumns.length;e++)if(a.aoColumns[e].bVisible){c+=
105
+ a.aoColumns[e].sWidthOrig===null?i(f[d]).outerWidth():parseInt(a.aoColumns[e].sWidth.replace("px",""),10)+(i(f[d]).outerWidth()-i(f[d]).width());d++}b.style.width=q(c);a.nTable.style.width=q(c)}for(e=d=0;e<a.aoColumns.length;e++)if(a.aoColumns[e].bVisible){c=i(f[d]).width();if(c!==null&&c>0)a.aoColumns[e].sWidth=q(c);d++}a.nTable.style.width=q(i(b).outerWidth());b.parentNode.removeChild(b)}}function Ua(a,b){if(a.oScroll.sX===""&&a.oScroll.sY!==""){i(b).width();b.style.width=q(i(b).outerWidth()-a.oScroll.iBarWidth)}else if(a.oScroll.sX!==
106
+ "")b.style.width=q(i(b).outerWidth())}function Ta(a,b){var c=Va(a,b);if(c<0)return null;if(a.aoData[c].nTr===null){var d=p.createElement("td");d.innerHTML=G(a,c,b,"");return d}return Q(a,c)[b]}function Va(a,b){for(var c=-1,d=-1,f=0;f<a.aoData.length;f++){var e=G(a,f,b,"display")+"";e=e.replace(/<.*?>/g,"");if(e.length>c){c=e.length;d=f}}return d}function q(a){if(a===null)return"0px";if(typeof a=="number"){if(a<0)return"0px";return a+"px"}var b=a.charCodeAt(a.length-1);if(b<48||b>57)return a;return a+
107
+ "px"}function Za(a,b){if(a.length!=b.length)return 1;for(var c=0;c<a.length;c++)if(a[c]!=b[c])return 2;return 0}function ia(a){for(var b=n.aTypes,c=b.length,d=0;d<c;d++){var f=b[d](a);if(f!==null)return f}return"string"}function A(a){for(var b=0;b<D.length;b++)if(D[b].nTable==a)return D[b];return null}function ca(a){for(var b=[],c=a.aoData.length,d=0;d<c;d++)b.push(a.aoData[d]._aData);return b}function ba(a){for(var b=[],c=0,d=a.aoData.length;c<d;c++)a.aoData[c].nTr!==null&&b.push(a.aoData[c].nTr);
108
+ return b}function Q(a,b){var c=[],d,f,e,h,j;f=0;var k=a.aoData.length;if(typeof b!="undefined"){f=b;k=b+1}for(f=f;f<k;f++){j=a.aoData[f];if(j.nTr!==null){b=[];e=0;for(h=j.nTr.childNodes.length;e<h;e++){d=j.nTr.childNodes[e].nodeName.toLowerCase();if(d=="td"||d=="th")b.push(j.nTr.childNodes[e])}e=d=0;for(h=a.aoColumns.length;e<h;e++)if(a.aoColumns[e].bVisible)c.push(b[e-d]);else{c.push(j._anHidden[e]);d++}}}return c}function sa(a){return a.replace(new RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^)",
109
+ "g"),"\\$1")}function ua(a,b){for(var c=-1,d=0,f=a.length;d<f;d++)if(a[d]==b)c=d;else a[d]>b&&a[d]--;c!=-1&&a.splice(c,1)}function Fa(a,b){b=b.split(",");for(var c=[],d=0,f=a.aoColumns.length;d<f;d++)for(var e=0;e<f;e++)if(a.aoColumns[d].sName==b[e]){c.push(e);break}return c}function ka(a){for(var b="",c=0,d=a.aoColumns.length;c<d;c++)b+=a.aoColumns[c].sName+",";if(b.length==d)return"";return b.slice(0,-1)}function J(a,b,c){a=a.sTableId===""?"DataTables warning: "+c:"DataTables warning (table id = '"+
110
+ a.sTableId+"'): "+c;if(b===0)if(n.sErrMode=="alert")alert(a);else throw a;else typeof console!="undefined"&&typeof console.log!="undefined"&&console.log(a)}function la(a){a.aoData.splice(0,a.aoData.length);a.aiDisplayMaster.splice(0,a.aiDisplayMaster.length);a.aiDisplay.splice(0,a.aiDisplay.length);E(a)}function va(a){if(!(!a.oFeatures.bStateSave||typeof a.bDestroying!="undefined")){var b,c,d,f="{";f+='"iCreate":'+(new Date).getTime()+",";f+='"iStart":'+(a.oScroll.bInfinite?0:a._iDisplayStart)+",";
111
+ f+='"iEnd":'+(a.oScroll.bInfinite?a._iDisplayLength:a._iDisplayEnd)+",";f+='"iLength":'+a._iDisplayLength+",";f+='"sFilter":"'+encodeURIComponent(a.oPreviousSearch.sSearch)+'",';f+='"sFilterEsc":'+!a.oPreviousSearch.bRegex+",";f+='"aaSorting":[ ';for(b=0;b<a.aaSorting.length;b++)f+="["+a.aaSorting[b][0]+',"'+a.aaSorting[b][1]+'"],';f=f.substring(0,f.length-1);f+="],";f+='"aaSearchCols":[ ';for(b=0;b<a.aoPreSearchCols.length;b++)f+='["'+encodeURIComponent(a.aoPreSearchCols[b].sSearch)+'",'+!a.aoPreSearchCols[b].bRegex+
112
+ "],";f=f.substring(0,f.length-1);f+="],";f+='"abVisCols":[ ';for(b=0;b<a.aoColumns.length;b++)f+=a.aoColumns[b].bVisible+",";f=f.substring(0,f.length-1);f+="]";b=0;for(c=a.aoStateSave.length;b<c;b++){d=a.aoStateSave[b].fn(a,f);if(d!=="")f=d}f+="}";Wa(a.sCookiePrefix+a.sInstance,f,a.iCookieDuration,a.sCookiePrefix,a.fnCookieCallback)}}function Xa(a,b){if(a.oFeatures.bStateSave){var c,d,f;d=wa(a.sCookiePrefix+a.sInstance);if(d!==null&&d!==""){try{c=typeof i.parseJSON=="function"?i.parseJSON(d.replace(/'/g,
113
+ '"')):eval("("+d+")")}catch(e){return}d=0;for(f=a.aoStateLoad.length;d<f;d++)if(!a.aoStateLoad[d].fn(a,c))return;a.oLoadedState=i.extend(true,{},c);a._iDisplayStart=c.iStart;a.iInitDisplayStart=c.iStart;a._iDisplayEnd=c.iEnd;a._iDisplayLength=c.iLength;a.oPreviousSearch.sSearch=decodeURIComponent(c.sFilter);a.aaSorting=c.aaSorting.slice();a.saved_aaSorting=c.aaSorting.slice();if(typeof c.sFilterEsc!="undefined")a.oPreviousSearch.bRegex=!c.sFilterEsc;if(typeof c.aaSearchCols!="undefined")for(d=0;d<
114
+ c.aaSearchCols.length;d++)a.aoPreSearchCols[d]={sSearch:decodeURIComponent(c.aaSearchCols[d][0]),bRegex:!c.aaSearchCols[d][1]};if(typeof c.abVisCols!="undefined"){b.saved_aoColumns=[];for(d=0;d<c.abVisCols.length;d++){b.saved_aoColumns[d]={};b.saved_aoColumns[d].bVisible=c.abVisCols[d]}}}}}function Wa(a,b,c,d,f){var e=new Date;e.setTime(e.getTime()+c*1E3);c=za.location.pathname.split("/");a=a+"_"+c.pop().replace(/[\/:]/g,"").toLowerCase();var h;if(f!==null){h=typeof i.parseJSON=="function"?i.parseJSON(b):
115
+ eval("("+b+")");b=f(a,h,e.toGMTString(),c.join("/")+"/")}else b=a+"="+encodeURIComponent(b)+"; expires="+e.toGMTString()+"; path="+c.join("/")+"/";f="";e=9999999999999;if((wa(a)!==null?p.cookie.length:b.length+p.cookie.length)+10>4096){a=p.cookie.split(";");for(var j=0,k=a.length;j<k;j++)if(a[j].indexOf(d)!=-1){var m=a[j].split("=");try{h=eval("("+decodeURIComponent(m[1])+")")}catch(u){continue}if(typeof h.iCreate!="undefined"&&h.iCreate<e){f=m[0];e=h.iCreate}}if(f!=="")p.cookie=f+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+
116
+ c.join("/")+"/"}p.cookie=b}function wa(a){var b=za.location.pathname.split("/");a=a+"_"+b[b.length-1].replace(/[\/:]/g,"").toLowerCase()+"=";b=p.cookie.split(";");for(var c=0;c<b.length;c++){for(var d=b[c];d.charAt(0)==" ";)d=d.substring(1,d.length);if(d.indexOf(a)===0)return decodeURIComponent(d.substring(a.length,d.length))}return null}function Y(a,b){b=i(b).children("tr");var c,d,f,e,h,j,k,m,u=function(L,T,B){for(;typeof L[T][B]!="undefined";)B++;return B};a.splice(0,a.length);d=0;for(j=b.length;d<
117
+ j;d++)a.push([]);d=0;for(j=b.length;d<j;d++){f=0;for(k=b[d].childNodes.length;f<k;f++){c=b[d].childNodes[f];if(c.nodeName.toUpperCase()=="TD"||c.nodeName.toUpperCase()=="TH"){var r=c.getAttribute("colspan")*1,H=c.getAttribute("rowspan")*1;r=!r||r===0||r===1?1:r;H=!H||H===0||H===1?1:H;m=u(a,d,0);for(h=0;h<r;h++)for(e=0;e<H;e++){a[d+e][m+h]={cell:c,unique:r==1?true:false};a[d+e].nTr=b[d]}}}}}function S(a,b,c){var d=[];if(typeof c=="undefined"){c=a.aoHeader;if(typeof b!="undefined"){c=[];Y(c,b)}}b=0;
118
+ for(var f=c.length;b<f;b++)for(var e=0,h=c[b].length;e<h;e++)if(c[b][e].unique&&(typeof d[e]=="undefined"||!a.bSortCellsTop))d[e]=c[b][e].cell;return d}function Ya(){var a=p.createElement("p"),b=a.style;b.width="100%";b.height="200px";b.padding="0px";var c=p.createElement("div");b=c.style;b.position="absolute";b.top="0px";b.left="0px";b.visibility="hidden";b.width="200px";b.height="150px";b.padding="0px";b.overflow="hidden";c.appendChild(a);p.body.appendChild(c);b=a.offsetWidth;c.style.overflow="scroll";
119
+ a=a.offsetWidth;if(b==a)a=c.clientWidth;p.body.removeChild(c);return b-a}function P(a,b,c){for(var d=0,f=b.length;d<f;d++)for(var e=0,h=b[d].childNodes.length;e<h;e++)if(b[d].childNodes[e].nodeType==1)typeof c!="undefined"?a(b[d].childNodes[e],c[d].childNodes[e]):a(b[d].childNodes[e])}function o(a,b,c,d){if(typeof d=="undefined")d=c;if(typeof b[c]!="undefined")a[d]=b[c]}function fa(a,b,c){for(var d=[],f=0,e=a.aoColumns.length;f<e;f++)d.push(G(a,b,f,c));return d}function G(a,b,c,d){var f=a.aoColumns[c];
120
+ if((c=f.fnGetData(a.aoData[b]._aData))===undefined){if(a.iDrawError!=a.iDraw&&f.sDefaultContent===null){J(a,0,"Requested unknown parameter '"+f.mDataProp+"' from the data source for row "+b);a.iDrawError=a.iDraw}return f.sDefaultContent}if(c===null&&f.sDefaultContent!==null)c=f.sDefaultContent;else if(typeof c=="function")return c();if(d=="display"&&c===null)return"";return c}function O(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d)}function aa(a){if(a===null)return function(){return null};
121
+ else if(typeof a=="function")return function(c){return a(c)};else if(typeof a=="string"&&a.indexOf(".")!=-1){var b=a.split(".");return b.length==2?function(c){return c[b[0]][b[1]]}:b.length==3?function(c){return c[b[0]][b[1]][b[2]]}:function(c){for(var d=0,f=b.length;d<f;d++)c=c[b[d]];return c}}else return function(c){return c[a]}}function Ba(a){if(a===null)return function(){};else if(typeof a=="function")return function(c,d){return a(c,d)};else if(typeof a=="string"&&a.indexOf(".")!=-1){var b=a.split(".");
122
+ return b.length==2?function(c,d){c[b[0]][b[1]]=d}:b.length==3?function(c,d){c[b[0]][b[1]][b[2]]=d}:function(c,d){for(var f=0,e=b.length-1;f<e;f++)c=c[b[f]];c[b[b.length-1]]=d}}else return function(c,d){c[a]=d}}this.oApi={};this.fnDraw=function(a){var b=A(this[n.iApiIndex]);if(typeof a!="undefined"&&a===false){E(b);C(b)}else da(b)};this.fnFilter=function(a,b,c,d,f){var e=A(this[n.iApiIndex]);if(e.oFeatures.bFilter){if(typeof c=="undefined")c=false;if(typeof d=="undefined")d=true;if(typeof f=="undefined")f=
123
+ true;if(typeof b=="undefined"||b===null){N(e,{sSearch:a,bRegex:c,bSmart:d},1);if(f&&typeof e.aanFeatures.f!="undefined"){b=e.aanFeatures.f;c=0;for(d=b.length;c<d;c++)i("input",b[c]).val(a)}}else{e.aoPreSearchCols[b].sSearch=a;e.aoPreSearchCols[b].bRegex=c;e.aoPreSearchCols[b].bSmart=d;N(e,e.oPreviousSearch,1)}}};this.fnSettings=function(){return A(this[n.iApiIndex])};this.fnVersionCheck=n.fnVersionCheck;this.fnSort=function(a){var b=A(this[n.iApiIndex]);b.aaSorting=a;R(b)};this.fnSortListener=function(a,
124
+ b,c){ja(A(this[n.iApiIndex]),a,b,c)};this.fnAddData=function(a,b){if(a.length===0)return[];var c=[],d,f=A(this[n.iApiIndex]);if(typeof a[0]=="object")for(var e=0;e<a.length;e++){d=v(f,a[e]);if(d==-1)return c;c.push(d)}else{d=v(f,a);if(d==-1)return c;c.push(d)}f.aiDisplay=f.aiDisplayMaster.slice();if(typeof b=="undefined"||b)da(f);return c};this.fnDeleteRow=function(a,b,c){var d=A(this[n.iApiIndex]);a=typeof a=="object"?W(d,a):a;var f=d.aoData.splice(a,1),e=i.inArray(a,d.aiDisplay);d.asDataSearch.splice(e,
125
+ 1);ua(d.aiDisplayMaster,a);ua(d.aiDisplay,a);typeof b=="function"&&b.call(this,d,f);if(d._iDisplayStart>=d.aiDisplay.length){d._iDisplayStart-=d._iDisplayLength;if(d._iDisplayStart<0)d._iDisplayStart=0}if(typeof c=="undefined"||c){E(d);C(d)}return f};this.fnClearTable=function(a){var b=A(this[n.iApiIndex]);la(b);if(typeof a=="undefined"||a)C(b)};this.fnOpen=function(a,b,c){var d=A(this[n.iApiIndex]);this.fnClose(a);var f=p.createElement("tr"),e=p.createElement("td");f.appendChild(e);e.className=c;
126
+ e.colSpan=Z(d);if(typeof b.jquery!="undefined"||typeof b=="object")e.appendChild(b);else e.innerHTML=b;b=i("tr",d.nTBody);i.inArray(a,b)!=-1&&i(f).insertAfter(a);d.aoOpenRows.push({nTr:f,nParent:a});return f};this.fnClose=function(a){for(var b=A(this[n.iApiIndex]),c=0;c<b.aoOpenRows.length;c++)if(b.aoOpenRows[c].nParent==a){(a=b.aoOpenRows[c].nTr.parentNode)&&a.removeChild(b.aoOpenRows[c].nTr);b.aoOpenRows.splice(c,1);return 0}return 1};this.fnGetData=function(a,b){var c=A(this[n.iApiIndex]);if(typeof a!=
127
+ "undefined"){a=typeof a=="object"?W(c,a):a;if(typeof b!="undefined")return G(c,a,b,"");return typeof c.aoData[a]!="undefined"?c.aoData[a]._aData:null}return ca(c)};this.fnGetNodes=function(a){var b=A(this[n.iApiIndex]);if(typeof a!="undefined")return typeof b.aoData[a]!="undefined"?b.aoData[a].nTr:null;return ba(b)};this.fnGetPosition=function(a){var b=A(this[n.iApiIndex]),c=a.nodeName.toUpperCase();if(c=="TR")return W(b,a);else if(c=="TD"||c=="TH"){c=W(b,a.parentNode);for(var d=Q(b,c),f=0;f<b.aoColumns.length;f++)if(d[f]==
128
+ a)return[c,ta(b,f),f]}return null};this.fnUpdate=function(a,b,c,d,f){var e=A(this[n.iApiIndex]);b=typeof b=="object"?W(e,b):b;if(i.isArray(a)&&typeof a=="object"){e.aoData[b]._aData=a.slice();for(c=0;c<e.aoColumns.length;c++)this.fnUpdate(G(e,b,c),b,c,false,false)}else if(a!==null&&typeof a=="object"){e.aoData[b]._aData=i.extend(true,{},a);for(c=0;c<e.aoColumns.length;c++)this.fnUpdate(G(e,b,c),b,c,false,false)}else{a=a;O(e,b,c,a);if(e.aoColumns[c].fnRender!==null){a=e.aoColumns[c].fnRender({iDataRow:b,
129
+ iDataColumn:c,aData:e.aoData[b]._aData,oSettings:e});e.aoColumns[c].bUseRendered&&O(e,b,c,a)}if(e.aoData[b].nTr!==null)Q(e,b)[c].innerHTML=a}c=i.inArray(b,e.aiDisplay);e.asDataSearch[c]=ra(e,fa(e,b,"filter"));if(typeof f=="undefined"||f)ea(e);if(typeof d=="undefined"||d)da(e);return 0};this.fnSetColumnVis=function(a,b,c){var d=A(this[n.iApiIndex]),f,e;e=d.aoColumns.length;var h,j;if(d.aoColumns[a].bVisible!=b){if(b){for(f=j=0;f<a;f++)d.aoColumns[f].bVisible&&j++;j=j>=Z(d);if(!j)for(f=a;f<e;f++)if(d.aoColumns[f].bVisible){h=
130
+ f;break}f=0;for(e=d.aoData.length;f<e;f++)if(d.aoData[f].nTr!==null)j?d.aoData[f].nTr.appendChild(d.aoData[f]._anHidden[a]):d.aoData[f].nTr.insertBefore(d.aoData[f]._anHidden[a],Q(d,f)[h])}else{f=0;for(e=d.aoData.length;f<e;f++)if(d.aoData[f].nTr!==null){h=Q(d,f)[a];d.aoData[f]._anHidden[a]=h;h.parentNode.removeChild(h)}}d.aoColumns[a].bVisible=b;M(d,d.aoHeader);d.nTFoot&&M(d,d.aoFooter);f=0;for(e=d.aoOpenRows.length;f<e;f++)d.aoOpenRows[f].nTr.colSpan=Z(d);if(typeof c=="undefined"||c){ea(d);C(d)}va(d)}};
131
+ this.fnPageChange=function(a,b){var c=A(this[n.iApiIndex]);ma(c,a);E(c);if(typeof b=="undefined"||b)C(c)};this.fnDestroy=function(){var a=A(this[n.iApiIndex]),b=a.nTableWrapper.parentNode,c=a.nTBody,d,f;a.bDestroying=true;d=0;for(f=a.aoDestroyCallback.length;d<f;d++)a.aoDestroyCallback[d].fn();d=0;for(f=a.aoColumns.length;d<f;d++)a.aoColumns[d].bVisible===false&&this.fnSetColumnVis(d,true);i(a.nTableWrapper).find("*").andSelf().unbind(".DT");i("tbody>tr>td."+a.oClasses.sRowEmpty,a.nTable).parent().remove();
132
+ if(a.nTable!=a.nTHead.parentNode){i(a.nTable).children("thead").remove();a.nTable.appendChild(a.nTHead)}if(a.nTFoot&&a.nTable!=a.nTFoot.parentNode){i(a.nTable).children("tfoot").remove();a.nTable.appendChild(a.nTFoot)}a.nTable.parentNode.removeChild(a.nTable);i(a.nTableWrapper).remove();a.aaSorting=[];a.aaSortingFixed=[];V(a);i(ba(a)).removeClass(a.asStripeClasses.join(" "));if(a.bJUI){i("th",a.nTHead).removeClass([n.oStdClasses.sSortable,n.oJUIClasses.sSortableAsc,n.oJUIClasses.sSortableDesc,n.oJUIClasses.sSortableNone].join(" "));
133
+ i("th span."+n.oJUIClasses.sSortIcon,a.nTHead).remove();i("th",a.nTHead).each(function(){var e=i("div."+n.oJUIClasses.sSortJUIWrapper,this),h=e.contents();i(this).append(h);e.remove()})}else i("th",a.nTHead).removeClass([n.oStdClasses.sSortable,n.oStdClasses.sSortableAsc,n.oStdClasses.sSortableDesc,n.oStdClasses.sSortableNone].join(" "));a.nTableReinsertBefore?b.insertBefore(a.nTable,a.nTableReinsertBefore):b.appendChild(a.nTable);d=0;for(f=a.aoData.length;d<f;d++)a.aoData[d].nTr!==null&&c.appendChild(a.aoData[d].nTr);
134
+ if(a.oFeatures.bAutoWidth===true)a.nTable.style.width=q(a.sDestroyWidth);i(c).children("tr:even").addClass(a.asDestroyStripes[0]);i(c).children("tr:odd").addClass(a.asDestroyStripes[1]);d=0;for(f=D.length;d<f;d++)D[d]==a&&D.splice(d,1);a=null};this.fnAdjustColumnSizing=function(a){var b=A(this[n.iApiIndex]);ea(b);if(typeof a=="undefined"||a)this.fnDraw(false);else if(b.oScroll.sX!==""||b.oScroll.sY!=="")this.oApi._fnScrollDraw(b)};for(var xa in n.oApi)if(xa)this[xa]=s(xa);this.oApi._fnExternApiFunc=
135
+ s;this.oApi._fnInitialise=t;this.oApi._fnInitComplete=w;this.oApi._fnLanguageProcess=y;this.oApi._fnAddColumn=F;this.oApi._fnColumnOptions=x;this.oApi._fnAddData=v;this.oApi._fnCreateTr=z;this.oApi._fnGatherData=$;this.oApi._fnBuildHead=X;this.oApi._fnDrawHead=M;this.oApi._fnDraw=C;this.oApi._fnReDraw=da;this.oApi._fnAjaxUpdate=Ca;this.oApi._fnAjaxParameters=Da;this.oApi._fnAjaxUpdateDraw=Ea;this.oApi._fnServerParams=ha;this.oApi._fnAddOptionsHtml=Aa;this.oApi._fnFeatureHtmlTable=Ja;this.oApi._fnScrollDraw=
136
+ Ma;this.oApi._fnAdjustColumnSizing=ea;this.oApi._fnFeatureHtmlFilter=Ha;this.oApi._fnFilterComplete=N;this.oApi._fnFilterCustom=Qa;this.oApi._fnFilterColumn=Pa;this.oApi._fnFilter=Oa;this.oApi._fnBuildSearchArray=oa;this.oApi._fnBuildSearchRow=ra;this.oApi._fnFilterCreateSearch=pa;this.oApi._fnDataToSearch=qa;this.oApi._fnSort=R;this.oApi._fnSortAttachListener=ja;this.oApi._fnSortingClasses=V;this.oApi._fnFeatureHtmlPaginate=La;this.oApi._fnPageChange=ma;this.oApi._fnFeatureHtmlInfo=Ka;this.oApi._fnUpdateInfo=
137
+ Ra;this.oApi._fnFeatureHtmlLength=Ga;this.oApi._fnFeatureHtmlProcessing=Ia;this.oApi._fnProcessingDisplay=K;this.oApi._fnVisibleToColumnIndex=Na;this.oApi._fnColumnIndexToVisible=ta;this.oApi._fnNodeToDataIndex=W;this.oApi._fnVisbleColumns=Z;this.oApi._fnCalculateEnd=E;this.oApi._fnConvertToWidth=Sa;this.oApi._fnCalculateColumnWidths=ga;this.oApi._fnScrollingWidthAdjust=Ua;this.oApi._fnGetWidestNode=Ta;this.oApi._fnGetMaxLenString=Va;this.oApi._fnStringToCss=q;this.oApi._fnArrayCmp=Za;this.oApi._fnDetectType=
138
+ ia;this.oApi._fnSettingsFromNode=A;this.oApi._fnGetDataMaster=ca;this.oApi._fnGetTrNodes=ba;this.oApi._fnGetTdNodes=Q;this.oApi._fnEscapeRegex=sa;this.oApi._fnDeleteIndex=ua;this.oApi._fnReOrderIndex=Fa;this.oApi._fnColumnOrdering=ka;this.oApi._fnLog=J;this.oApi._fnClearTable=la;this.oApi._fnSaveState=va;this.oApi._fnLoadState=Xa;this.oApi._fnCreateCookie=Wa;this.oApi._fnReadCookie=wa;this.oApi._fnDetectHeader=Y;this.oApi._fnGetUniqueThs=S;this.oApi._fnScrollBarWidth=Ya;this.oApi._fnApplyToChildren=
139
+ P;this.oApi._fnMap=o;this.oApi._fnGetRowData=fa;this.oApi._fnGetCellData=G;this.oApi._fnSetCellData=O;this.oApi._fnGetObjectDataFn=aa;this.oApi._fnSetObjectDataFn=Ba;var ya=this;return this.each(function(){var a=0,b,c,d,f;a=0;for(b=D.length;a<b;a++){if(D[a].nTable==this)if(typeof g=="undefined"||typeof g.bRetrieve!="undefined"&&g.bRetrieve===true)return D[a].oInstance;else if(typeof g.bDestroy!="undefined"&&g.bDestroy===true){D[a].oInstance.fnDestroy();break}else{J(D[a],0,"Cannot reinitialise DataTable.\n\nTo retrieve the DataTables object for this table, please pass either no arguments to the dataTable() function, or set bRetrieve to true. Alternatively, to destory the old table and create a new one, set bDestroy to true (note that a lot of changes to the configuration can be made through the API which is usually much faster).");
140
+ return}if(D[a].sTableId!==""&&D[a].sTableId==this.getAttribute("id")){D.splice(a,1);break}}var e=new l;D.push(e);var h=false,j=false;a=this.getAttribute("id");if(a!==null){e.sTableId=a;e.sInstance=a}else e.sInstance=n._oExternConfig.iNextUnique++;if(this.nodeName.toLowerCase()!="table")J(e,0,"Attempted to initialise DataTables on a node which is not a table: "+this.nodeName);else{e.nTable=this;e.oInstance=ya.length==1?ya:i(this).dataTable();e.oApi=ya.oApi;e.sDestroyWidth=i(this).width();if(typeof g!=
141
+ "undefined"&&g!==null){e.oInit=g;o(e.oFeatures,g,"bPaginate");o(e.oFeatures,g,"bLengthChange");o(e.oFeatures,g,"bFilter");o(e.oFeatures,g,"bSort");o(e.oFeatures,g,"bInfo");o(e.oFeatures,g,"bProcessing");o(e.oFeatures,g,"bAutoWidth");o(e.oFeatures,g,"bSortClasses");o(e.oFeatures,g,"bServerSide");o(e.oFeatures,g,"bDeferRender");o(e.oScroll,g,"sScrollX","sX");o(e.oScroll,g,"sScrollXInner","sXInner");o(e.oScroll,g,"sScrollY","sY");o(e.oScroll,g,"bScrollCollapse","bCollapse");o(e.oScroll,g,"bScrollInfinite",
142
+ "bInfinite");o(e.oScroll,g,"iScrollLoadGap","iLoadGap");o(e.oScroll,g,"bScrollAutoCss","bAutoCss");o(e,g,"asStripClasses","asStripeClasses");o(e,g,"asStripeClasses");o(e,g,"fnPreDrawCallback");o(e,g,"fnRowCallback");o(e,g,"fnHeaderCallback");o(e,g,"fnFooterCallback");o(e,g,"fnCookieCallback");o(e,g,"fnInitComplete");o(e,g,"fnServerData");o(e,g,"fnFormatNumber");o(e,g,"aaSorting");o(e,g,"aaSortingFixed");o(e,g,"aLengthMenu");o(e,g,"sPaginationType");o(e,g,"sAjaxSource");o(e,g,"sAjaxDataProp");o(e,
143
+ g,"iCookieDuration");o(e,g,"sCookiePrefix");o(e,g,"sDom");o(e,g,"bSortCellsTop");o(e,g,"oSearch","oPreviousSearch");o(e,g,"aoSearchCols","aoPreSearchCols");o(e,g,"iDisplayLength","_iDisplayLength");o(e,g,"bJQueryUI","bJUI");o(e.oLanguage,g,"fnInfoCallback");typeof g.fnDrawCallback=="function"&&e.aoDrawCallback.push({fn:g.fnDrawCallback,sName:"user"});typeof g.fnServerParams=="function"&&e.aoServerParams.push({fn:g.fnServerParams,sName:"user"});typeof g.fnStateSaveCallback=="function"&&e.aoStateSave.push({fn:g.fnStateSaveCallback,
144
+ sName:"user"});typeof g.fnStateLoadCallback=="function"&&e.aoStateLoad.push({fn:g.fnStateLoadCallback,sName:"user"});if(e.oFeatures.bServerSide&&e.oFeatures.bSort&&e.oFeatures.bSortClasses)e.aoDrawCallback.push({fn:V,sName:"server_side_sort_classes"});else e.oFeatures.bDeferRender&&e.aoDrawCallback.push({fn:V,sName:"defer_sort_classes"});if(typeof g.bJQueryUI!="undefined"&&g.bJQueryUI){e.oClasses=n.oJUIClasses;if(typeof g.sDom=="undefined")e.sDom='<"H"lfr>t<"F"ip>'}if(e.oScroll.sX!==""||e.oScroll.sY!==
145
+ "")e.oScroll.iBarWidth=Ya();if(typeof g.iDisplayStart!="undefined"&&typeof e.iInitDisplayStart=="undefined"){e.iInitDisplayStart=g.iDisplayStart;e._iDisplayStart=g.iDisplayStart}if(typeof g.bStateSave!="undefined"){e.oFeatures.bStateSave=g.bStateSave;Xa(e,g);e.aoDrawCallback.push({fn:va,sName:"state_save"})}if(typeof g.iDeferLoading!="undefined"){e.bDeferLoading=true;e._iRecordsTotal=g.iDeferLoading;e._iRecordsDisplay=g.iDeferLoading}if(typeof g.aaData!="undefined")j=true;if(typeof g!="undefined"&&
146
+ typeof g.aoData!="undefined")g.aoColumns=g.aoData;if(typeof g.oLanguage!="undefined")if(typeof g.oLanguage.sUrl!="undefined"&&g.oLanguage.sUrl!==""){e.oLanguage.sUrl=g.oLanguage.sUrl;i.getJSON(e.oLanguage.sUrl,null,function(u){y(e,u,true)});h=true}else y(e,g.oLanguage,false)}else g={};if(typeof g.asStripClasses=="undefined"&&typeof g.asStripeClasses=="undefined"){e.asStripeClasses.push(e.oClasses.sStripeOdd);e.asStripeClasses.push(e.oClasses.sStripeEven)}c=false;d=i(this).children("tbody").children("tr");
147
+ a=0;for(b=e.asStripeClasses.length;a<b;a++)if(d.filter(":lt(2)").hasClass(e.asStripeClasses[a])){c=true;break}if(c){e.asDestroyStripes=["",""];if(i(d[0]).hasClass(e.oClasses.sStripeOdd))e.asDestroyStripes[0]+=e.oClasses.sStripeOdd+" ";if(i(d[0]).hasClass(e.oClasses.sStripeEven))e.asDestroyStripes[0]+=e.oClasses.sStripeEven;if(i(d[1]).hasClass(e.oClasses.sStripeOdd))e.asDestroyStripes[1]+=e.oClasses.sStripeOdd+" ";if(i(d[1]).hasClass(e.oClasses.sStripeEven))e.asDestroyStripes[1]+=e.oClasses.sStripeEven;
148
+ d.removeClass(e.asStripeClasses.join(" "))}c=[];var k;a=this.getElementsByTagName("thead");if(a.length!==0){Y(e.aoHeader,a[0]);c=S(e)}if(typeof g.aoColumns=="undefined"){k=[];a=0;for(b=c.length;a<b;a++)k.push(null)}else k=g.aoColumns;a=0;for(b=k.length;a<b;a++){if(typeof g.saved_aoColumns!="undefined"&&g.saved_aoColumns.length==b){if(k[a]===null)k[a]={};k[a].bVisible=g.saved_aoColumns[a].bVisible}F(e,c?c[a]:null)}if(typeof g.aoColumnDefs!="undefined")for(a=g.aoColumnDefs.length-1;a>=0;a--){var m=
149
+ g.aoColumnDefs[a].aTargets;i.isArray(m)||J(e,1,"aTargets must be an array of targets, not a "+typeof m);c=0;for(d=m.length;c<d;c++)if(typeof m[c]=="number"&&m[c]>=0){for(;e.aoColumns.length<=m[c];)F(e);x(e,m[c],g.aoColumnDefs[a])}else if(typeof m[c]=="number"&&m[c]<0)x(e,e.aoColumns.length+m[c],g.aoColumnDefs[a]);else if(typeof m[c]=="string"){b=0;for(f=e.aoColumns.length;b<f;b++)if(m[c]=="_all"||i(e.aoColumns[b].nTh).hasClass(m[c]))x(e,b,g.aoColumnDefs[a])}}if(typeof k!="undefined"){a=0;for(b=k.length;a<
150
+ b;a++)x(e,a,k[a])}a=0;for(b=e.aaSorting.length;a<b;a++){if(e.aaSorting[a][0]>=e.aoColumns.length)e.aaSorting[a][0]=0;k=e.aoColumns[e.aaSorting[a][0]];if(typeof e.aaSorting[a][2]=="undefined")e.aaSorting[a][2]=0;if(typeof g.aaSorting=="undefined"&&typeof e.saved_aaSorting=="undefined")e.aaSorting[a][1]=k.asSorting[0];c=0;for(d=k.asSorting.length;c<d;c++)if(e.aaSorting[a][1]==k.asSorting[c]){e.aaSorting[a][2]=c;break}}V(e);a=i(this).children("thead");if(a.length===0){a=[p.createElement("thead")];this.appendChild(a[0])}e.nTHead=
151
+ a[0];a=i(this).children("tbody");if(a.length===0){a=[p.createElement("tbody")];this.appendChild(a[0])}e.nTBody=a[0];a=i(this).children("tfoot");if(a.length>0){e.nTFoot=a[0];Y(e.aoFooter,e.nTFoot)}if(j)for(a=0;a<g.aaData.length;a++)v(e,g.aaData[a]);else $(e);e.aiDisplay=e.aiDisplayMaster.slice();e.bInitialised=true;h===false&&t(e)}})}})(jQuery,window,document);
js/jquery.tmpl.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery Templates Plugin 1.0.0pre
3
+ * http://github.com/jquery/jquery-tmpl
4
+ * Requires jQuery 1.4.2
5
+ *
6
+ * Copyright Software Freedom Conservancy, Inc.
7
+ * Dual licensed under the MIT or GPL Version 2 licenses.
8
+ * http://jquery.org/license
9
+ */
10
+ (function(a){var r=a.fn.domManip,d="_tmplitem",q=/^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,b={},f={},e,p={key:0,data:{}},i=0,c=0,l=[];function g(g,d,h,e){var c={data:e||(e===0||e===false)?e:d?d.data:{},_wrap:d?d._wrap:null,tmpl:null,parent:d||null,nodes:[],calls:u,nest:w,wrap:x,html:v,update:t};g&&a.extend(c,g,{nodes:[],parent:d});if(h){c.tmpl=h;c._ctnt=c._ctnt||c.tmpl(a,c);c.key=++i;(l.length?f:b)[i]=c}return c}a.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(f,d){a.fn[f]=function(n){var g=[],i=a(n),k,h,m,l,j=this.length===1&&this[0].parentNode;e=b||{};if(j&&j.nodeType===11&&j.childNodes.length===1&&i.length===1){i[d](this[0]);g=this}else{for(h=0,m=i.length;h<m;h++){c=h;k=(h>0?this.clone(true):this).get();a(i[h])[d](k);g=g.concat(k)}c=0;g=this.pushStack(g,f,i.selector)}l=e;e=null;a.tmpl.complete(l);return g}});a.fn.extend({tmpl:function(d,c,b){return a.tmpl(this[0],d,c,b)},tmplItem:function(){return a.tmplItem(this[0])},template:function(b){return a.template(b,this[0])},domManip:function(d,m,k){if(d[0]&&a.isArray(d[0])){var g=a.makeArray(arguments),h=d[0],j=h.length,i=0,f;while(i<j&&!(f=a.data(h[i++],"tmplItem")));if(f&&c)g[2]=function(b){a.tmpl.afterManip(this,b,k)};r.apply(this,g)}else r.apply(this,arguments);c=0;!e&&a.tmpl.complete(b);return this}});a.extend({tmpl:function(d,h,e,c){var i,k=!c;if(k){c=p;d=a.template[d]||a.template(null,d);f={}}else if(!d){d=c.tmpl;b[c.key]=c;c.nodes=[];c.wrapped&&n(c,c.wrapped);return a(j(c,null,c.tmpl(a,c)))}if(!d)return[];if(typeof h==="function")h=h.call(c||{});e&&e.wrapped&&n(e,e.wrapped);i=a.isArray(h)?a.map(h,function(a){return a?g(e,c,d,a):null}):[g(e,c,d,h)];return k?a(j(c,null,i)):i},tmplItem:function(b){var c;if(b instanceof a)b=b[0];while(b&&b.nodeType===1&&!(c=a.data(b,"tmplItem"))&&(b=b.parentNode));return c||p},template:function(c,b){if(b){if(typeof b==="string")b=o(b);else if(b instanceof a)b=b[0]||{};if(b.nodeType)b=a.data(b,"tmpl")||a.data(b,"tmpl",o(b.innerHTML));return typeof c==="string"?(a.template[c]=b):b}return c?typeof c!=="string"?a.template(null,c):a.template[c]||a.template(null,q.test(c)?c:a(c)):null},encode:function(a){return(""+a).split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;")}});a.extend(a.tmpl,{tag:{tmpl:{_default:{$2:"null"},open:"if($notnull_1){__=__.concat($item.nest($1,$2));}"},wrap:{_default:{$2:"null"},open:"$item.calls(__,$1,$2);__=[];",close:"call=$item.calls();__=call._.concat($item.wrap(call,__));"},each:{_default:{$2:"$index, $value"},open:"if($notnull_1){$.each($1a,function($2){with(this){",close:"}});}"},"if":{open:"if(($notnull_1) && $1a){",close:"}"},"else":{_default:{$1:"true"},open:"}else if(($notnull_1) && $1a){"},html:{open:"if($notnull_1){__.push($1a);}"},"=":{_default:{$1:"$data"},open:"if($notnull_1){__.push($.encode($1a));}"},"!":{open:""}},complete:function(){b={}},afterManip:function(f,b,d){var e=b.nodeType===11?a.makeArray(b.childNodes):b.nodeType===1?[b]:[];d.call(f,b);m(e);c++}});function j(e,g,f){var b,c=f?a.map(f,function(a){return typeof a==="string"?e.key?a.replace(/(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g,"$1 "+d+'="'+e.key+'" $2'):a:j(a,e,a._ctnt)}):e;if(g)return c;c=c.join("");c.replace(/^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/,function(f,c,e,d){b=a(e).get();m(b);if(c)b=k(c).concat(b);if(d)b=b.concat(k(d))});return b?b:k(c)}function k(c){var b=document.createElement("div");b.innerHTML=c;return a.makeArray(b.childNodes)}function o(b){return new Function("jQuery","$item","var $=jQuery,call,__=[],$data=$item.data;with($data){__.push('"+a.trim(b).replace(/([\\'])/g,"\\$1").replace(/[\r\t\n]/g," ").replace(/\$\{([^\}]*)\}/g,"{{= $1}}").replace(/\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,function(m,l,k,g,b,c,d){var j=a.tmpl.tag[k],i,e,f;if(!j)throw"Unknown template tag: "+k;i=j._default||[];if(c&&!/\w$/.test(b)){b+=c;c=""}if(b){b=h(b);d=d?","+h(d)+")":c?")":"";e=c?b.indexOf(".")>-1?b+h(c):"("+b+").call($item"+d:b;f=c?e:"(typeof("+b+")==='function'?("+b+").call($item):("+b+"))"}else f=e=i.$1||"null";g=h(g);return"');"+j[l?"close":"open"].split("$notnull_1").join(b?"typeof("+b+")!=='undefined' && ("+b+")!=null":"true").split("$1a").join(f).split("$1").join(e).split("$2").join(g||i.$2||"")+"__.push('"})+"');}return __;")}function n(c,b){c._wrap=j(c,true,a.isArray(b)?b:[q.test(b)?b:a(b).html()]).join("")}function h(a){return a?a.replace(/\\'/g,"'").replace(/\\\\/g,"\\"):null}function s(b){var a=document.createElement("div");a.appendChild(b.cloneNode(true));return a.innerHTML}function m(o){var n="_"+c,k,j,l={},e,p,h;for(e=0,p=o.length;e<p;e++){if((k=o[e]).nodeType!==1)continue;j=k.getElementsByTagName("*");for(h=j.length-1;h>=0;h--)m(j[h]);m(k)}function m(j){var p,h=j,k,e,m;if(m=j.getAttribute(d)){while(h.parentNode&&(h=h.parentNode).nodeType===1&&!(p=h.getAttribute(d)));if(p!==m){h=h.parentNode?h.nodeType===11?0:h.getAttribute(d)||0:0;if(!(e=b[m])){e=f[m];e=g(e,b[h]||f[h]);e.key=++i;b[i]=e}c&&o(m)}j.removeAttribute(d)}else if(c&&(e=a.data(j,"tmplItem"))){o(e.key);b[e.key]=e;h=a.data(j.parentNode,"tmplItem");h=h?h.key:0}if(e){k=e;while(k&&k.key!=h){k.nodes.push(j);k=k.parent}delete e._ctnt;delete e._wrap;a.data(j,"tmplItem",e)}function o(a){a=a+n;e=l[a]=l[a]||g(e,b[e.parent.key+n]||e.parent)}}}function u(a,d,c,b){if(!a)return l.pop();l.push({_:a,tmpl:d,item:this,data:c,options:b})}function w(d,c,b){return a.tmpl(a.template(d),c,b,this)}function x(b,d){var c=b.options||{};c.wrapped=d;return a.tmpl(a.template(b.tmpl),b.data,c,b.item)}function v(d,c){var b=this._wrap;return a.map(a(a.isArray(b)?b.join(""):b).filter(d||"*"),function(a){return c?a.innerText||a.textContent:a.outerHTML||s(a)})}function t(){var b=this.nodes;a.tmpl(null,null,null,this).insertBefore(b[0]);a(b).remove()}})(jQuery);
js/jquery.tools.min.js ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * jQuery Tools v1.2.6 - The missing UI library for the Web
3
+ *
4
+ * tooltip/tooltip.js
5
+ * tooltip/tooltip.dynamic.js
6
+ * tooltip/tooltip.slide.js
7
+ *
8
+ * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
9
+ *
10
+ * http://flowplayer.org/tools/
11
+ *
12
+ */
13
+ (function(a){a.tools=a.tools||{version:"v1.2.6"},a.tools.tooltip={conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,fadeIE:!1,position:["top","center"],offset:[0,0],relative:!1,cancelDefault:!0,events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",tooltip:"mouseenter,mouseleave"},layout:"<div/>",tipClass:"tooltip"},addEffect:function(a,c,d){b[a]=[c,d]}};var b={toggle:[function(a){var b=this.getConf(),c=this.getTip(),d=b.opacity;d<1&&c.css({opacity:d}),c.show(),a.call()},function(a){this.getTip().hide(),a.call()}],fade:[function(b){var c=this.getConf();!a.browser.msie||c.fadeIE?this.getTip().fadeTo(c.fadeInSpeed,c.opacity,b):(this.getTip().show(),b())},function(b){var c=this.getConf();!a.browser.msie||c.fadeIE?this.getTip().fadeOut(c.fadeOutSpeed,b):(this.getTip().hide(),b())}]};function c(b,c,d){var e=d.relative?b.position().top:b.offset().top,f=d.relative?b.position().left:b.offset().left,g=d.position[0];e-=c.outerHeight()-d.offset[0],f+=b.outerWidth()+d.offset[1],/iPad/i.test(navigator.userAgent)&&(e-=a(window).scrollTop());var h=c.outerHeight()+b.outerHeight();g=="center"&&(e+=h/2),g=="bottom"&&(e+=h),g=d.position[1];var i=c.outerWidth()+b.outerWidth();g=="center"&&(f-=i/2),g=="left"&&(f-=i);return{top:e,left:f}}function d(d,e){var f=this,g=d.add(f),h,i=0,j=0,k=d.attr("title"),l=d.attr("data-tooltip"),m=b[e.effect],n,o=d.is(":input"),p=o&&d.is(":checkbox, :radio, select, :button, :submit"),q=d.attr("type"),r=e.events[q]||e.events[o?p?"widget":"input":"def"];if(!m)throw"Nonexistent effect \""+e.effect+"\"";r=r.split(/,\s*/);if(r.length!=2)throw"Tooltip: bad events configuration for "+q;d.bind(r[0],function(a){clearTimeout(i),e.predelay?j=setTimeout(function(){f.show(a)},e.predelay):f.show(a)}).bind(r[1],function(a){clearTimeout(j),e.delay?i=setTimeout(function(){f.hide(a)},e.delay):f.hide(a)}),k&&e.cancelDefault&&(d.removeAttr("title"),d.data("title",k)),a.extend(f,{show:function(b){if(!h){l?h=a(l):e.tip?h=a(e.tip).eq(0):k?h=a(e.layout).addClass(e.tipClass).appendTo(document.body).hide().append(k):(h=d.next(),h.length||(h=d.parent().next()));if(!h.length)throw"Cannot find tooltip for "+d}if(f.isShown())return f;h.stop(!0,!0);var o=c(d,h,e);e.tip&&h.html(d.data("title")),b=a.Event(),b.type="onBeforeShow",g.trigger(b,[o]);if(b.isDefaultPrevented())return f;o=c(d,h,e),h.css({position:"absolute",top:o.top,left:o.left}),n=!0,m[0].call(f,function(){b.type="onShow",n="full",g.trigger(b)});var p=e.events.tooltip.split(/,\s*/);h.data("__set")||(h.unbind(p[0]).bind(p[0],function(){clearTimeout(i),clearTimeout(j)}),p[1]&&!d.is("input:not(:checkbox, :radio), textarea")&&h.unbind(p[1]).bind(p[1],function(a){a.relatedTarget!=d[0]&&d.trigger(r[1].split(" ")[0])}),e.tip||h.data("__set",!0));return f},hide:function(c){if(!h||!f.isShown())return f;c=a.Event(),c.type="onBeforeHide",g.trigger(c);if(!c.isDefaultPrevented()){n=!1,b[e.effect][1].call(f,function(){c.type="onHide",g.trigger(c)});return f}},isShown:function(a){return a?n=="full":n},getConf:function(){return e},getTip:function(){return h},getTrigger:function(){return d}}),a.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(b,c){a.isFunction(e[c])&&a(f).bind(c,e[c]),f[c]=function(b){b&&a(f).bind(c,b);return f}})}a.fn.tooltip=function(b){var c=this.data("tooltip");if(c)return c;b=a.extend(!0,{},a.tools.tooltip.conf,b),typeof b.position=="string"&&(b.position=b.position.split(/,?\s/)),this.each(function(){c=new d(a(this),b),a(this).data("tooltip",c)});return b.api?c:this}})(jQuery);
14
+ (function(a){var b=a.tools.tooltip;b.dynamic={conf:{classNames:"top right bottom left"}};function c(b){var c=a(window),d=c.width()+c.scrollLeft(),e=c.height()+c.scrollTop();return[b.offset().top<=c.scrollTop(),d<=b.offset().left+b.width(),e<=b.offset().top+b.height(),c.scrollLeft()>=b.offset().left]}function d(a){var b=a.length;while(b--)if(a[b])return!1;return!0}a.fn.dynamic=function(e){typeof e=="number"&&(e={speed:e}),e=a.extend({},b.dynamic.conf,e);var f=a.extend(!0,{},e),g=e.classNames.split(/\s/),h;this.each(function(){var b=a(this).tooltip().onBeforeShow(function(b,e){var i=this.getTip(),j=this.getConf();h||(h=[j.position[0],j.position[1],j.offset[0],j.offset[1],a.extend({},j)]),a.extend(j,h[4]),j.position=[h[0],h[1]],j.offset=[h[2],h[3]],i.css({visibility:"hidden",position:"absolute",top:e.top,left:e.left}).show();var k=a.extend(!0,{},f),l=c(i);if(!d(l)){l[2]&&(a.extend(j,k.top),j.position[0]="top",i.addClass(g[0])),l[3]&&(a.extend(j,k.right),j.position[1]="right",i.addClass(g[1])),l[0]&&(a.extend(j,k.bottom),j.position[0]="bottom",i.addClass(g[2])),l[1]&&(a.extend(j,k.left),j.position[1]="left",i.addClass(g[3]));if(l[0]||l[2])j.offset[0]*=-1;if(l[1]||l[3])j.offset[1]*=-1}i.css({visibility:"visible"}).hide()});b.onBeforeShow(function(){var a=this.getConf(),b=this.getTip();setTimeout(function(){a.position=[h[0],h[1]],a.offset=[h[2],h[3]]},0)}),b.onHide(function(){var a=this.getTip();a.removeClass(e.classNames)}),ret=b});return e.api?ret:this}})(jQuery);
15
+ (function(a){var b=a.tools.tooltip;a.extend(b.conf,{direction:"up",bounce:!1,slideOffset:10,slideInSpeed:200,slideOutSpeed:200,slideFade:!a.browser.msie});var c={up:["-","top"],down:["+","top"],left:["-","left"],right:["+","left"]};b.addEffect("slide",function(a){var b=this.getConf(),d=this.getTip(),e=b.slideFade?{opacity:b.opacity}:{},f=c[b.direction]||c.up;e[f[1]]=f[0]+"="+b.slideOffset,b.slideFade&&d.css({opacity:0}),d.show().animate(e,b.slideInSpeed,a)},function(b){var d=this.getConf(),e=d.slideOffset,f=d.slideFade?{opacity:0}:{},g=c[d.direction]||c.up,h=""+g[0];d.bounce&&(h=h=="+"?"-":"+"),f[g[1]]=h+"="+e,this.getTip().animate(f,d.slideOutSpeed,function(){a(this).hide(),b.call()})})})(jQuery);
lib/.htaccess ADDED
@@ -0,0 +1,2 @@
 
 
1
+ deny from all
2
+
lib/Diff.php ADDED
@@ -0,0 +1,176 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Diff
4
+ *
5
+ * A comprehensive library for generating differences between two strings
6
+ * in multiple formats (unified, side by side HTML etc)
7
+ *
8
+ * PHP version 5
9
+ *
10
+ * Copyright (c) 2009 Chris Boulton <chris.boulton@interspire.com>
11
+ *
12
+ * All rights reserved.
13
+ *
14
+ * Redistribution and use in source and binary forms, with or without
15
+ * modification, are permitted provided that the following conditions are met:
16
+ *
17
+ * - Redistributions of source code must retain the above copyright notice,
18
+ * this list of conditions and the following disclaimer.
19
+ * - Redistributions in binary form must reproduce the above copyright notice,
20
+ * this list of conditions and the following disclaimer in the documentation
21
+ * and/or other materials provided with the distribution.
22
+ * - Neither the name of the Chris Boulton nor the names of its contributors
23
+ * may be used to endorse or promote products derived from this software
24
+ * without specific prior written permission.
25
+ *
26
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
30
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ * @package Diff
39
+ * @author Chris Boulton <chris.boulton@interspire.com>
40
+ * @copyright (c) 2009 Chris Boulton
41
+ * @license New BSD License http://www.opensource.org/licenses/bsd-license.php
42
+ * @version 1.1
43
+ * @link http://github.com/chrisboulton/php-diff
44
+ */
45
+
46
+ class Diff
47
+ {
48
+ /**
49
+ * @var array The "old" sequence to use as the basis for the comparison.
50
+ */
51
+ private $a = null;
52
+
53
+ /**
54
+ * @var array The "new" sequence to generate the changes for.
55
+ */
56
+ private $b = null;
57
+
58
+ /**
59
+ * @var array Array containing the generated opcodes for the differences between the two items.
60
+ */
61
+ private $groupedCodes = null;
62
+
63
+ /**
64
+ * @var array Associative array of the default options available for the diff class and their default value.
65
+ */
66
+ private $defaultOptions = array(
67
+ 'context' => 3,
68
+ 'ignoreNewLines' => false,
69
+ 'ignoreWhitespace' => false,
70
+ 'ignoreCase' => false
71
+ );
72
+
73
+ /**
74
+ * @var array Array of the options that have been applied for generating the diff.
75
+ */
76
+ private $options = array();
77
+
78
+ /**
79
+ * The constructor.
80
+ *
81
+ * @param array $a Array containing the lines of the first string to compare.
82
+ * @param array $b Array containing the lines for the second string to compare.
83
+ */
84
+ public function __construct($a, $b, $options=array())
85
+ {
86
+ $this->a = $a;
87
+ $this->b = $b;
88
+
89
+ $this->options = array_merge($this->defaultOptions, $options);
90
+ }
91
+
92
+ /**
93
+ * Render a diff using the supplied rendering class and return it.
94
+ *
95
+ * @param object $renderer An instance of the rendering object to use for generating the diff.
96
+ * @return mixed The generated diff. Exact return value depends on the rendered.
97
+ */
98
+ public function render(Diff_Renderer_Abstract $renderer)
99
+ {
100
+ $renderer->diff = $this;
101
+ return $renderer->render();
102
+ }
103
+
104
+ /**
105
+ * Get a range of lines from $start to $end from the first comparison string
106
+ * and return them as an array. If no values are supplied, the entire string
107
+ * is returned. It's also possible to specify just one line to return only
108
+ * that line.
109
+ *
110
+ * @param int $start The starting number.
111
+ * @param int $end The ending number. If not supplied, only the item in $start will be returned.
112
+ * @return array Array of all of the lines between the specified range.
113
+ */
114
+ public function getA($start=0, $end=null)
115
+ {
116
+ if($start == 0 && $end === null) {
117
+ return $this->a;
118
+ }
119
+
120
+ if($end === null) {
121
+ $length = 1;
122
+ }
123
+ else {
124
+ $length = $end - $start;
125
+ }
126
+
127
+ return array_slice($this->a, $start, $length);
128
+
129
+ }
130
+
131
+ /**
132
+ * Get a range of lines from $start to $end from the second comparison string
133
+ * and return them as an array. If no values are supplied, the entire string
134
+ * is returned. It's also possible to specify just one line to return only
135
+ * that line.
136
+ *
137
+ * @param int $start The starting number.
138
+ * @param int $end The ending number. If not supplied, only the item in $start will be returned.
139
+ * @return array Array of all of the lines between the specified range.
140
+ */
141
+ public function getB($start=0, $end=null)
142
+ {
143
+ if($start == 0 && $end === null) {
144
+ return $this->b;
145
+ }
146
+
147
+ if($end === null) {
148
+ $length = 1;
149
+ }
150
+ else {
151
+ $length = $end - $start;
152
+ }
153
+
154
+ return array_slice($this->b, $start, $length);
155
+ }
156
+
157
+ /**
158
+ * Generate a list of the compiled and grouped opcodes for the differences between the
159
+ * two strings. Generally called by the renderer, this class instantiates the sequence
160
+ * matcher and performs the actual diff generation and return an array of the opcodes
161
+ * for it. Once generated, the results are cached in the diff class instance.
162
+ *
163
+ * @return array Array of the grouped opcodes for the generated diff.
164
+ */
165
+ public function getGroupedOpcodes()
166
+ {
167
+ if(!is_null($this->groupedCodes)) {
168
+ return $this->groupedCodes;
169
+ }
170
+
171
+ require_once dirname(__FILE__).'/Diff/SequenceMatcher.php';
172
+ $sequenceMatcher = new Diff_SequenceMatcher($this->a, $this->b, null, $this->options);
173
+ $this->groupedCodes = $sequenceMatcher->getGroupedOpcodes();
174
+ return $this->groupedCodes;
175
+ }
176
+ }
lib/Diff/Renderer/Abstract.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Abstract class for diff renderers in PHP DiffLib.
4
+ *
5
+ * PHP version 5
6
+ *
7
+ * Copyright (c) 2009 Chris Boulton <chris.boulton@interspire.com>
8
+ *
9
+ * All rights reserved.
10
+ *
11
+ * Redistribution and use in source and binary forms, with or without
12
+ * modification, are permitted provided that the following conditions are met:
13
+ *
14
+ * - Redistributions of source code must retain the above copyright notice,
15
+ * this list of conditions and the following disclaimer.
16
+ * - Redistributions in binary form must reproduce the above copyright notice,
17
+ * this list of conditions and the following disclaimer in the documentation
18
+ * and/or other materials provided with the distribution.
19
+ * - Neither the name of the Chris Boulton nor the names of its contributors
20
+ * may be used to endorse or promote products derived from this software
21
+ * without specific prior written permission.
22
+ *
23
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
27
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ * POSSIBILITY OF SUCH DAMAGE.
34
+ *
35
+ * @package DiffLib
36
+ * @author Chris Boulton <chris.boulton@interspire.com>
37
+ * @copyright (c) 2009 Chris Boulton
38
+ * @license New BSD License http://www.opensource.org/licenses/bsd-license.php
39
+ * @version 1.1
40
+ * @link http://github.com/chrisboulton/php-diff
41
+ */
42
+
43
+ abstract class Diff_Renderer_Abstract
44
+ {
45
+ /**
46
+ * @var object Instance of the diff class that this renderer is generating the rendered diff for.
47
+ */
48
+ public $diff;
49
+
50
+ /**
51
+ * @var array Array of the default options that apply to this renderer.
52
+ */
53
+ protected $defaultOptions = array();
54
+
55
+ /**
56
+ * @var array Array containing the user applied and merged default options for the renderer.
57
+ */
58
+ protected $options = array();
59
+
60
+ /**
61
+ * The constructor. Instantiates the rendering engine and if options are passed,
62
+ * sets the options for the renderer.
63
+ *
64
+ * @param array $options Optionally, an array of the options for the renderer.
65
+ */
66
+ public function __construct(array $options = array())
67
+ {
68
+ $this->setOptions($options);
69
+ }
70
+
71
+ /**
72
+ * Set the options of the renderer to those supplied in the passed in array.
73
+ * Options are merged with the default to ensure that there aren't any missing
74
+ * options.
75
+ *
76
+ * @param array $options Array of options to set.
77
+ */
78
+ public function setOptions(array $options)
79
+ {
80
+ $this->options = array_merge($this->defaultOptions, $options);
81
+ }
82
+ }
lib/Diff/Renderer/Html/Array.php ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Base renderer for rendering HTML based diffs for PHP DiffLib.
4
+ *
5
+ * PHP version 5
6
+ *
7
+ * Copyright (c) 2009 Chris Boulton <chris.boulton@interspire.com>
8
+ *
9
+ * All rights reserved.
10
+ *
11
+ * Redistribution and use in source and binary forms, with or without
12
+ * modification, are permitted provided that the following conditions are met:
13
+ *
14
+ * - Redistributions of source code must retain the above copyright notice,
15
+ * this list of conditions and the following disclaimer.
16
+ * - Redistributions in binary form must reproduce the above copyright notice,
17
+ * this list of conditions and the following disclaimer in the documentation
18
+ * and/or other materials provided with the distribution.
19
+ * - Neither the name of the Chris Boulton nor the names of its contributors
20
+ * may be used to endorse or promote products derived from this software
21
+ * without specific prior written permission.
22
+ *
23
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
27
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ * POSSIBILITY OF SUCH DAMAGE.
34
+ *
35
+ * @package DiffLib
36
+ * @author Chris Boulton <chris.boulton@interspire.com>
37
+ * @copyright (c) 2009 Chris Boulton
38
+ * @license New BSD License http://www.opensource.org/licenses/bsd-license.php
39
+ * @version 1.1
40
+ * @link http://github.com/chrisboulton/php-diff
41
+ */
42
+
43
+ require_once dirname(__FILE__).'/../Abstract.php';
44
+
45
+ class Diff_Renderer_Html_Array extends Diff_Renderer_Abstract
46
+ {
47
+ /**
48
+ * @var array Array of the default options that apply to this renderer.
49
+ */
50
+ protected $defaultOptions = array(
51
+ 'tabSize' => 4
52
+ );
53
+
54
+ /**
55
+ * Render and return an array structure suitable for generating HTML
56
+ * based differences. Generally called by subclasses that generate a
57
+ * HTML based diff and return an array of the changes to show in the diff.
58
+ *
59
+ * @return array An array of the generated chances, suitable for presentation in HTML.
60
+ */
61
+ public function render()
62
+ {
63
+ // As we'll be modifying a & b to include our change markers,
64
+ // we need to get the contents and store them here. That way
65
+ // we're not going to destroy the original data
66
+ $a = $this->diff->getA();
67
+ $b = $this->diff->getB();
68
+
69
+ $changes = array();
70
+ $opCodes = $this->diff->getGroupedOpcodes();
71
+ foreach($opCodes as $group) {
72
+ $blocks = array();
73
+ $lastTag = null;
74
+ $lastBlock = 0;
75
+ foreach($group as $code) {
76
+ list($tag, $i1, $i2, $j1, $j2) = $code;
77
+
78
+ if($tag == 'replace' && $i2 - $i1 == $j2 - $j1) {
79
+ for($i = 0; $i < ($i2 - $i1); ++$i) {
80
+ $fromLine = $a[$i1 + $i];
81
+ $toLine = $b[$j1 + $i];
82
+
83
+ list($start, $end) = $this->getChangeExtent($fromLine, $toLine);
84
+ if($start != 0 || $end != 0) {
85
+ $last = $end + strlen($fromLine);
86
+ $fromLine = substr_replace($fromLine, "\0", $start, 0);
87
+ $fromLine = substr_replace($fromLine, "\1", $last + 1, 0);
88
+ $last = $end + strlen($toLine);
89
+ $toLine = substr_replace($toLine, "\0", $start, 0);
90
+ $toLine = substr_replace($toLine, "\1", $last + 1, 0);
91
+ $a[$i1 + $i] = $fromLine;
92
+ $b[$j1 + $i] = $toLine;
93
+ }
94
+ }
95
+ }
96
+
97
+ if($tag != $lastTag) {
98
+ $blocks[] = array(
99
+ 'tag' => $tag,
100
+ 'base' => array(
101
+ 'offset' => $i1,
102
+ 'lines' => array()
103
+ ),
104
+ 'changed' => array(
105
+ 'offset' => $j1,
106
+ 'lines' => array()
107
+ )
108
+ );
109
+ $lastBlock = count($blocks)-1;
110
+ }
111
+
112
+ $lastTag = $tag;
113
+
114
+ if($tag == 'equal') {
115
+ $lines = array_slice($a, $i1, ($i2 - $i1));
116
+ $blocks[$lastBlock]['base']['lines'] += $this->formatLines($lines);
117
+ $lines = array_slice($b, $j1, ($j2 - $j1));
118
+ $blocks[$lastBlock]['changed']['lines'] += $this->formatLines($lines);
119
+ }
120
+ else {
121
+ if($tag == 'replace' || $tag == 'delete') {
122
+ $lines = array_slice($a, $i1, ($i2 - $i1));
123
+ $lines = $this->formatLines($lines);
124
+ $lines = str_replace(array("\0", "\1"), array('<del>', '</del>'), $lines);
125
+ $blocks[$lastBlock]['base']['lines'] += $lines;
126
+ }
127
+
128
+ if($tag == 'replace' || $tag == 'insert') {
129
+ $lines = array_slice($b, $j1, ($j2 - $j1));
130
+ $lines = $this->formatLines($lines);
131
+ $lines = str_replace(array("\0", "\1"), array('<ins>', '</ins>'), $lines);
132
+ $blocks[$lastBlock]['changed']['lines'] += $lines;
133
+ }
134
+ }
135
+ }
136
+ $changes[] = $blocks;
137
+ }
138
+ return $changes;
139
+ }
140
+
141
+ /**
142
+ * Given two strings, determine where the changes in the two strings
143
+ * begin, and where the changes in the two strings end.
144
+ *
145
+ * @param string $fromLine The first string.
146
+ * @param string $toLine The second string.
147
+ * @return array Array containing the starting position (0 by default) and the ending position (-1 by default)
148
+ */
149
+ private function getChangeExtent($fromLine, $toLine)
150
+ {
151
+ $start = 0;
152
+ $limit = min(strlen($fromLine), strlen($toLine));
153
+ while($start < $limit && $fromLine{$start} == $toLine{$start}) {
154
+ ++$start;
155
+ }
156
+ $end = -1;
157
+ $limit = $limit - $start;
158
+ while(-$end <= $limit && substr($fromLine, $end, 1) == substr($toLine, $end, 1)) {
159
+ --$end;
160
+ }
161
+ return array(
162
+ $start,
163
+ $end + 1
164
+ );
165
+ }
166
+
167
+ /**
168
+ * Format a series of lines suitable for output in a HTML rendered diff.
169
+ * This involves replacing tab characters with spaces, making the HTML safe
170
+ * for output, ensuring that double spaces are replaced with &nbsp; etc.
171
+ *
172
+ * @param array $lines Array of lines to format.
173
+ * @return array Array of the formatted lines.
174
+ */
175
+ private function formatLines($lines)
176
+ {
177
+ $lines = array_map(array($this, 'ExpandTabs'), $lines);
178
+ $lines = array_map(array($this, 'HtmlSafe'), $lines);
179
+ foreach($lines as &$line) {
180
+ $line = preg_replace('# ( +)|^ #e', "\$this->fixSpaces('\\1')", $line);
181
+ }
182
+ return $lines;
183
+ }
184
+
185
+ /**
186
+ * Replace a string containing spaces with a HTML representation using &nbsp;.
187
+ *
188
+ * @param string $spaces The string of spaces.
189
+ * @return string The HTML representation of the string.
190
+ */
191
+ function fixSpaces($spaces='')
192
+ {
193
+ $count = strlen($spaces);
194
+ if($count == 0) {
195
+ return '';
196
+ }
197
+
198
+ $div = floor($count / 2);
199
+ $mod = $count % 2;
200
+ return str_repeat('&nbsp; ', $div).str_repeat('&nbsp;', $mod);
201
+ }
202
+
203
+ /**
204
+ * Replace tabs in a single line with a number of spaces as defined by the tabSize option.
205
+ *
206
+ * @param string $line The containing tabs to convert.
207
+ * @return string The line with the tabs converted to spaces.
208
+ */
209
+ private function expandTabs($line)
210
+ {
211
+ return str_replace("\t", str_repeat(' ', $this->options['tabSize']), $line);
212
+ }
213
+
214
+ /**
215
+ * Make a string containing HTML safe for output on a page.
216
+ *
217
+ * @param string $string The string.
218
+ * @return string The string with the HTML characters replaced by entities.
219
+ */
220
+ private function htmlSafe($string)
221
+ {
222
+ return htmlspecialchars($string, ENT_NOQUOTES, 'UTF-8');
223
+ }
224
+ }
lib/Diff/Renderer/Html/SideBySide.php ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Side by Side HTML diff generator for PHP DiffLib.
4
+ *
5
+ * PHP version 5
6
+ *
7
+ * Copyright (c) 2009 Chris Boulton <chris.boulton@interspire.com>
8
+ *
9
+ * All rights reserved.
10
+ *
11
+ * Redistribution and use in source and binary forms, with or without
12
+ * modification, are permitted provided that the following conditions are met:
13
+ *
14
+ * - Redistributions of source code must retain the above copyright notice,
15
+ * this list of conditions and the following disclaimer.
16
+ * - Redistributions in binary form must reproduce the above copyright notice,
17
+ * this list of conditions and the following disclaimer in the documentation
18
+ * and/or other materials provided with the distribution.
19
+ * - Neither the name of the Chris Boulton nor the names of its contributors
20
+ * may be used to endorse or promote products derived from this software
21
+ * without specific prior written permission.
22
+ *
23
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
27
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ * POSSIBILITY OF SUCH DAMAGE.
34
+ *
35
+ * @package DiffLib
36
+ * @author Chris Boulton <chris.boulton@interspire.com>
37
+ * @copyright (c) 2009 Chris Boulton
38
+ * @license New BSD License http://www.opensource.org/licenses/bsd-license.php
39
+ * @version 1.1
40
+ * @link http://github.com/chrisboulton/php-diff
41
+ */
42
+
43
+ require_once dirname(__FILE__).'/Array.php';
44
+
45
+ class Diff_Renderer_Html_SideBySide extends Diff_Renderer_Html_Array
46
+ {
47
+ /**
48
+ * Render a and return diff with changes between the two sequences
49
+ * displayed side by side.
50
+ *
51
+ * @return string The generated side by side diff.
52
+ */
53
+ public function render()
54
+ {
55
+ $changes = parent::render();
56
+
57
+ $html = '';
58
+ if(empty($changes)) {
59
+ return $html;
60
+ }
61
+
62
+ $html .= '<table class="Differences DifferencesSideBySide">';
63
+ $html .= '<thead>';
64
+ $html .= '<tr>';
65
+ $html .= '<th colspan="2">The Original Version of the file</th>';
66
+ $html .= '<th colspan="2">The Modified Version on your WordPress system</th>';
67
+ $html .= '</tr>';
68
+ $html .= '</thead>';
69
+ foreach($changes as $i => $blocks) {
70
+ if($i > 0) {
71
+ $html .= '<tbody class="Skipped">';
72
+ $html .= '<th>&hellip;</th><td>&nbsp;</td>';
73
+ $html .= '<th>&hellip;</th><td>&nbsp;</td>';
74
+ $html .= '</tbody>';
75
+ }
76
+
77
+ foreach($blocks as $change) {
78
+ $html .= '<tbody class="Change'.ucfirst($change['tag']).'">';
79
+ // Equal changes should be shown on both sides of the diff
80
+ if($change['tag'] == 'equal') {
81
+ foreach($change['base']['lines'] as $no => $line) {
82
+ $fromLine = $change['base']['offset'] + $no + 1;
83
+ $toLine = $change['changed']['offset'] + $no + 1;
84
+ $html .= '<tr>';
85
+ $html .= '<th>'.$fromLine.'</th>';
86
+ $html .= '<td class="Left"><span>'.$line.'</span>&nbsp;</span></td>';
87
+ $html .= '<th>'.$toLine.'</th>';
88
+ $html .= '<td class="Right"><span>'.$line.'</span>&nbsp;</span></td>';
89
+ $html .= '</tr>';
90
+ }
91
+ }
92
+ // Added lines only on the right side
93
+ else if($change['tag'] == 'insert') {
94
+ foreach($change['changed']['lines'] as $no => $line) {
95
+ $toLine = $change['changed']['offset'] + $no + 1;
96
+ $html .= '<tr>';
97
+ $html .= '<th>&nbsp;</th>';
98
+ $html .= '<td class="Left">&nbsp;</td>';
99
+ $html .= '<th>'.$toLine.'</th>';
100
+ $html .= '<td class="Right"><ins>'.$line.'</ins>&nbsp;</td>';
101
+ $html .= '</tr>';
102
+ }
103
+ }
104
+ // Show deleted lines only on the left side
105
+ else if($change['tag'] == 'delete') {
106
+ foreach($change['base']['lines'] as $no => $line) {
107
+ $fromLine = $change['base']['offset'] + $no + 1;
108
+ $html .= '<tr>';
109
+ $html .= '<th>'.$fromLine.'</th>';
110
+ $html .= '<td class="Left"><del>'.$line.'</del>&nbsp;</td>';
111
+ $html .= '<th>&nbsp;</th>';
112
+ $html .= '<td class="Right">&nbsp;</td>';
113
+ $html .= '</tr>';
114
+ }
115
+ }
116
+ // Show modified lines on both sides
117
+ else if($change['tag'] == 'replace') {
118
+ if(count($change['base']['lines']) >= count($change['changed']['lines'])) {
119
+ foreach($change['base']['lines'] as $no => $line) {
120
+ $fromLine = $change['base']['offset'] + $no + 1;
121
+ $html .= '<tr>';
122
+ $html .= '<th>'.$fromLine.'</th>';
123
+ $html .= '<td class="Left"><span>'.$line.'</span>&nbsp;</td>';
124
+ if(!isset($change['changed']['lines'][$no])) {
125
+ $toLine = '&nbsp;';
126
+ $changedLine = '&nbsp;';
127
+ }
128
+ else {
129
+ $toLine = $change['base']['offset'] + $no + 1;
130
+ $changedLine = '<span>'.$change['changed']['lines'][$no].'</span>';
131
+ }
132
+ $html .= '<th>'.$toLine.'</th>';
133
+ $html .= '<td class="Right">'.$changedLine.'</td>';
134
+ $html .= '</tr>';
135
+ }
136
+ }
137
+ else {
138
+ foreach($change['changed']['lines'] as $no => $changedLine) {
139
+ if(!isset($change['base']['lines'][$no])) {
140
+ $fromLine = '&nbsp;';
141
+ $line = '&nbsp;';
142
+ }
143
+ else {
144
+ $fromLine = $change['base']['offset'] + $no + 1;
145
+ $line = '<span>'.$change['base']['lines'][$no].'</span>';
146
+ }
147
+ $html .= '<tr>';
148
+ $html .= '<th>'.$fromLine.'</th>';
149
+ $html .= '<td class="Left"><span>'.$line.'</span>&nbsp;</td>';
150
+ $toLine = $change['changed']['offset'] + $no + 1;
151
+ $html .= '<th>'.$toLine.'</th>';
152
+ $html .= '<td class="Right">'.$changedLine.'</td>';
153
+ $html .= '</tr>';
154
+ }
155
+ }
156
+ }
157
+ $html .= '</tbody>';
158
+ }
159
+ }
160
+ $html .= '</table>';
161
+ return $html;
162
+ }
163
+ }
lib/Diff/SequenceMatcher.php ADDED
@@ -0,0 +1,742 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sequence matcher for Diff
4
+ *
5
+ * PHP version 5
6
+ *
7
+ * Copyright (c) 2009 Chris Boulton <chris.boulton@interspire.com>
8
+ *
9
+ * All rights reserved.
10
+ *
11
+ * Redistribution and use in source and binary forms, with or without
12
+ * modification, are permitted provided that the following conditions are met:
13
+ *
14
+ * - Redistributions of source code must retain the above copyright notice,
15
+ * this list of conditions and the following disclaimer.
16
+ * - Redistributions in binary form must reproduce the above copyright notice,
17
+ * this list of conditions and the following disclaimer in the documentation
18
+ * and/or other materials provided with the distribution.
19
+ * - Neither the name of the Chris Boulton nor the names of its contributors
20
+ * may be used to endorse or promote products derived from this software
21
+ * without specific prior written permission.
22
+ *
23
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
27
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ * POSSIBILITY OF SUCH DAMAGE.
34
+ *
35
+ * @package Diff
36
+ * @author Chris Boulton <chris.boulton@interspire.com>
37
+ * @copyright (c) 2009 Chris Boulton
38
+ * @license New BSD License http://www.opensource.org/licenses/bsd-license.php
39
+ * @version 1.1
40
+ * @link http://github.com/chrisboulton/php-diff
41
+ */
42
+
43
+ class Diff_SequenceMatcher
44
+ {
45
+ /**
46
+ * @var string|array Either a string or an array containing a callback function to determine if a line is "junk" or not.
47
+ */
48
+ private $junkCallback = null;
49
+
50
+ /**
51
+ * @var array The first sequence to compare against.
52
+ */
53
+ private $a = null;
54
+
55
+ /**
56
+ * @var array The second sequence.
57
+ */
58
+ private $b = null;
59
+
60
+ /**
61
+ * @var array Array of characters that are considered junk from the second sequence. Characters are the array key.
62
+ */
63
+ private $junkDict = array();
64
+
65
+ /**
66
+ * @var array Array of indices that do not contain junk elements.
67
+ */
68
+ private $b2j = array();
69
+
70
+ private $options = array();
71
+
72
+ private $defaultOptions = array(
73
+ 'ignoreNewLines' => false,
74
+ 'ignoreWhitespace' => false,
75
+ 'ignoreCase' => false
76
+ );
77
+
78
+ /**
79
+ * The constructor. With the sequences being passed, they'll be set for the
80
+ * sequence matcher and it will perform a basic cleanup & calculate junk
81
+ * elements.
82
+ *
83
+ * @param string|array $a A string or array containing the lines to compare against.
84
+ * @param string|array $b A string or array containing the lines to compare.
85
+ * @param string|array $junkCallback Either an array or string that references a callback function (if there is one) to determine 'junk' characters.
86
+ */
87
+ public function __construct($a, $b, $junkCallback=null, $options)
88
+ {
89
+ $this->a = null;
90
+ $this->b = null;
91
+ $this->junkCallback = $junkCallback;
92
+ $this->setOptions($options);
93
+ $this->setSequences($a, $b);
94
+ }
95
+
96
+ public function setOptions($options)
97
+ {
98
+ $this->options = array_merge($this->defaultOptions, $options);
99
+ }
100
+
101
+ /**
102
+ * Set the first and second sequences to use with the sequence matcher.
103
+ *
104
+ * @param string|array $a A string or array containing the lines to compare against.
105
+ * @param string|array $b A string or array containing the lines to compare.
106
+ */
107
+ public function setSequences($a, $b)
108
+ {
109
+ $this->setSeq1($a);
110
+ $this->setSeq2($b);
111
+ }
112
+
113
+ /**
114
+ * Set the first sequence ($a) and reset any internal caches to indicate that
115
+ * when calling the calculation methods, we need to recalculate them.
116
+ *
117
+ * @param string|array $a The sequence to set as the first sequence.
118
+ */
119
+ public function setSeq1($a)
120
+ {
121
+ if(!is_array($a)) {
122
+ $a = str_split($a);
123
+ }
124
+ if($a == $this->a) {
125
+ return;
126
+ }
127
+
128
+ $this->a= $a;
129
+ $this->matchingBlocks = null;
130
+ $this->opCodes = null;
131
+ }
132
+
133
+ /**
134
+ * Set the second sequence ($b) and reset any internal caches to indicate that
135
+ * when calling the calculation methods, we need to recalculate them.
136
+ *
137
+ * @param string|array $b The sequence to set as the second sequence.
138
+ */
139
+ public function setSeq2($b)
140
+ {
141
+ if(!is_array($b)) {
142
+ $b = str_split($b);
143
+ }
144
+ if($b == $this->b) {
145
+ return;
146
+ }
147
+
148
+ $this->b = $b;
149
+ $this->matchingBlocks = null;
150
+ $this->opCodes = null;
151
+ $this->fullBCount = null;
152
+ $this->chainB();
153
+ }
154
+
155
+ /**
156
+ * Generate the internal arrays containing the list of junk and non-junk
157
+ * characters for the second ($b) sequence.
158
+ */
159
+ private function chainB()
160
+ {
161
+ $length = count ($this->b);
162
+ $this->b2j = array();
163
+ $popularDict = array();
164
+
165
+ for($i = 0; $i < $length; ++$i) {
166
+ $char = $this->b[$i];
167
+ if(isset($this->b2j[$char])) {
168
+ if($length >= 200 && count($this->b2j[$char]) * 100 > $length) {
169
+ $popularDict[$char] = 1;
170
+ unset($this->b2j[$char]);
171
+ }
172
+ else {
173
+ $this->b2j[$char][] = $i;
174
+ }
175
+ }
176
+ else {
177
+ $this->b2j[$char] = array(
178
+ $i
179
+ );
180
+ }
181
+ }
182
+
183
+ // Remove leftovers
184
+ foreach(array_keys($popularDict) as $char) {
185
+ unset($this->b2j[$char]);
186
+ }
187
+
188
+ $this->junkDict = array();
189
+ if(is_callable($this->junkCallback)) {
190
+ foreach(array_keys($popularDict) as $char) {
191
+ if(call_user_func($this->junkCallback, $char)) {
192
+ $this->junkDict[$char] = 1;
193
+ unset($popularDict[$char]);
194
+ }
195
+ }
196
+
197
+ foreach(array_keys($this->b2j) as $char) {
198
+ if(call_user_func($this->junkCallback, $char)) {
199
+ $this->junkDict[$char] = 1;
200
+ unset($this->b2j[$char]);
201
+ }
202
+ }
203
+ }
204
+ }
205
+
206
+ /**
207
+ * Checks if a particular character is in the junk dictionary
208
+ * for the list of junk characters.
209
+ *
210
+ * @return boolean $b True if the character is considered junk. False if not.
211
+ */
212
+ private function isBJunk($b)
213
+ {
214
+ if(isset($this->juncDict[$b])) {
215
+ return true;
216
+ }
217
+
218
+ return false;
219
+ }
220
+
221
+ /**
222
+ * Find the longest matching block in the two sequences, as defined by the
223
+ * lower and upper constraints for each sequence. (for the first sequence,
224
+ * $alo - $ahi and for the second sequence, $blo - $bhi)
225
+ *
226
+ * Essentially, of all of the maximal matching blocks, return the one that
227
+ * startest earliest in $a, and all of those maximal matching blocks that
228
+ * start earliest in $a, return the one that starts earliest in $b.
229
+ *
230
+ * If the junk callback is defined, do the above but with the restriction
231
+ * that the junk element appears in the block. Extend it as far as possible
232
+ * by matching only junk elements in both $a and $b.
233
+ *
234
+ * @param int $alo The lower constraint for the first sequence.
235
+ * @param int $ahi The upper constraint for the first sequence.
236
+ * @param int $blo The lower constraint for the second sequence.
237
+ * @param int $bhi The upper constraint for the second sequence.
238
+ * @return array Array containing the longest match that includes the starting position in $a, start in $b and the length/size.
239
+ */
240
+ public function findLongestMatch($alo, $ahi, $blo, $bhi)
241
+ {
242
+ $a = $this->a;
243
+ $b = $this->b;
244
+
245
+ $bestI = $alo;
246
+ $bestJ = $blo;
247
+ $bestSize = 0;
248
+
249
+ $j2Len = array();
250
+ $nothing = array();
251
+
252
+ for($i = $alo; $i < $ahi; ++$i) {
253
+ $newJ2Len = array();
254
+ $jDict = $this->arrayGetDefault($this->b2j, $a[$i], $nothing);
255
+ foreach($jDict as $jKey => $j) {
256
+ if($j < $blo) {
257
+ continue;
258
+ }
259
+ else if($j >= $bhi) {
260
+ break;
261
+ }
262
+
263
+ $k = $this->arrayGetDefault($j2Len, $j -1, 0) + 1;
264
+ $newJ2Len[$j] = $k;
265
+ if($k > $bestSize) {
266
+ $bestI = $i - $k + 1;
267
+ $bestJ = $j - $k + 1;
268
+ $bestSize = $k;
269
+ }
270
+ }
271
+
272
+ $j2Len = $newJ2Len;
273
+ }
274
+
275
+ while($bestI > $alo && $bestJ > $blo && !$this->isBJunk($b[$bestJ - 1]) &&
276
+ !$this->linesAreDifferent($bestI - 1, $bestJ - 1)) {
277
+ --$bestI;
278
+ --$bestJ;
279
+ ++$bestSize;
280
+ }
281
+
282
+ while($bestI + $bestSize < $ahi && ($bestJ + $bestSize) < $bhi &&
283
+ !$this->isBJunk($b[$bestJ + $bestSize]) && !$this->linesAreDifferent($bestI + $bestSize, $bestJ + $bestSize)) {
284
+ ++$bestSize;
285
+ }
286
+
287
+ while($bestI > $alo && $bestJ > $blo && $this->isBJunk($b[$bestJ - 1]) &&
288
+ !$this->isLineDifferent($bestI - 1, $bestJ - 1)) {
289
+ --$bestI;
290
+ --$bestJ;
291
+ ++$bestSize;
292
+ }
293
+
294
+ while($bestI + $bestSize < $ahi && $bestJ + $bestSize < $bhi &&
295
+ $this->isBJunk($b[$bestJ + $bestSize]) && !$this->linesAreDifferent($bestI + $bestSize, $bestJ + $bestSize)) {
296
+ ++$bestSize;
297
+ }
298
+
299
+ return array(
300
+ $bestI,
301
+ $bestJ,
302
+ $bestSize
303
+ );
304
+ }
305
+
306
+ /**
307
+ * Check if the two lines at the given indexes are different or not.
308
+ *
309
+ * @param int $aIndex Line number to check against in a.
310
+ * @param int $bIndex Line number to check against in b.
311
+ * @return boolean True if the lines are different and false if not.
312
+ */
313
+ public function linesAreDifferent($aIndex, $bIndex)
314
+ {
315
+ $lineA = $this->a[$aIndex];
316
+ $lineB = $this->b[$bIndex];
317
+
318
+ if($this->options['ignoreWhitespace']) {
319
+ $replace = array("\t", ' ');
320
+ $lineA = str_replace($replace, '', $lineA);
321
+ $lineB = str_replace($replace, '', $lineB);
322
+ }
323
+
324
+ if($this->options['ignoreCase']) {
325
+ $lineA = strtolower($lineA);
326
+ $lineB = strtolower($lineB);
327
+ }
328
+
329
+ if($lineA != $lineB) {
330
+ return true;
331
+ }
332
+
333
+ return false;
334
+ }
335
+
336
+ /**
337
+ * Return a nested set of arrays for all of the matching sub-sequences
338
+ * in the strings $a and $b.
339
+ *
340
+ * Each block contains the lower constraint of the block in $a, the lower
341
+ * constraint of the block in $b and finally the number of lines that the
342
+ * block continues for.
343
+ *
344
+ * @return array Nested array of the matching blocks, as described by the function.
345
+ */
346
+ public function getMatchingBlocks()
347
+ {
348
+ if(!empty($this->matchingBlocks)) {
349
+ return $this->matchingBlocks;
350
+ }
351
+
352
+ $aLength = count($this->a);
353
+ $bLength = count($this->b);
354
+
355
+ $queue = array(
356
+ array(
357
+ 0,
358
+ $aLength,
359
+ 0,
360
+ $bLength
361
+ )
362
+ );
363
+
364
+ $matchingBlocks = array();
365
+ while(!empty($queue)) {
366
+ list($alo, $ahi, $blo, $bhi) = array_pop($queue);
367
+ $x = $this->findLongestMatch($alo, $ahi, $blo, $bhi);
368
+ list($i, $j, $k) = $x;
369
+ if($k) {
370
+ $matchingBlocks[] = $x;
371
+ if($alo < $i && $blo < $j) {
372
+ $queue[] = array(
373
+ $alo,
374
+ $i,
375
+ $blo,
376
+ $j
377
+ );
378
+ }
379
+
380
+ if($i + $k < $ahi && $j + $k < $bhi) {
381
+ $queue[] = array(
382
+ $i + $k,
383
+ $ahi,
384
+ $j + $k,
385
+ $bhi
386
+ );
387
+ }
388
+ }
389
+ }
390
+
391
+ usort($matchingBlocks, array($this, 'tupleSort'));
392
+
393
+ $i1 = 0;
394
+ $j1 = 0;
395
+ $k1 = 0;
396
+ $nonAdjacent = array();
397
+ foreach($matchingBlocks as $block) {
398
+ list($i2, $j2, $k2) = $block;
399
+ if($i1 + $k1 == $i2 && $j1 + $k1 == $j2) {
400
+ $k1 += $k2;
401
+ }
402
+ else {
403
+ if($k1) {
404
+ $nonAdjacent[] = array(
405
+ $i1,
406
+ $j1,
407
+ $k1
408
+ );
409
+ }
410
+
411
+ $i1 = $i2;
412
+ $j1 = $j2;
413
+ $k1 = $k2;
414
+ }
415
+ }
416
+
417
+ if($k1) {
418
+ $nonAdjacent[] = array(
419
+ $i1,
420
+ $j1,
421
+ $k1
422
+ );
423
+ }
424
+
425
+ $nonAdjacent[] = array(
426
+ $aLength,
427
+ $bLength,
428
+ 0
429
+ );
430
+
431
+ $this->matchingBlocks = $nonAdjacent;
432
+ return $this->matchingBlocks;
433
+ }
434
+
435
+ /**
436
+ * Return a list of all of the opcodes for the differences between the
437
+ * two strings.
438
+ *
439
+ * The nested array returned contains an array describing the opcode
440
+ * which includes:
441
+ * 0 - The type of tag (as described below) for the opcode.
442
+ * 1 - The beginning line in the first sequence.
443
+ * 2 - The end line in the first sequence.
444
+ * 3 - The beginning line in the second sequence.
445
+ * 4 - The end line in the second sequence.
446
+ *
447
+ * The different types of tags include:
448
+ * replace - The string from $i1 to $i2 in $a should be replaced by
449
+ * the string in $b from $j1 to $j2.
450
+ * delete - The string in $a from $i1 to $j2 should be deleted.
451
+ * insert - The string in $b from $j1 to $j2 should be inserted at
452
+ * $i1 in $a.
453
+ * equal - The two strings with the specified ranges are equal.
454
+ *
455
+ * @return array Array of the opcodes describing the differences between the strings.
456
+ */
457
+ public function getOpCodes()
458
+ {
459
+ if(!empty($this->opCodes)) {
460
+ return $this->opCodes;
461
+ }
462
+
463
+ $i = 0;
464
+ $j = 0;
465
+ $this->opCodes = array();
466
+
467
+ $blocks = $this->getMatchingBlocks();
468
+ foreach($blocks as $block) {
469
+ list($ai, $bj, $size) = $block;
470
+ $tag = '';
471
+ if($i < $ai && $j < $bj) {
472
+ $tag = 'replace';
473
+ }
474
+ else if($i < $ai) {
475
+ $tag = 'delete';
476
+ }
477
+ else if($j < $bj) {
478
+ $tag = 'insert';
479
+ }
480
+
481
+ if($tag) {
482
+ $this->opCodes[] = array(
483
+ $tag,
484
+ $i,
485
+ $ai,
486
+ $j,
487
+ $bj
488
+ );
489
+ }
490
+
491
+ $i = $ai + $size;
492
+ $j = $bj + $size;
493
+
494
+ if($size) {
495
+ $this->opCodes[] = array(
496
+ 'equal',
497
+ $ai,
498
+ $i,
499
+ $bj,
500
+ $j
501
+ );
502
+ }
503
+ }
504
+ return $this->opCodes;
505
+ }
506
+
507
+ /**
508
+ * Return a series of nested arrays containing different groups of generated
509
+ * opcodes for the differences between the strings with up to $context lines
510
+ * of surrounding content.
511
+ *
512
+ * Essentially what happens here is any big equal blocks of strings are stripped
513
+ * out, the smaller subsets of changes are then arranged in to their groups.
514
+ * This means that the sequence matcher and diffs do not need to include the full
515
+ * content of the different files but can still provide context as to where the
516
+ * changes are.
517
+ *
518
+ * @param int $context The number of lines of context to provide around the groups.
519
+ * @return array Nested array of all of the grouped opcodes.
520
+ */
521
+ public function getGroupedOpcodes($context=3)
522
+ {
523
+ $opCodes = $this->getOpCodes();
524
+ if(empty($opCodes)) {
525
+ $opCodes = array(
526
+ array(
527
+ 'equal',
528
+ 0,
529
+ 1,
530
+ 0,
531
+ 1
532
+ )
533
+ );
534
+ }
535
+
536
+ if($opCodes[0][0] == 'equal') {
537
+ $opCodes[0] = array(
538
+ $opCodes[0][0],
539
+ max($opCodes[0][1], $opCodes[0][2] - $context),
540
+ $opCodes[0][2],
541
+ max($opCodes[0][3], $opCodes[0][4] - $context),
542
+ $opCodes[0][4]
543
+ );
544
+ }
545
+
546
+ $lastItem = count($opCodes) - 1;
547
+ if($opCodes[$lastItem][0] == 'equal') {
548
+ list($tag, $i1, $i2, $j1, $j2) = $opCodes[$lastItem];
549
+ $opCodes[$lastItem] = array(
550
+ $tag,
551
+ $i1,
552
+ min($i2, $i1 + $context),
553
+ $j1,
554
+ min($j2, $j1 + $context)
555
+ );
556
+ }
557
+
558
+ $maxRange = $context * 2;
559
+ $groups = array();
560
+ $group = array();
561
+ foreach($opCodes as $code) {
562
+ list($tag, $i1, $i2, $j1, $j2) = $code;
563
+ if($tag == 'equal' && $i2 - $i1 > $maxRange) {
564
+ $group[] = array(
565
+ $tag,
566
+ $i1,
567
+ min($i2, $i1 + $context),
568
+ $j1,
569
+ min($j2, $j1 + $context)
570
+ );
571
+ $groups[] = $group;
572
+ $group = array();
573
+ $i1 = max($i1, $i2 - $context);
574
+ $j1 = max($j1, $j2 - $context);
575
+ }
576
+ $group[] = array(
577
+ $tag,
578
+ $i1,
579
+ $i2,
580
+ $j1,
581
+ $j2
582
+ );
583
+ }
584
+
585
+ if(!empty($group) && !(count($group) == 1 && $group[0][0] == 'equal')) {
586
+ $groups[] = $group;
587
+ }
588
+
589
+ return $groups;
590
+ }
591
+
592
+ /**
593
+ * Return a measure of the similarity between the two sequences.
594
+ * This will be a float value between 0 and 1.
595
+ *
596
+ * Out of all of the ratio calculation functions, this is the most
597
+ * expensive to call if getMatchingBlocks or getOpCodes is yet to be
598
+ * called. The other calculation methods (quickRatio and realquickRatio)
599
+ * can be used to perform quicker calculations but may be less accurate.
600
+ *
601
+ * The ratio is calculated as (2 * number of matches) / total number of
602
+ * elements in both sequences.
603
+ *
604
+ * @return float The calculated ratio.
605
+ */
606
+ public function Ratio()
607
+ {
608
+ $matches = array_reduce($this->getMatchingBlocks(), array($this, 'ratioReduce'), 0);
609
+ return $this->calculateRatio($matches, count ($this->a) + count ($this->b));
610
+ }
611
+
612
+ /**
613
+ * Helper function to calculate the number of matches for Ratio().
614
+ *
615
+ * @param int $sum The running total for the number of matches.
616
+ * @param array $triple Array containing the matching block triple to add to the running total.
617
+ * @return int The new running total for the number of matches.
618
+ */
619
+ private function ratioReduce($sum, $triple)
620
+ {
621
+ return $sum + ($triple[count($triple) - 1]);
622
+ }
623
+
624
+ /**
625
+ * Quickly return an upper bound ratio for the similarity of the strings.
626
+ * This is quicker to compute than Ratio().
627
+ *
628
+ * @return float The calculated ratio.
629
+ */
630
+ private function quickRatio()
631
+ {
632
+ if($this->fullBCount === null) {
633
+ $this->fullBCount = array();
634
+ $bLength = count ($b);
635
+ for($i = 0; $i < $bLength; ++$i) {
636
+ $char = $this->b[$i];
637
+ $this->fullBCount[$char] = $this->arrayGetDefault($this->fullBCount, $char, 0) + 1;
638
+ }
639
+ }
640
+
641
+ $avail = array();
642
+ $matches = 0;
643
+ $aLength = count ($this->a);
644
+ for($i = 0; $i < $aLength; ++$i) {
645
+ $char = $this->a[$i];
646
+ if(isset($avail[$char])) {
647
+ $numb = $avail[$char];
648
+ }
649
+ else {
650
+ $numb = $this->arrayGetDefault($this->fullBCount, $char, 0);
651
+ }
652
+ $avail[$char] = $numb - 1;
653
+ if($numb > 0) {
654
+ ++$matches;
655
+ }
656
+ }
657
+
658
+ $this->calculateRatio($matches, count ($this->a) + count ($this->b));
659
+ }
660
+
661
+ /**
662
+ * Return an upper bound ratio really quickly for the similarity of the strings.
663
+ * This is quicker to compute than Ratio() and quickRatio().
664
+ *
665
+ * @return float The calculated ratio.
666
+ */
667
+ private function realquickRatio()
668
+ {
669
+ $aLength = count ($this->a);
670
+ $bLength = count ($this->b);
671
+
672
+ return $this->calculateRatio(min($aLength, $bLength), $aLength + $bLength);
673
+ }
674
+
675
+ /**
676
+ * Helper function for calculating the ratio to measure similarity for the strings.
677
+ * The ratio is defined as being 2 * (number of matches / total length)
678
+ *
679
+ * @param int $matches The number of matches in the two strings.
680
+ * @param int $length The length of the two strings.
681
+ * @return float The calculated ratio.
682
+ */
683
+ private function calculateRatio($matches, $length=0)
684
+ {
685
+ if($length) {
686
+ return 2 * ($matches / $length);
687
+ }
688
+ else {
689
+ return 1;
690
+ }
691
+ }
692
+
693
+ /**
694
+ * Helper function that provides the ability to return the value for a key
695
+ * in an array of it exists, or if it doesn't then return a default value.
696
+ * Essentially cleaner than doing a series of if(isset()) {} else {} calls.
697
+ *
698
+ * @param array $array The array to search.
699
+ * @param string $key The key to check that exists.
700
+ * @param mixed $default The value to return as the default value if the key doesn't exist.
701
+ * @return mixed The value from the array if the key exists or otherwise the default.
702
+ */
703
+ private function arrayGetDefault($array, $key, $default)
704
+ {
705
+ if(isset($array[$key])) {
706
+ return $array[$key];
707
+ }
708
+ else {
709
+ return $default;
710
+ }
711
+ }
712
+
713
+ /**
714
+ * Sort an array by the nested arrays it contains. Helper function for getMatchingBlocks
715
+ *
716
+ * @param array $a First array to compare.
717
+ * @param array $b Second array to compare.
718
+ * @return int -1, 0 or 1, as expected by the usort function.
719
+ */
720
+ private function tupleSort($a, $b)
721
+ {
722
+ $max = max(count($a), count($b));
723
+ for($i = 0; $i < $max; ++$i) {
724
+ if($a[$i] < $b[$i]) {
725
+ return -1;
726
+ }
727
+ else if($a[$i] > $b[$i]) {
728
+ return 1;
729
+ }
730
+ }
731
+
732
+ if(count($a) == $count($b)) {
733
+ return 0;
734
+ }
735
+ else if(count($a) < count($b)) {
736
+ return -1;
737
+ }
738
+ else {
739
+ return 1;
740
+ }
741
+ }
742
+ }
lib/IPTraf.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(! wordfence::isAdmin()){ exit(); } ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5
+ <link rel='stylesheet' id='wordfence-main-style-css' href='<?php echo wfUtils::getBaseURL(); ?>/css/iptraf.css?ver=<?php echo WORDFENCE_VERSION ?>' type='text/css' media='all' />
6
+ <body>
7
+ <h1>Wordfence: All recent hits for IP address <?php echo $IP; if($reverseLookup){ echo '[' . $reverseLookup . ']'; } ?></h1>
8
+ <table border="0" cellpadding="2" cellspacing="0" style="width: 900px;">
9
+ <?php foreach($results as $key => $v){ ?>
10
+ <tr><th>Time:</th><td><?php echo $v['timeAgo'] ?> ago -- <?php echo date(DATE_RFC822, $v['ctime']); ?> -- <?php echo $v['ctime']; ?> in Unixtime</td></tr>
11
+ <?php if($v['timeSinceLastHit']){ echo '<th>Secs since last hit:</th><td>' . $v['timeSinceLastHit'] . '</td></tr>'; } ?>
12
+ <tr><th>URL:</th><td><a href="<?php echo $v['URL']; ?>" target="_blank"><?php echo $v['URL']; ?></a></td></tr>
13
+ <tr><th>Type:</th><td><?php if($v['type'] == 'hit'){ echo 'Normal request'; } else if($v['type'] == '404'){ echo '<span style="color: #F00;">Page not found</span>'; } ?></td></tr>
14
+ <?php if($v['referer']){ ?><tr><th>Referrer:</th><td><a href="<?php echo $v['referer']; ?>" target="_blank"><?php echo $v['referer']; ?></a></td></tr><?php } ?>
15
+ <tr><th>Full Browser ID:</th><td><?php echo $v['UA']; ?></td></tr>
16
+ <?php if($v['user']){ ?>
17
+ <tr><th>User:</th><td><a href="<?php echo $v['user']['editLink']; ?>" target="_blank"><?php echo $v['user']['avatar'] . ' ' . $v['user']['display_name']; ?></a></td></tr>
18
+ <?php } ?>
19
+ <?php if($v['loc']){ ?>
20
+ <tr><th>Location:</th><td><img src="http://www.wordfence.com/images/flags/<?php echo strtolower($v['loc']['countryCode']); ?>.png" width="16" height="11" alt="<?php echo $v['loc']['countryName']; ?>" title="<?php echo $v['loc']['countryName']; ?>" class="wfFlag" />
21
+ <?php if($v['loc']['city']){ echo $v['loc']['city'] . ', '; } ?>
22
+ <?php echo $v['loc']['countryName']; ?>
23
+ </td></tr>
24
+ <?php } ?>
25
+ <tr><th>HTTP Headers:</th><td>
26
+ <table border="0" class="HTTP">
27
+ <?php foreach($v['HTTPHeaders'] as $key => $val){
28
+ echo "<tr><th class=\"HTTP\">$key</th><td class=\"HTTP\">"."$val</td></tr>";
29
+ }
30
+ ?>
31
+ </table>
32
+ </td></tr>
33
+ <tr><td colspan="2"><hr></td></tr>
34
+ <?php } ?>
35
+
36
+ </table>
37
+
38
+ <div class="footer">&copy;&nbsp;2011 Wordfence &mdash; Visit <a href="http://wordfence.com/">Wordfence.com</a> for help, security updates and more.</a>
39
+ </body>
40
+ </html>
lib/diffResult.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5
+ <link rel='stylesheet' id='wordfence-main-style-css' href='<?php echo wfUtils::getBaseURL(); ?>/css/diff.css?ver=<?php echo WORDFENCE_VERSION ?>' type='text/css' media='all' />
6
+ <body>
7
+ <h1>Wordfence: Viewing File Differences</h1>
8
+ <p style="width: 800px; font-size: 16px; font-family: Verdana;">
9
+ The two panels below show a before and after view of a file on your system that has been modified.
10
+ The left panel shows the original file before modification. The right panel shows your version
11
+ of the file that has been modified.
12
+ Use this view to determine if a file has been modified by an attacker or if this is a change
13
+ that you or another trusted person made.
14
+ If you are happy with the modifications you see here, then you should choose to
15
+ ignore this file the next time Wordfence scans your system.
16
+ </p>
17
+ <table border="0" style="margin: 0 0 20px 0;" class="summary">
18
+ <tr><td>Filename:</td><td><?php echo $_GET['file']; ?></td></tr>
19
+ <tr><td>File type:</td><td><?php
20
+ $cType = $_GET['cType'];
21
+ if($cType == 'core'){
22
+ echo "WordPress Core File</td></tr>";
23
+ } else if($cType == 'theme'){
24
+ echo "Theme File</td></tr><tr><td>Theme Name:</td><td>" . $_GET['cName'] . "</td></tr><tr><td>Theme Version:</td><td>" . $_GET['cVersion'] . "</td></tr>";
25
+ } else if($cType == 'plugin'){
26
+ echo "Plugin File</td></tr><tr><td>Plugin Name:</td><td>" . $_GET['cName'] . "</td></tr><tr><td>Plugin Version:</td><td>" . $_GET['cVersion'] . "</td></tr>";
27
+ } else {
28
+ echo "Unknown Type</td></tr>";
29
+ }
30
+ ?>
31
+ </table>
32
+
33
+ <?php echo $diffResult; ?>
34
+
35
+
36
+ <div class="diffFooter">&copy;&nbsp;2011 Wordfence &mdash; Visit <a href="http://wordfence.com/">Wordfence.com</a> for help, security updates and more.</a>
37
+ </body>
38
+ </html>
lib/email_genericAlert.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ This alert was generated by Wordfence on "<?php echo $blogName; ?>" at <?php echo $date; ?>
2
+
3
+
4
+ <?php echo $alertMsg; ?>
5
+
6
+
7
+ --
8
+ To change your alert options for Wordfence, visit:
9
+ <?php echo $myOptionsURL; ?>
10
+
11
+ To see current Wordfence alerts, visit:
12
+ <?php echo $myHomeURL; ?>
13
+
14
+
15
+
lib/email_newIssues.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Wordfence found the following new issues on "<?php echo get_bloginfo('name', 'raw'); ?>".
2
+
3
+ <?php if($totalCriticalIssues > 0){ ?>
4
+ Critical Problems:
5
+
6
+ <?php foreach($issues as $i){ if($i['severity'] == 1){ ?>
7
+ * <?php echo $i['shortMsg'] ?>
8
+
9
+ <?php } } } ?>
10
+
11
+ <?php if($level == 2 && $totalWarningIssues > 0){ ?>
12
+ Warnings:
13
+
14
+ <?php foreach($issues as $i){ if($i['severity'] == 2){ ?>
15
+ * <?php echo $i['shortMsg'] ?>
16
+
17
+ <?php } } } ?>
18
+
19
+
20
+
21
+
lib/geshi.php ADDED
@@ -0,0 +1,4755 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * GeSHi - Generic Syntax Highlighter
4
+ *
5
+ * The GeSHi class for Generic Syntax Highlighting. Please refer to the
6
+ * documentation at http://qbnz.com/highlighter/documentation.php for more
7
+ * information about how to use this class.
8
+ *
9
+ * For changes, release notes, TODOs etc, see the relevant files in the docs/
10
+ * directory.
11
+ *
12
+ * This file is part of GeSHi.
13
+ *
14
+ * GeSHi is free software; you can redistribute it and/or modify
15
+ * it under the terms of the GNU General Public License as published by
16
+ * the Free Software Foundation; either version 2 of the License, or
17
+ * (at your option) any later version.
18
+ *
19
+ * GeSHi is distributed in the hope that it will be useful,
20
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
+ * GNU General Public License for more details.
23
+ *
24
+ * You should have received a copy of the GNU General Public License
25
+ * along with GeSHi; if not, write to the Free Software
26
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27
+ *
28
+ * @package geshi
29
+ * @subpackage core
30
+ * @author Nigel McNie <nigel@geshi.org>, Benny Baumann <BenBE@omorphia.de>
31
+ * @copyright (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2008 Benny Baumann
32
+ * @license http://gnu.org/copyleft/gpl.html GNU GPL
33
+ *
34
+ */
35
+
36
+ //
37
+ // GeSHi Constants
38
+ // You should use these constant names in your programs instead of
39
+ // their values - you never know when a value may change in a future
40
+ // version
41
+ //
42
+
43
+ /** The version of this GeSHi file */
44
+ define('GESHI_VERSION', '1.0.8.10');
45
+
46
+ // Define the root directory for the GeSHi code tree
47
+ if (!defined('GESHI_ROOT')) {
48
+ /** The root directory for GeSHi */
49
+ define('GESHI_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);
50
+ }
51
+ /** The language file directory for GeSHi
52
+ @access private */
53
+ define('GESHI_LANG_ROOT', GESHI_ROOT . 'geshi' . DIRECTORY_SEPARATOR);
54
+
55
+ // Define if GeSHi should be paranoid about security
56
+ if (!defined('GESHI_SECURITY_PARANOID')) {
57
+ /** Tells GeSHi to be paranoid about security settings */
58
+ define('GESHI_SECURITY_PARANOID', true);
59
+ }
60
+
61
+ // Line numbers - use with enable_line_numbers()
62
+ /** Use no line numbers when building the result */
63
+ define('GESHI_NO_LINE_NUMBERS', 0);
64
+ /** Use normal line numbers when building the result */
65
+ define('GESHI_NORMAL_LINE_NUMBERS', 1);
66
+ /** Use fancy line numbers when building the result */
67
+ define('GESHI_FANCY_LINE_NUMBERS', 2);
68
+
69
+ // Container HTML type
70
+ /** Use nothing to surround the source */
71
+ define('GESHI_HEADER_NONE', 0);
72
+ /** Use a "div" to surround the source */
73
+ define('GESHI_HEADER_DIV', 1);
74
+ /** Use a "pre" to surround the source */
75
+ define('GESHI_HEADER_PRE', 2);
76
+ /** Use a pre to wrap lines when line numbers are enabled or to wrap the whole code. */
77
+ define('GESHI_HEADER_PRE_VALID', 3);
78
+ /**
79
+ * Use a "table" to surround the source:
80
+ *
81
+ * <table>
82
+ * <thead><tr><td colspan="2">$header</td></tr></thead>
83
+ * <tbody><tr><td><pre>$linenumbers</pre></td><td><pre>$code></pre></td></tr></tbody>
84
+ * <tfooter><tr><td colspan="2">$footer</td></tr></tfoot>
85
+ * </table>
86
+ *
87
+ * this is essentially only a workaround for Firefox, see sf#1651996 or take a look at
88
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=365805
89
+ * @note when linenumbers are disabled this is essentially the same as GESHI_HEADER_PRE
90
+ */
91
+ define('GESHI_HEADER_PRE_TABLE', 4);
92
+
93
+ // Capatalisation constants
94
+ /** Lowercase keywords found */
95
+ define('GESHI_CAPS_NO_CHANGE', 0);
96
+ /** Uppercase keywords found */
97
+ define('GESHI_CAPS_UPPER', 1);
98
+ /** Leave keywords found as the case that they are */
99
+ define('GESHI_CAPS_LOWER', 2);
100
+
101
+ // Link style constants
102
+ /** Links in the source in the :link state */
103
+ define('GESHI_LINK', 0);
104
+ /** Links in the source in the :hover state */
105
+ define('GESHI_HOVER', 1);
106
+ /** Links in the source in the :active state */
107
+ define('GESHI_ACTIVE', 2);
108
+ /** Links in the source in the :visited state */
109
+ define('GESHI_VISITED', 3);
110
+
111
+ // Important string starter/finisher
112
+ // Note that if you change these, they should be as-is: i.e., don't
113
+ // write them as if they had been run through htmlentities()
114
+ /** The starter for important parts of the source */
115
+ define('GESHI_START_IMPORTANT', '<BEGIN GeSHi>');
116
+ /** The ender for important parts of the source */
117
+ define('GESHI_END_IMPORTANT', '<END GeSHi>');
118
+
119
+ /**#@+
120
+ * @access private
121
+ */
122
+ // When strict mode applies for a language
123
+ /** Strict mode never applies (this is the most common) */
124
+ define('GESHI_NEVER', 0);
125
+ /** Strict mode *might* apply, and can be enabled or
126
+ disabled by {@link GeSHi->enable_strict_mode()} */
127
+ define('GESHI_MAYBE', 1);
128
+ /** Strict mode always applies */
129
+ define('GESHI_ALWAYS', 2);
130
+
131
+ // Advanced regexp handling constants, used in language files
132
+ /** The key of the regex array defining what to search for */
133
+ define('GESHI_SEARCH', 0);
134
+ /** The key of the regex array defining what bracket group in a
135
+ matched search to use as a replacement */
136
+ define('GESHI_REPLACE', 1);
137
+ /** The key of the regex array defining any modifiers to the regular expression */
138
+ define('GESHI_MODIFIERS', 2);
139
+ /** The key of the regex array defining what bracket group in a
140
+ matched search to put before the replacement */
141
+ define('GESHI_BEFORE', 3);
142
+ /** The key of the regex array defining what bracket group in a
143
+ matched search to put after the replacement */
144
+ define('GESHI_AFTER', 4);
145
+ /** The key of the regex array defining a custom keyword to use
146
+ for this regexp's html tag class */
147
+ define('GESHI_CLASS', 5);
148
+
149
+ /** Used in language files to mark comments */
150
+ define('GESHI_COMMENTS', 0);
151
+
152
+ /** Used to work around missing PHP features **/
153
+ define('GESHI_PHP_PRE_433', !(version_compare(PHP_VERSION, '4.3.3') === 1));
154
+
155
+ /** make sure we can call stripos **/
156
+ if (!function_exists('stripos')) {
157
+ // the offset param of preg_match is not supported below PHP 4.3.3
158
+ if (GESHI_PHP_PRE_433) {
159
+ /**
160
+ * @ignore
161
+ */
162
+ function stripos($haystack, $needle, $offset = null) {
163
+ if (!is_null($offset)) {
164
+ $haystack = substr($haystack, $offset);
165
+ }
166
+ if (preg_match('/'. preg_quote($needle, '/') . '/', $haystack, $match, PREG_OFFSET_CAPTURE)) {
167
+ return $match[0][1];
168
+ }
169
+ return false;
170
+ }
171
+ }
172
+ else {
173
+ /**
174
+ * @ignore
175
+ */
176
+ function stripos($haystack, $needle, $offset = null) {
177
+ if (preg_match('/'. preg_quote($needle, '/') . '/', $haystack, $match, PREG_OFFSET_CAPTURE, $offset)) {
178
+ return $match[0][1];
179
+ }
180
+ return false;
181
+ }
182
+ }
183
+ }
184
+
185
+ /** some old PHP / PCRE subpatterns only support up to xxx subpatterns in
186
+ regular expressions. Set this to false if your PCRE lib is up to date
187
+ @see GeSHi->optimize_regexp_list()
188
+ **/
189
+ define('GESHI_MAX_PCRE_SUBPATTERNS', 500);
190
+ /** it's also important not to generate too long regular expressions
191
+ be generous here... but keep in mind, that when reaching this limit we
192
+ still have to close open patterns. 12k should do just fine on a 16k limit.
193
+ @see GeSHi->optimize_regexp_list()
194
+ **/
195
+ define('GESHI_MAX_PCRE_LENGTH', 12288);
196
+
197
+ //Number format specification
198
+ /** Basic number format for integers */
199
+ define('GESHI_NUMBER_INT_BASIC', 1); //Default integers \d+
200
+ /** Enhanced number format for integers like seen in C */
201
+ define('GESHI_NUMBER_INT_CSTYLE', 2); //Default C-Style \d+[lL]?
202
+ /** Number format to highlight binary numbers with a suffix "b" */
203
+ define('GESHI_NUMBER_BIN_SUFFIX', 16); //[01]+[bB]
204
+ /** Number format to highlight binary numbers with a prefix % */
205
+ define('GESHI_NUMBER_BIN_PREFIX_PERCENT', 32); //%[01]+
206
+ /** Number format to highlight binary numbers with a prefix 0b (C) */
207
+ define('GESHI_NUMBER_BIN_PREFIX_0B', 64); //0b[01]+
208
+ /** Number format to highlight octal numbers with a leading zero */
209
+ define('GESHI_NUMBER_OCT_PREFIX', 256); //0[0-7]+
210
+ /** Number format to highlight octal numbers with a prefix 0o (logtalk) */
211
+ define('GESHI_NUMBER_OCT_PREFIX_0O', 512); //0[0-7]+
212
+ /** Number format to highlight octal numbers with a leading @ (Used in HiSofts Devpac series). */
213
+ define('GESHI_NUMBER_OCT_PREFIX_AT', 1024); //@[0-7]+
214
+ /** Number format to highlight octal numbers with a suffix of o */
215
+ define('GESHI_NUMBER_OCT_SUFFIX', 2048); //[0-7]+[oO]
216
+ /** Number format to highlight hex numbers with a prefix 0x */
217
+ define('GESHI_NUMBER_HEX_PREFIX', 4096); //0x[0-9a-fA-F]+
218
+ /** Number format to highlight hex numbers with a prefix $ */
219
+ define('GESHI_NUMBER_HEX_PREFIX_DOLLAR', 8192); //$[0-9a-fA-F]+
220
+ /** Number format to highlight hex numbers with a suffix of h */
221
+ define('GESHI_NUMBER_HEX_SUFFIX', 16384); //[0-9][0-9a-fA-F]*h
222
+ /** Number format to highlight floating-point numbers without support for scientific notation */
223
+ define('GESHI_NUMBER_FLT_NONSCI', 65536); //\d+\.\d+
224
+ /** Number format to highlight floating-point numbers without support for scientific notation */
225
+ define('GESHI_NUMBER_FLT_NONSCI_F', 131072); //\d+(\.\d+)?f
226
+ /** Number format to highlight floating-point numbers with support for scientific notation (E) and optional leading zero */
227
+ define('GESHI_NUMBER_FLT_SCI_SHORT', 262144); //\.\d+e\d+
228
+ /** Number format to highlight floating-point numbers with support for scientific notation (E) and required leading digit */
229
+ define('GESHI_NUMBER_FLT_SCI_ZERO', 524288); //\d+(\.\d+)?e\d+
230
+ //Custom formats are passed by RX array
231
+
232
+ // Error detection - use these to analyse faults
233
+ /** No sourcecode to highlight was specified
234
+ * @deprecated
235
+ */
236
+ define('GESHI_ERROR_NO_INPUT', 1);
237
+ /** The language specified does not exist */
238
+ define('GESHI_ERROR_NO_SUCH_LANG', 2);
239
+ /** GeSHi could not open a file for reading (generally a language file) */
240
+ define('GESHI_ERROR_FILE_NOT_READABLE', 3);
241
+ /** The header type passed to {@link GeSHi->set_header_type()} was invalid */
242
+ define('GESHI_ERROR_INVALID_HEADER_TYPE', 4);
243
+ /** The line number type passed to {@link GeSHi->enable_line_numbers()} was invalid */
244
+ define('GESHI_ERROR_INVALID_LINE_NUMBER_TYPE', 5);
245
+ /**#@-*/
246
+
247
+
248
+ /**
249
+ * The GeSHi Class.
250
+ *
251
+ * Please refer to the documentation for GeSHi 1.0.X that is available
252
+ * at http://qbnz.com/highlighter/documentation.php for more information
253
+ * about how to use this class.
254
+ *
255
+ * @package geshi
256
+ * @author Nigel McNie <nigel@geshi.org>, Benny Baumann <BenBE@omorphia.de>
257
+ * @copyright (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2008 Benny Baumann
258
+ */
259
+ class GeSHi {
260
+ /**#@+
261
+ * @access private
262
+ */
263
+ /**
264
+ * The source code to highlight
265
+ * @var string
266
+ */
267
+ var $source = '';
268
+
269
+ /**
270
+ * The language to use when highlighting
271
+ * @var string
272
+ */
273
+ var $language = '';
274
+
275
+ /**
276
+ * The data for the language used
277
+ * @var array
278
+ */
279
+ var $language_data = array();
280
+
281
+ /**
282
+ * The path to the language files
283
+ * @var string
284
+ */
285
+ var $language_path = GESHI_LANG_ROOT;
286
+
287
+ /**
288
+ * The error message associated with an error
289
+ * @var string
290
+ * @todo check err reporting works
291
+ */
292
+ var $error = false;
293
+
294
+ /**
295
+ * Possible error messages
296
+ * @var array
297
+ */
298
+ var $error_messages = array(
299
+ GESHI_ERROR_NO_SUCH_LANG => 'GeSHi could not find the language {LANGUAGE} (using path {PATH})',
300
+ GESHI_ERROR_FILE_NOT_READABLE => 'The file specified for load_from_file was not readable',
301
+ GESHI_ERROR_INVALID_HEADER_TYPE => 'The header type specified is invalid',
302
+ GESHI_ERROR_INVALID_LINE_NUMBER_TYPE => 'The line number type specified is invalid'
303
+ );
304
+
305
+ /**
306
+ * Whether highlighting is strict or not
307
+ * @var boolean
308
+ */
309
+ var $strict_mode = false;
310
+
311
+ /**
312
+ * Whether to use CSS classes in output
313
+ * @var boolean
314
+ */
315
+ var $use_classes = false;
316
+
317
+ /**
318
+ * The type of header to use. Can be one of the following
319
+ * values:
320
+ *
321
+ * - GESHI_HEADER_PRE: Source is outputted in a "pre" HTML element.
322
+ * - GESHI_HEADER_DIV: Source is outputted in a "div" HTML element.
323
+ * - GESHI_HEADER_NONE: No header is outputted.
324
+ *
325
+ * @var int
326
+ */
327
+ var $header_type = GESHI_HEADER_PRE;
328
+
329
+ /**
330
+ * Array of permissions for which lexics should be highlighted
331
+ * @var array
332
+ */
333
+ var $lexic_permissions = array(
334
+ 'KEYWORDS' => array(),
335
+ 'COMMENTS' => array('MULTI' => true),
336
+ 'REGEXPS' => array(),
337
+ 'ESCAPE_CHAR' => true,
338
+ 'BRACKETS' => true,
339
+ 'SYMBOLS' => false,
340
+ 'STRINGS' => true,
341
+ 'NUMBERS' => true,
342
+ 'METHODS' => true,
343
+ 'SCRIPT' => true
344
+ );
345
+
346
+ /**
347
+ * The time it took to parse the code
348
+ * @var double
349
+ */
350
+ var $time = 0;
351
+
352
+ /**
353
+ * The content of the header block
354
+ * @var string
355
+ */
356
+ var $header_content = '';
357
+
358
+ /**
359
+ * The content of the footer block
360
+ * @var string
361
+ */
362
+ var $footer_content = '';
363
+
364
+ /**
365
+ * The style of the header block
366
+ * @var string
367
+ */
368
+ var $header_content_style = '';
369
+
370
+ /**
371
+ * The style of the footer block
372
+ * @var string
373
+ */
374
+ var $footer_content_style = '';
375
+
376
+ /**
377
+ * Tells if a block around the highlighted source should be forced
378
+ * if not using line numbering
379
+ * @var boolean
380
+ */
381
+ var $force_code_block = false;
382
+
383
+ /**
384
+ * The styles for hyperlinks in the code
385
+ * @var array
386
+ */
387
+ var $link_styles = array();
388
+
389
+ /**
390
+ * Whether important blocks should be recognised or not
391
+ * @var boolean
392
+ * @deprecated
393
+ * @todo REMOVE THIS FUNCTIONALITY!
394
+ */
395
+ var $enable_important_blocks = false;
396
+
397
+ /**
398
+ * Styles for important parts of the code
399
+ * @var string
400
+ * @deprecated
401
+ * @todo As above - rethink the whole idea of important blocks as it is buggy and
402
+ * will be hard to implement in 1.2
403
+ */
404
+ var $important_styles = 'font-weight: bold; color: red;'; // Styles for important parts of the code
405
+
406
+ /**
407
+ * Whether CSS IDs should be added to the code
408
+ * @var boolean
409
+ */
410
+ var $add_ids = false;
411
+
412
+ /**
413
+ * Lines that should be highlighted extra
414
+ * @var array
415
+ */
416
+ var $highlight_extra_lines = array();
417
+
418
+ /**
419
+ * Styles of lines that should be highlighted extra
420
+ * @var array
421
+ */
422
+ var $highlight_extra_lines_styles = array();
423
+
424
+ /**
425
+ * Styles of extra-highlighted lines
426
+ * @var string
427
+ */
428
+ var $highlight_extra_lines_style = 'background-color: #ffc;';
429
+
430
+ /**
431
+ * The line ending
432
+ * If null, nl2br() will be used on the result string.
433
+ * Otherwise, all instances of \n will be replaced with $line_ending
434
+ * @var string
435
+ */
436
+ var $line_ending = null;
437
+
438
+ /**
439
+ * Number at which line numbers should start at
440
+ * @var int
441
+ */
442
+ var $line_numbers_start = 1;
443
+
444
+ /**
445
+ * The overall style for this code block
446
+ * @var string
447
+ */
448
+ var $overall_style = 'font-family:monospace;';
449
+
450
+ /**
451
+ * The style for the actual code
452
+ * @var string
453
+ */
454
+ var $code_style = 'font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;';
455
+
456
+ /**
457
+ * The overall class for this code block
458
+ * @var string
459
+ */
460
+ var $overall_class = '';
461
+
462
+ /**
463
+ * The overall ID for this code block
464
+ * @var string
465
+ */
466
+ var $overall_id = '';
467
+
468
+ /**
469
+ * Line number styles
470
+ * @var string
471
+ */
472
+ var $line_style1 = 'font-weight: normal; vertical-align:top;';
473
+
474
+ /**
475
+ * Line number styles for fancy lines
476
+ * @var string
477
+ */
478
+ var $line_style2 = 'font-weight: bold; vertical-align:top;';
479
+
480
+ /**
481
+ * Style for line numbers when GESHI_HEADER_PRE_TABLE is chosen
482
+ * @var string
483
+ */
484
+ var $table_linenumber_style = 'width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;';
485
+
486
+ /**
487
+ * Flag for how line numbers are displayed
488
+ * @var boolean
489
+ */
490
+ var $line_numbers = GESHI_NO_LINE_NUMBERS;
491
+
492
+ /**
493
+ * Flag to decide if multi line spans are allowed. Set it to false to make sure
494
+ * each tag is closed before and reopened after each linefeed.
495
+ * @var boolean
496
+ */
497
+ var $allow_multiline_span = true;
498
+
499
+ /**
500
+ * The "nth" value for fancy line highlighting
501
+ * @var int
502
+ */
503
+ var $line_nth_row = 0;
504
+
505
+ /**
506
+ * The size of tab stops
507
+ * @var int
508
+ */
509
+ var $tab_width = 8;
510
+
511
+ /**
512
+ * Should we use language-defined tab stop widths?
513
+ * @var int
514
+ */
515
+ var $use_language_tab_width = false;
516
+
517
+ /**
518
+ * Default target for keyword links
519
+ * @var string
520
+ */
521
+ var $link_target = '';
522
+
523
+ /**
524
+ * The encoding to use for entity encoding
525
+ * NOTE: Used with Escape Char Sequences to fix UTF-8 handling (cf. SF#2037598)
526
+ * @var string
527
+ */
528
+ var $encoding = 'utf-8';
529
+
530
+ /**
531
+ * Should keywords be linked?
532
+ * @var boolean
533
+ */
534
+ var $keyword_links = true;
535
+
536
+ /**
537
+ * Currently loaded language file
538
+ * @var string
539
+ * @since 1.0.7.22
540
+ */
541
+ var $loaded_language = '';
542
+
543
+ /**
544
+ * Wether the caches needed for parsing are built or not
545
+ *
546
+ * @var bool
547
+ * @since 1.0.8
548
+ */
549
+ var $parse_cache_built = false;
550
+
551
+ /**
552
+ * Work around for Suhosin Patch with disabled /e modifier
553
+ *
554
+ * Note from suhosins author in config file:
555
+ * <blockquote>
556
+ * The /e modifier inside <code>preg_replace()</code> allows code execution.
557
+ * Often it is the cause for remote code execution exploits. It is wise to
558
+ * deactivate this feature and test where in the application it is used.
559
+ * The developer using the /e modifier should be made aware that he should
560
+ * use <code>preg_replace_callback()</code> instead
561
+ * </blockquote>
562
+ *
563
+ * @var array
564
+ * @since 1.0.8
565
+ */
566
+ var $_kw_replace_group = 0;
567
+ var $_rx_key = 0;
568
+
569
+ /**
570
+ * some "callback parameters" for handle_multiline_regexps
571
+ *
572
+ * @since 1.0.8
573
+ * @access private
574
+ * @var string
575
+ */
576
+ var $_hmr_before = '';
577
+ var $_hmr_replace = '';
578
+ var $_hmr_after = '';
579
+ var $_hmr_key = 0;
580
+
581
+ /**#@-*/
582
+
583
+ /**
584
+ * Creates a new GeSHi object, with source and language
585
+ *
586
+ * @param string The source code to highlight
587
+ * @param string The language to highlight the source with
588
+ * @param string The path to the language file directory. <b>This
589
+ * is deprecated!</b> I've backported the auto path
590
+ * detection from the 1.1.X dev branch, so now it
591
+ * should be automatically set correctly. If you have
592
+ * renamed the language directory however, you will
593
+ * still need to set the path using this parameter or
594
+ * {@link GeSHi->set_language_path()}
595
+ * @since 1.0.0
596
+ */
597
+ function GeSHi($source = '', $language = '', $path = '') {
598
+ if (!empty($source)) {
599
+ $this->set_source($source);
600
+ }
601
+ if (!empty($language)) {
602
+ $this->set_language($language);
603
+ }
604
+ $this->set_language_path($path);
605
+ }
606
+
607
+ /**
608
+ * Returns an error message associated with the last GeSHi operation,
609
+ * or false if no error has occured
610
+ *
611
+ * @return string|false An error message if there has been an error, else false
612
+ * @since 1.0.0
613
+ */
614
+ function error() {
615
+ if ($this->error) {
616
+ //Put some template variables for debugging here ...
617
+ $debug_tpl_vars = array(
618
+ '{LANGUAGE}' => $this->language,
619
+ '{PATH}' => $this->language_path
620
+ );
621
+ $msg = str_replace(
622
+ array_keys($debug_tpl_vars),
623
+ array_values($debug_tpl_vars),
624
+ $this->error_messages[$this->error]);
625
+
626
+ return "<br /><strong>GeSHi Error:</strong> $msg (code {$this->error})<br />";
627
+ }
628
+ return false;
629
+ }
630
+
631
+ /**
632
+ * Gets a human-readable language name (thanks to Simon Patterson
633
+ * for the idea :))
634
+ *
635
+ * @return string The name for the current language
636
+ * @since 1.0.2
637
+ */
638
+ function get_language_name() {
639
+ if (GESHI_ERROR_NO_SUCH_LANG == $this->error) {
640
+ return $this->language_data['LANG_NAME'] . ' (Unknown Language)';
641
+ }
642
+ return $this->language_data['LANG_NAME'];
643
+ }
644
+
645
+ /**
646
+ * Sets the source code for this object
647
+ *
648
+ * @param string The source code to highlight
649
+ * @since 1.0.0
650
+ */
651
+ function set_source($source) {
652
+ $this->source = $source;
653
+ $this->highlight_extra_lines = array();
654
+ }
655
+
656
+ /**
657
+ * Sets the language for this object
658
+ *
659
+ * @note since 1.0.8 this function won't reset language-settings by default anymore!
660
+ * if you need this set $force_reset = true
661
+ *
662
+ * @param string The name of the language to use
663
+ * @since 1.0.0
664
+ */
665
+ function set_language($language, $force_reset = false) {
666
+ if ($force_reset) {
667
+ $this->loaded_language = false;
668
+ }
669
+
670
+ //Clean up the language name to prevent malicious code injection
671
+ $language = preg_replace('#[^a-zA-Z0-9\-_]#', '', $language);
672
+
673
+ $language = strtolower($language);
674
+
675
+ //Retreive the full filename
676
+ $file_name = $this->language_path . $language . '.php';
677
+ if ($file_name == $this->loaded_language) {
678
+ // this language is already loaded!
679
+ return;
680
+ }
681
+
682
+ $this->language = $language;
683
+
684
+ $this->error = false;
685
+ $this->strict_mode = GESHI_NEVER;
686
+
687
+ //Check if we can read the desired file
688
+ if (!is_readable($file_name)) {
689
+ $this->error = GESHI_ERROR_NO_SUCH_LANG;
690
+ return;
691
+ }
692
+
693
+ // Load the language for parsing
694
+ $this->load_language($file_name);
695
+ }
696
+
697
+ /**
698
+ * Sets the path to the directory containing the language files. Note
699
+ * that this path is relative to the directory of the script that included
700
+ * geshi.php, NOT geshi.php itself.
701
+ *
702
+ * @param string The path to the language directory
703
+ * @since 1.0.0
704
+ * @deprecated The path to the language files should now be automatically
705
+ * detected, so this method should no longer be needed. The
706
+ * 1.1.X branch handles manual setting of the path differently
707
+ * so this method will disappear in 1.2.0.
708
+ */
709
+ function set_language_path($path) {
710
+ if(strpos($path,':')) {
711
+ //Security Fix to prevent external directories using fopen wrappers.
712
+ if(DIRECTORY_SEPARATOR == "\\") {
713
+ if(!preg_match('#^[a-zA-Z]:#', $path) || false !== strpos($path, ':', 2)) {
714
+ return;
715
+ }
716
+ } else {
717
+ return;
718
+ }
719
+ }
720
+ if(preg_match('#[^/a-zA-Z0-9_\.\-\\\s:]#', $path)) {
721
+ //Security Fix to prevent external directories using fopen wrappers.
722
+ return;
723
+ }
724
+ if(GESHI_SECURITY_PARANOID && false !== strpos($path, '/.')) {
725
+ //Security Fix to prevent external directories using fopen wrappers.
726
+ return;
727
+ }
728
+ if(GESHI_SECURITY_PARANOID && false !== strpos($path, '..')) {
729
+ //Security Fix to prevent external directories using fopen wrappers.
730
+ return;
731
+ }
732
+ if ($path) {
733
+ $this->language_path = ('/' == $path[strlen($path) - 1]) ? $path : $path . '/';
734
+ $this->set_language($this->language); // otherwise set_language_path has no effect
735
+ }
736
+ }
737
+
738
+ /**
739
+ * Get supported langs or an associative array lang=>full_name.
740
+ * @param boolean $longnames
741
+ * @return array
742
+ */
743
+ function get_supported_languages($full_names=false)
744
+ {
745
+ // return array
746
+ $back = array();
747
+
748
+ // we walk the lang root
749
+ $dir = dir($this->language_path);
750
+
751
+ // foreach entry
752
+ while (false !== ($entry = $dir->read()))
753
+ {
754
+ $full_path = $this->language_path.$entry;
755
+
756
+ // Skip all dirs
757
+ if (is_dir($full_path)) {
758
+ continue;
759
+ }
760
+
761
+ // we only want lang.php files
762
+ if (!preg_match('/^([^.]+)\.php$/', $entry, $matches)) {
763
+ continue;
764
+ }
765
+
766
+ // Raw lang name is here
767
+ $langname = $matches[1];
768
+
769
+ // We want the fullname too?
770
+ if ($full_names === true)
771
+ {
772
+ if (false !== ($fullname = $this->get_language_fullname($langname)))
773
+ {
774
+ $back[$langname] = $fullname; // we go associative
775
+ }
776
+ }
777
+ else
778
+ {
779
+ // just store raw langname
780
+ $back[] = $langname;
781
+ }
782
+ }
783
+
784
+ $dir->close();
785
+
786
+ return $back;
787
+ }
788
+
789
+ /**
790
+ * Get full_name for a lang or false.
791
+ * @param string $language short langname (html4strict for example)
792
+ * @return mixed
793
+ */
794
+ function get_language_fullname($language)
795
+ {
796
+ //Clean up the language name to prevent malicious code injection
797
+ $language = preg_replace('#[^a-zA-Z0-9\-_]#', '', $language);
798
+
799
+ $language = strtolower($language);
800
+
801
+ // get fullpath-filename for a langname
802
+ $fullpath = $this->language_path.$language.'.php';
803
+
804
+ // we need to get contents :S
805
+ if (false === ($data = file_get_contents($fullpath))) {
806
+ $this->error = sprintf('Geshi::get_lang_fullname() Unknown Language: %s', $language);
807
+ return false;
808
+ }
809
+
810
+ // match the langname
811
+ if (!preg_match('/\'LANG_NAME\'\s*=>\s*\'((?:[^\']|\\\')+)\'/', $data, $matches)) {
812
+ $this->error = sprintf('Geshi::get_lang_fullname(%s): Regex can not detect language', $language);
813
+ return false;
814
+ }
815
+
816
+ // return fullname for langname
817
+ return stripcslashes($matches[1]);
818
+ }
819
+
820
+ /**
821
+ * Sets the type of header to be used.
822
+ *
823
+ * If GESHI_HEADER_DIV is used, the code is surrounded in a "div".This
824
+ * means more source code but more control over tab width and line-wrapping.
825
+ * GESHI_HEADER_PRE means that a "pre" is used - less source, but less
826
+ * control. Default is GESHI_HEADER_PRE.
827
+ *
828
+ * From 1.0.7.2, you can use GESHI_HEADER_NONE to specify that no header code
829
+ * should be outputted.
830
+ *
831
+ * @param int The type of header to be used
832
+ * @since 1.0.0
833
+ */
834
+ function set_header_type($type) {
835
+ //Check if we got a valid header type
836
+ if (!in_array($type, array(GESHI_HEADER_NONE, GESHI_HEADER_DIV,
837
+ GESHI_HEADER_PRE, GESHI_HEADER_PRE_VALID, GESHI_HEADER_PRE_TABLE))) {
838
+ $this->error = GESHI_ERROR_INVALID_HEADER_TYPE;
839
+ return;
840
+ }
841
+
842
+ //Set that new header type
843
+ $this->header_type = $type;
844
+ }
845
+
846
+ /**
847
+ * Sets the styles for the code that will be outputted
848
+ * when this object is parsed. The style should be a
849
+ * string of valid stylesheet declarations
850
+ *
851
+ * @param string The overall style for the outputted code block
852
+ * @param boolean Whether to merge the styles with the current styles or not
853
+ * @since 1.0.0
854
+ */
855
+ function set_overall_style($style, $preserve_defaults = false) {
856
+ if (!$preserve_defaults) {
857
+ $this->overall_style = $style;
858
+ } else {
859
+ $this->overall_style .= $style;
860
+ }
861
+ }
862
+
863
+ /**
864
+ * Sets the overall classname for this block of code. This
865
+ * class can then be used in a stylesheet to style this object's
866
+ * output
867
+ *
868
+ * @param string The class name to use for this block of code
869
+ * @since 1.0.0
870
+ */
871
+ function set_overall_class($class) {
872
+ $this->overall_class = $class;
873
+ }
874
+
875
+ /**
876
+ * Sets the overall id for this block of code. This id can then
877
+ * be used in a stylesheet to style this object's output
878
+ *
879
+ * @param string The ID to use for this block of code
880
+ * @since 1.0.0
881
+ */
882
+ function set_overall_id($id) {
883
+ $this->overall_id = $id;
884
+ }
885
+
886
+ /**
887
+ * Sets whether CSS classes should be used to highlight the source. Default
888
+ * is off, calling this method with no arguments will turn it on
889
+ *
890
+ * @param boolean Whether to turn classes on or not
891
+ * @since 1.0.0
892
+ */
893
+ function enable_classes($flag = true) {
894
+ $this->use_classes = ($flag) ? true : false;
895
+ }
896
+
897
+ /**
898
+ * Sets the style for the actual code. This should be a string
899
+ * containing valid stylesheet declarations. If $preserve_defaults is
900
+ * true, then styles are merged with the default styles, with the
901
+ * user defined styles having priority
902
+ *
903
+ * Note: Use this method to override any style changes you made to
904
+ * the line numbers if you are using line numbers, else the line of
905
+ * code will have the same style as the line number! Consult the
906
+ * GeSHi documentation for more information about this.
907
+ *
908
+ * @param string The style to use for actual code
909
+ * @param boolean Whether to merge the current styles with the new styles
910
+ * @since 1.0.2
911
+ */
912
+ function set_code_style($style, $preserve_defaults = false) {
913
+ if (!$preserve_defaults) {
914
+ $this->code_style = $style;
915
+ } else {
916
+ $this->code_style .= $style;
917
+ }
918
+ }
919
+
920
+ /**
921
+ * Sets the styles for the line numbers.
922
+ *
923
+ * @param string The style for the line numbers that are "normal"
924
+ * @param string|boolean If a string, this is the style of the line
925
+ * numbers that are "fancy", otherwise if boolean then this
926
+ * defines whether the normal styles should be merged with the
927
+ * new normal styles or not
928
+ * @param boolean If set, is the flag for whether to merge the "fancy"
929
+ * styles with the current styles or not
930
+ * @since 1.0.2
931
+ */
932
+ function set_line_style($style1, $style2 = '', $preserve_defaults = false) {
933
+ //Check if we got 2 or three parameters
934
+ if (is_bool($style2)) {
935
+ $preserve_defaults = $style2;
936
+ $style2 = '';
937
+ }
938
+
939
+ //Actually set the new styles
940
+ if (!$preserve_defaults) {
941
+ $this->line_style1 = $style1;
942
+ $this->line_style2 = $style2;
943
+ } else {
944
+ $this->line_style1 .= $style1;
945
+ $this->line_style2 .= $style2;
946
+ }
947
+ }
948
+
949
+ /**
950
+ * Sets whether line numbers should be displayed.
951
+ *
952
+ * Valid values for the first parameter are:
953
+ *
954
+ * - GESHI_NO_LINE_NUMBERS: Line numbers will not be displayed
955
+ * - GESHI_NORMAL_LINE_NUMBERS: Line numbers will be displayed
956
+ * - GESHI_FANCY_LINE_NUMBERS: Fancy line numbers will be displayed
957
+ *
958
+ * For fancy line numbers, the second parameter is used to signal which lines
959
+ * are to be fancy. For example, if the value of this parameter is 5 then every
960
+ * 5th line will be fancy.
961
+ *
962
+ * @param int How line numbers should be displayed
963
+ * @param int Defines which lines are fancy
964
+ * @since 1.0.0
965
+ */
966
+ function enable_line_numbers($flag, $nth_row = 5) {
967
+ if (GESHI_NO_LINE_NUMBERS != $flag && GESHI_NORMAL_LINE_NUMBERS != $flag
968
+ && GESHI_FANCY_LINE_NUMBERS != $flag) {
969
+ $this->error = GESHI_ERROR_INVALID_LINE_NUMBER_TYPE;
970
+ }
971
+ $this->line_numbers = $flag;
972
+ $this->line_nth_row = $nth_row;
973
+ }
974
+
975
+ /**
976
+ * Sets wether spans and other HTML markup generated by GeSHi can
977
+ * span over multiple lines or not. Defaults to true to reduce overhead.
978
+ * Set it to false if you want to manipulate the output or manually display
979
+ * the code in an ordered list.
980
+ *
981
+ * @param boolean Wether multiline spans are allowed or not
982
+ * @since 1.0.7.22
983
+ */
984
+ function enable_multiline_span($flag) {
985
+ $this->allow_multiline_span = (bool) $flag;
986
+ }
987
+
988
+ /**
989
+ * Get current setting for multiline spans, see GeSHi->enable_multiline_span().
990
+ *
991
+ * @see enable_multiline_span
992
+ * @return bool
993
+ */
994
+ function get_multiline_span() {
995
+ return $this->allow_multiline_span;
996
+ }
997
+
998
+ /**
999
+ * Sets the style for a keyword group. If $preserve_defaults is
1000
+ * true, then styles are merged with the default styles, with the
1001
+ * user defined styles having priority
1002
+ *
1003
+ * @param int The key of the keyword group to change the styles of
1004
+ * @param string The style to make the keywords
1005
+ * @param boolean Whether to merge the new styles with the old or just
1006
+ * to overwrite them
1007
+ * @since 1.0.0
1008
+ */
1009
+ function set_keyword_group_style($key, $style, $preserve_defaults = false) {
1010
+ //Set the style for this keyword group
1011
+ if (!$preserve_defaults) {
1012
+ $this->language_data['STYLES']['KEYWORDS'][$key] = $style;
1013
+ } else {
1014
+ $this->language_data['STYLES']['KEYWORDS'][$key] .= $style;
1015
+ }
1016
+
1017
+ //Update the lexic permissions
1018
+ if (!isset($this->lexic_permissions['KEYWORDS'][$key])) {
1019
+ $this->lexic_permissions['KEYWORDS'][$key] = true;
1020
+ }
1021
+ }
1022
+
1023
+ /**
1024
+ * Turns highlighting on/off for a keyword group
1025
+ *
1026
+ * @param int The key of the keyword group to turn on or off
1027
+ * @param boolean Whether to turn highlighting for that group on or off
1028
+ * @since 1.0.0
1029
+ */
1030
+ function set_keyword_group_highlighting($key, $flag = true) {
1031
+ $this->lexic_permissions['KEYWORDS'][$key] = ($flag) ? true : false;
1032
+ }
1033
+
1034
+ /**
1035
+ * Sets the styles for comment groups. If $preserve_defaults is
1036
+ * true, then styles are merged with the default styles, with the
1037
+ * user defined styles having priority
1038
+ *
1039
+ * @param int The key of the comment group to change the styles of
1040
+ * @param string The style to make the comments
1041
+ * @param boolean Whether to merge the new styles with the old or just
1042
+ * to overwrite them
1043
+ * @since 1.0.0
1044
+ */
1045
+ function set_comments_style($key, $style, $preserve_defaults = false) {
1046
+ if (!$preserve_defaults) {
1047
+ $this->language_data['STYLES']['COMMENTS'][$key] = $style;
1048
+ } else {
1049
+ $this->language_data['STYLES']['COMMENTS'][$key] .= $style;
1050
+ }
1051
+ }
1052
+
1053
+ /**
1054
+ * Turns highlighting on/off for comment groups
1055
+ *
1056
+ * @param int The key of the comment group to turn on or off
1057
+ * @param boolean Whether to turn highlighting for that group on or off
1058
+ * @since 1.0.0
1059
+ */
1060
+ function set_comments_highlighting($key, $flag = true) {
1061
+ $this->lexic_permissions['COMMENTS'][$key] = ($flag) ? true : false;
1062
+ }
1063
+
1064
+ /**
1065
+ * Sets the styles for escaped characters. If $preserve_defaults is
1066
+ * true, then styles are merged with the default styles, with the
1067
+ * user defined styles having priority
1068
+ *
1069
+ * @param string The style to make the escape characters
1070
+ * @param boolean Whether to merge the new styles with the old or just
1071
+ * to overwrite them
1072
+ * @since 1.0.0
1073
+ */
1074
+ function set_escape_characters_style($style, $preserve_defaults = false, $group = 0) {
1075
+ if (!$preserve_defaults) {
1076
+ $this->language_data['STYLES']['ESCAPE_CHAR'][$group] = $style;
1077
+ } else {
1078
+ $this->language_data['STYLES']['ESCAPE_CHAR'][$group] .= $style;
1079
+ }
1080
+ }
1081
+
1082
+ /**
1083
+ * Turns highlighting on/off for escaped characters
1084
+ *
1085
+ * @param boolean Whether to turn highlighting for escape characters on or off
1086
+ * @since 1.0.0
1087
+ */
1088
+ function set_escape_characters_highlighting($flag = true) {
1089
+ $this->lexic_permissions['ESCAPE_CHAR'] = ($flag) ? true : false;
1090
+ }
1091
+
1092
+ /**
1093
+ * Sets the styles for brackets. If $preserve_defaults is
1094
+ * true, then styles are merged with the default styles, with the
1095
+ * user defined styles having priority
1096
+ *
1097
+ * This method is DEPRECATED: use set_symbols_style instead.
1098
+ * This method will be removed in 1.2.X
1099
+ *
1100
+ * @param string The style to make the brackets
1101
+ * @param boolean Whether to merge the new styles with the old or just
1102
+ * to overwrite them
1103
+ * @since 1.0.0
1104
+ * @deprecated In favour of set_symbols_style
1105
+ */
1106
+ function set_brackets_style($style, $preserve_defaults = false) {
1107
+ if (!$preserve_defaults) {
1108
+ $this->language_data['STYLES']['BRACKETS'][0] = $style;
1109
+ } else {
1110
+ $this->language_data['STYLES']['BRACKETS'][0] .= $style;
1111
+ }
1112
+ }
1113
+
1114
+ /**
1115
+ * Turns highlighting on/off for brackets
1116
+ *
1117
+ * This method is DEPRECATED: use set_symbols_highlighting instead.
1118
+ * This method will be remove in 1.2.X
1119
+ *
1120
+ * @param boolean Whether to turn highlighting for brackets on or off
1121
+ * @since 1.0.0
1122
+ * @deprecated In favour of set_symbols_highlighting
1123
+ */
1124
+ function set_brackets_highlighting($flag) {
1125
+ $this->lexic_permissions['BRACKETS'] = ($flag) ? true : false;
1126
+ }
1127
+
1128
+ /**
1129
+ * Sets the styles for symbols. If $preserve_defaults is
1130
+ * true, then styles are merged with the default styles, with the
1131
+ * user defined styles having priority
1132
+ *
1133
+ * @param string The style to make the symbols
1134
+ * @param boolean Whether to merge the new styles with the old or just
1135
+ * to overwrite them
1136
+ * @param int Tells the group of symbols for which style should be set.
1137
+ * @since 1.0.1
1138
+ */
1139
+ function set_symbols_style($style, $preserve_defaults = false, $group = 0) {
1140
+ // Update the style of symbols
1141
+ if (!$preserve_defaults) {
1142
+ $this->language_data['STYLES']['SYMBOLS'][$group] = $style;
1143
+ } else {
1144
+ $this->language_data['STYLES']['SYMBOLS'][$group] .= $style;
1145
+ }
1146
+
1147
+ // For backward compatibility
1148
+ if (0 == $group) {
1149
+ $this->set_brackets_style ($style, $preserve_defaults);
1150
+ }
1151
+ }
1152
+
1153
+ /**
1154
+ * Turns highlighting on/off for symbols
1155
+ *
1156
+ * @param boolean Whether to turn highlighting for symbols on or off
1157
+ * @since 1.0.0
1158
+ */
1159
+ function set_symbols_highlighting($flag) {
1160
+ // Update lexic permissions for this symbol group
1161
+ $this->lexic_permissions['SYMBOLS'] = ($flag) ? true : false;
1162
+
1163
+ // For backward compatibility
1164
+ $this->set_brackets_highlighting ($flag);
1165
+ }
1166
+
1167
+ /**
1168
+ * Sets the styles for strings. If $preserve_defaults is
1169
+ * true, then styles are merged with the default styles, with the
1170
+ * user defined styles having priority
1171
+ *
1172
+ * @param string The style to make the escape characters
1173
+ * @param boolean Whether to merge the new styles with the old or just
1174
+ * to overwrite them
1175
+ * @param int Tells the group of strings for which style should be set.
1176
+ * @since 1.0.0
1177
+ */
1178
+ function set_strings_style($style, $preserve_defaults = false, $group = 0) {
1179
+ if (!$preserve_defaults) {
1180
+ $this->language_data['STYLES']['STRINGS'][$group] = $style;
1181
+ } else {
1182
+ $this->language_data['STYLES']['STRINGS'][$group] .= $style;
1183
+ }
1184
+ }
1185
+
1186
+ /**
1187
+ * Turns highlighting on/off for strings
1188
+ *
1189
+ * @param boolean Whether to turn highlighting for strings on or off
1190
+ * @since 1.0.0
1191
+ */
1192
+ function set_strings_highlighting($flag) {
1193
+ $this->lexic_permissions['STRINGS'] = ($flag) ? true : false;
1194
+ }
1195
+
1196
+ /**
1197
+ * Sets the styles for strict code blocks. If $preserve_defaults is
1198
+ * true, then styles are merged with the default styles, with the
1199
+ * user defined styles having priority
1200
+ *
1201
+ * @param string The style to make the script blocks
1202
+ * @param boolean Whether to merge the new styles with the old or just
1203
+ * to overwrite them
1204
+ * @param int Tells the group of script blocks for which style should be set.
1205
+ * @since 1.0.8.4
1206
+ */
1207
+ function set_script_style($style, $preserve_defaults = false, $group = 0) {
1208
+ // Update the style of symbols
1209
+ if (!$preserve_defaults) {
1210
+ $this->language_data['STYLES']['SCRIPT'][$group] = $style;
1211
+ } else {
1212
+ $this->language_data['STYLES']['SCRIPT'][$group] .= $style;
1213
+ }
1214
+ }
1215
+
1216
+ /**
1217
+ * Sets the styles for numbers. If $preserve_defaults is
1218
+ * true, then styles are merged with the default styles, with the
1219
+ * user defined styles having priority
1220
+ *
1221
+ * @param string The style to make the numbers
1222
+ * @param boolean Whether to merge the new styles with the old or just
1223
+ * to overwrite them
1224
+ * @param int Tells the group of numbers for which style should be set.
1225
+ * @since 1.0.0
1226
+ */
1227
+ function set_numbers_style($style, $preserve_defaults = false, $group = 0) {
1228
+ if (!$preserve_defaults) {
1229
+ $this->language_data['STYLES']['NUMBERS'][$group] = $style;
1230
+ } else {
1231
+ $this->language_data['STYLES']['NUMBERS'][$group] .= $style;
1232
+ }
1233
+ }
1234
+
1235
+ /**
1236
+ * Turns highlighting on/off for numbers
1237
+ *
1238
+ * @param boolean Whether to turn highlighting for numbers on or off
1239
+ * @since 1.0.0
1240
+ */
1241
+ function set_numbers_highlighting($flag) {
1242
+ $this->lexic_permissions['NUMBERS'] = ($flag) ? true : false;
1243
+ }
1244
+
1245
+ /**
1246
+ * Sets the styles for methods. $key is a number that references the
1247
+ * appropriate "object splitter" - see the language file for the language
1248
+ * you are highlighting to get this number. If $preserve_defaults is
1249
+ * true, then styles are merged with the default styles, with the
1250
+ * user defined styles having priority
1251
+ *
1252
+ * @param int The key of the object splitter to change the styles of
1253
+ * @param string The style to make the methods
1254
+ * @param boolean Whether to merge the new styles with the old or just
1255
+ * to overwrite them
1256
+ * @since 1.0.0
1257
+ */
1258
+ function set_methods_style($key, $style, $preserve_defaults = false) {
1259
+ if (!$preserve_defaults) {
1260
+ $this->language_data['STYLES']['METHODS'][$key] = $style;
1261
+ } else {
1262
+ $this->language_data['STYLES']['METHODS'][$key] .= $style;
1263
+ }
1264
+ }
1265
+
1266
+ /**
1267
+ * Turns highlighting on/off for methods
1268
+ *
1269
+ * @param boolean Whether to turn highlighting for methods on or off
1270
+ * @since 1.0.0
1271
+ */
1272
+ function set_methods_highlighting($flag) {
1273
+ $this->lexic_permissions['METHODS'] = ($flag) ? true : false;
1274
+ }
1275
+
1276
+ /**
1277
+ * Sets the styles for regexps. If $preserve_defaults is
1278
+ * true, then styles are merged with the default styles, with the
1279
+ * user defined styles having priority
1280
+ *
1281
+ * @param string The style to make the regular expression matches
1282
+ * @param boolean Whether to merge the new styles with the old or just
1283
+ * to overwrite them
1284
+ * @since 1.0.0
1285
+ */
1286
+ function set_regexps_style($key, $style, $preserve_defaults = false) {
1287
+ if (!$preserve_defaults) {
1288
+ $this->language_data['STYLES']['REGEXPS'][$key] = $style;
1289
+ } else {
1290
+ $this->language_data['STYLES']['REGEXPS'][$key] .= $style;
1291
+ }
1292
+ }
1293
+
1294
+ /**
1295
+ * Turns highlighting on/off for regexps
1296
+ *
1297
+ * @param int The key of the regular expression group to turn on or off
1298
+ * @param boolean Whether to turn highlighting for the regular expression group on or off
1299
+ * @since 1.0.0
1300
+ */
1301
+ function set_regexps_highlighting($key, $flag) {
1302
+ $this->lexic_permissions['REGEXPS'][$key] = ($flag) ? true : false;
1303
+ }
1304
+
1305
+ /**
1306
+ * Sets whether a set of keywords are checked for in a case sensitive manner
1307
+ *
1308
+ * @param int The key of the keyword group to change the case sensitivity of
1309
+ * @param boolean Whether to check in a case sensitive manner or not
1310
+ * @since 1.0.0
1311
+ */
1312
+ function set_case_sensitivity($key, $case) {
1313
+ $this->language_data['CASE_SENSITIVE'][$key] = ($case) ? true : false;
1314
+ }
1315
+
1316
+ /**
1317
+ * Sets the case that keywords should use when found. Use the constants:
1318
+ *
1319
+ * - GESHI_CAPS_NO_CHANGE: leave keywords as-is
1320
+ * - GESHI_CAPS_UPPER: convert all keywords to uppercase where found
1321
+ * - GESHI_CAPS_LOWER: convert all keywords to lowercase where found
1322
+ *
1323
+ * @param int A constant specifying what to do with matched keywords
1324
+ * @since 1.0.1
1325
+ */
1326
+ function set_case_keywords($case) {
1327
+ if (in_array($case, array(
1328
+ GESHI_CAPS_NO_CHANGE, GESHI_CAPS_UPPER, GESHI_CAPS_LOWER))) {
1329
+ $this->language_data['CASE_KEYWORDS'] = $case;
1330
+ }
1331
+ }
1332
+
1333
+ /**
1334
+ * Sets how many spaces a tab is substituted for
1335
+ *
1336
+ * Widths below zero are ignored
1337
+ *
1338
+ * @param int The tab width
1339
+ * @since 1.0.0
1340
+ */
1341
+ function set_tab_width($width) {
1342
+ $this->tab_width = intval($width);
1343
+
1344
+ //Check if it fit's the constraints:
1345
+ if ($this->tab_width < 1) {
1346
+ //Return it to the default
1347
+ $this->tab_width = 8;
1348
+ }
1349
+ }
1350
+
1351
+ /**
1352
+ * Sets whether or not to use tab-stop width specifed by language
1353
+ *
1354
+ * @param boolean Whether to use language-specific tab-stop widths
1355
+ * @since 1.0.7.20
1356
+ */
1357
+ function set_use_language_tab_width($use) {
1358
+ $this->use_language_tab_width = (bool) $use;
1359
+ }
1360
+
1361
+ /**
1362
+ * Returns the tab width to use, based on the current language and user
1363
+ * preference
1364
+ *
1365
+ * @return int Tab width
1366
+ * @since 1.0.7.20
1367
+ */
1368
+ function get_real_tab_width() {
1369
+ if (!$this->use_language_tab_width ||
1370
+ !isset($this->language_data['TAB_WIDTH'])) {
1371
+ return $this->tab_width;
1372
+ } else {
1373
+ return $this->language_data['TAB_WIDTH'];
1374
+ }
1375
+ }
1376
+
1377
+ /**
1378
+ * Enables/disables strict highlighting. Default is off, calling this
1379
+ * method without parameters will turn it on. See documentation
1380
+ * for more details on strict mode and where to use it.
1381
+ *
1382
+ * @param boolean Whether to enable strict mode or not
1383
+ * @since 1.0.0
1384
+ */
1385
+ function enable_strict_mode($mode = true) {
1386
+ if (GESHI_MAYBE == $this->language_data['STRICT_MODE_APPLIES']) {
1387
+ $this->strict_mode = ($mode) ? GESHI_ALWAYS : GESHI_NEVER;
1388
+ }
1389
+ }
1390
+
1391
+ /**
1392
+ * Disables all highlighting
1393
+ *
1394
+ * @since 1.0.0
1395
+ * @todo Rewrite with array traversal
1396
+ * @deprecated In favour of enable_highlighting
1397
+ */
1398
+ function disable_highlighting() {
1399
+ $this->enable_highlighting(false);
1400
+ }
1401
+
1402
+ /**
1403
+ * Enables all highlighting
1404
+ *
1405
+ * The optional flag parameter was added in version 1.0.7.21 and can be used
1406
+ * to enable (true) or disable (false) all highlighting.
1407
+ *
1408
+ * @since 1.0.0
1409
+ * @param boolean A flag specifying whether to enable or disable all highlighting
1410
+ * @todo Rewrite with array traversal
1411
+ */
1412
+ function enable_highlighting($flag = true) {
1413
+ $flag = $flag ? true : false;
1414
+ foreach ($this->lexic_permissions as $key => $value) {
1415
+ if (is_array($value)) {
1416
+ foreach ($value as $k => $v) {
1417
+ $this->lexic_permissions[$key][$k] = $flag;
1418
+ }
1419
+ } else {
1420
+ $this->lexic_permissions[$key] = $flag;
1421
+ }
1422
+ }
1423
+
1424
+ // Context blocks
1425
+ $this->enable_important_blocks = $flag;
1426
+ }
1427
+
1428
+ /**
1429
+ * Given a file extension, this method returns either a valid geshi language
1430
+ * name, or the empty string if it couldn't be found
1431
+ *
1432
+ * @param string The extension to get a language name for
1433
+ * @param array A lookup array to use instead of the default one
1434
+ * @since 1.0.5
1435
+ * @todo Re-think about how this method works (maybe make it private and/or make it
1436
+ * a extension->lang lookup?)
1437
+ * @todo static?
1438
+ */
1439
+ function get_language_name_from_extension( $extension, $lookup = array() ) {
1440
+ if ( !is_array($lookup) || empty($lookup)) {
1441
+ $lookup = array(
1442
+ '6502acme' => array( 'a', 's', 'asm', 'inc' ),
1443
+ '6502tasm' => array( 'a', 's', 'asm', 'inc' ),
1444
+ '6502kickass' => array( 'a', 's', 'asm', 'inc' ),
1445
+ '68000devpac' => array( 'a', 's', 'asm', 'inc' ),
1446
+ 'abap' => array('abap'),
1447
+ 'actionscript' => array('as'),
1448
+ 'ada' => array('a', 'ada', 'adb', 'ads'),
1449
+ 'apache' => array('conf'),
1450
+ 'asm' => array('ash', 'asm', 'inc'),
1451
+ 'asp' => array('asp'),
1452
+ 'bash' => array('sh'),
1453
+ 'bf' => array('bf'),
1454
+ 'c' => array('c', 'h'),
1455
+ 'c_mac' => array('c', 'h'),
1456
+ 'caddcl' => array(),
1457
+ 'cadlisp' => array(),
1458
+ 'cdfg' => array('cdfg'),
1459
+ 'cobol' => array('cbl'),
1460
+ 'cpp' => array('cpp', 'hpp', 'C', 'H', 'CPP', 'HPP'),
1461
+ 'csharp' => array('cs'),
1462
+ 'css' => array('css'),
1463
+ 'd' => array('d'),
1464
+ 'delphi' => array('dpk', 'dpr', 'pp', 'pas'),
1465
+ 'diff' => array('diff', 'patch'),
1466
+ 'dos' => array('bat', 'cmd'),
1467
+ 'gdb' => array('kcrash', 'crash', 'bt'),
1468
+ 'gettext' => array('po', 'pot'),
1469
+ 'gml' => array('gml'),
1470
+ 'gnuplot' => array('plt'),
1471
+ 'groovy' => array('groovy'),
1472
+ 'haskell' => array('hs'),
1473
+ 'html4strict' => array('html', 'htm'),
1474
+ 'ini' => array('ini', 'desktop'),
1475
+ 'java' => array('java'),
1476
+ 'javascript' => array('js'),
1477
+ 'klonec' => array('kl1'),
1478
+ 'klonecpp' => array('klx'),
1479
+ 'latex' => array('tex'),
1480
+ 'lisp' => array('lisp'),
1481
+ 'lua' => array('lua'),
1482
+ 'matlab' => array('m'),
1483
+ 'mpasm' => array(),
1484
+ 'mysql' => array('sql'),
1485
+ 'nsis' => array(),
1486
+ 'objc' => array(),
1487
+ 'oobas' => array(),
1488
+ 'oracle8' => array(),
1489
+ 'oracle10' => array(),
1490
+ 'pascal' => array('pas'),
1491
+ 'perl' => array('pl', 'pm'),
1492
+ 'php' => array('php', 'php5', 'phtml', 'phps'),
1493
+ 'povray' => array('pov'),
1494
+ 'providex' => array('pvc', 'pvx'),
1495
+ 'prolog' => array('pl'),
1496
+ 'python' => array('py'),
1497
+ 'qbasic' => array('bi'),
1498
+ 'reg' => array('reg'),
1499
+ 'ruby' => array('rb'),
1500
+ 'sas' => array('sas'),
1501
+ 'scala' => array('scala'),
1502
+ 'scheme' => array('scm'),
1503
+ 'scilab' => array('sci'),
1504
+ 'smalltalk' => array('st'),
1505
+ 'smarty' => array(),
1506
+ 'tcl' => array('tcl'),
1507
+ 'vb' => array('bas'),
1508
+ 'vbnet' => array(),
1509
+ 'visualfoxpro' => array(),
1510
+ 'whitespace' => array('ws'),
1511
+ 'xml' => array('xml', 'svg', 'xrc'),
1512
+ 'z80' => array('z80', 'asm', 'inc')
1513
+ );
1514
+ }
1515
+
1516
+ foreach ($lookup as $lang => $extensions) {
1517
+ if (in_array($extension, $extensions)) {
1518
+ return $lang;
1519
+ }
1520
+ }
1521
+ return '';
1522
+ }
1523
+
1524
+ /**
1525
+ * Given a file name, this method loads its contents in, and attempts
1526
+ * to set the language automatically. An optional lookup table can be
1527
+ * passed for looking up the language name. If not specified a default
1528
+ * table is used
1529
+ *
1530
+ * The language table is in the form
1531
+ * <pre>array(
1532
+ * 'lang_name' => array('extension', 'extension', ...),
1533
+ * 'lang_name' ...
1534
+ * );</pre>
1535
+ *
1536
+ * @param string The filename to load the source from
1537
+ * @param array A lookup array to use instead of the default one
1538
+ * @todo Complete rethink of this and above method
1539
+ * @since 1.0.5
1540
+ */
1541
+ function load_from_file($file_name, $lookup = array()) {
1542
+ if (is_readable($file_name)) {
1543
+ $this->set_source(file_get_contents($file_name));
1544
+ $this->set_language($this->get_language_name_from_extension(substr(strrchr($file_name, '.'), 1), $lookup));
1545
+ } else {
1546
+ $this->error = GESHI_ERROR_FILE_NOT_READABLE;
1547
+ }
1548
+ }
1549
+
1550
+ /**
1551
+ * Adds a keyword to a keyword group for highlighting
1552
+ *
1553
+ * @param int The key of the keyword group to add the keyword to
1554
+ * @param string The word to add to the keyword group
1555
+ * @since 1.0.0
1556
+ */
1557
+ function add_keyword($key, $word) {
1558
+ if (!in_array($word, $this->language_data['KEYWORDS'][$key])) {
1559
+ $this->language_data['KEYWORDS'][$key][] = $word;
1560
+
1561
+ //NEW in 1.0.8 don't recompile the whole optimized regexp, simply append it
1562
+ if ($this->parse_cache_built) {
1563
+ $subkey = count($this->language_data['CACHED_KEYWORD_LISTS'][$key]) - 1;
1564
+ $this->language_data['CACHED_KEYWORD_LISTS'][$key][$subkey] .= '|' . preg_quote($word, '/');
1565
+ }
1566
+ }
1567
+ }
1568
+
1569
+ /**
1570
+ * Removes a keyword from a keyword group
1571
+ *
1572
+ * @param int The key of the keyword group to remove the keyword from
1573
+ * @param string The word to remove from the keyword group
1574
+ * @param bool Wether to automatically recompile the optimized regexp list or not.
1575
+ * Note: if you set this to false and @see GeSHi->parse_code() was already called once,
1576
+ * for the current language, you have to manually call @see GeSHi->optimize_keyword_group()
1577
+ * or the removed keyword will stay in cache and still be highlighted! On the other hand
1578
+ * it might be too expensive to recompile the regexp list for every removal if you want to
1579
+ * remove a lot of keywords.
1580
+ * @since 1.0.0
1581
+ */
1582
+ function remove_keyword($key, $word, $recompile = true) {
1583
+ $key_to_remove = array_search($word, $this->language_data['KEYWORDS'][$key]);
1584
+ if ($key_to_remove !== false) {
1585
+ unset($this->language_data['KEYWORDS'][$key][$key_to_remove]);
1586
+
1587
+ //NEW in 1.0.8, optionally recompile keyword group
1588
+ if ($recompile && $this->parse_cache_built) {
1589
+ $this->optimize_keyword_group($key);
1590
+ }
1591
+ }
1592
+ }
1593
+
1594
+ /**
1595
+ * Creates a new keyword group
1596
+ *
1597
+ * @param int The key of the keyword group to create
1598
+ * @param string The styles for the keyword group
1599
+ * @param boolean Whether the keyword group is case sensitive ornot
1600
+ * @param array The words to use for the keyword group
1601
+ * @since 1.0.0
1602
+ */
1603
+ function add_keyword_group($key, $styles, $case_sensitive = true, $words = array()) {
1604
+ $words = (array) $words;
1605
+ if (empty($words)) {
1606
+ // empty word lists mess up highlighting
1607
+ return false;
1608
+ }
1609
+
1610
+ //Add the new keyword group internally
1611
+ $this->language_data['KEYWORDS'][$key] = $words;
1612
+ $this->lexic_permissions['KEYWORDS'][$key] = true;
1613
+ $this->language_data['CASE_SENSITIVE'][$key] = $case_sensitive;
1614
+ $this->language_data['STYLES']['KEYWORDS'][$key] = $styles;
1615
+
1616
+ //NEW in 1.0.8, cache keyword regexp
1617
+ if ($this->parse_cache_built) {
1618
+ $this->optimize_keyword_group($key);
1619
+ }
1620
+ }
1621
+
1622
+ /**
1623
+ * Removes a keyword group
1624
+ *
1625
+ * @param int The key of the keyword group to remove
1626
+ * @since 1.0.0
1627
+ */
1628
+ function remove_keyword_group ($key) {
1629
+ //Remove the keyword group internally
1630
+ unset($this->language_data['KEYWORDS'][$key]);
1631
+ unset($this->lexic_permissions['KEYWORDS'][$key]);
1632
+ unset($this->language_data['CASE_SENSITIVE'][$key]);
1633
+ unset($this->language_data['STYLES']['KEYWORDS'][$key]);
1634
+
1635
+ //NEW in 1.0.8
1636
+ unset($this->language_data['CACHED_KEYWORD_LISTS'][$key]);
1637
+ }
1638
+
1639
+ /**
1640
+ * compile optimized regexp list for keyword group
1641
+ *
1642
+ * @param int The key of the keyword group to compile & optimize
1643
+ * @since 1.0.8
1644
+ */
1645
+ function optimize_keyword_group($key) {
1646
+ $this->language_data['CACHED_KEYWORD_LISTS'][$key] =
1647
+ $this->optimize_regexp_list($this->language_data['KEYWORDS'][$key]);
1648
+ $space_as_whitespace = false;
1649
+ if(isset($this->language_data['PARSER_CONTROL'])) {
1650
+ if(isset($this->language_data['PARSER_CONTROL']['KEYWORDS'])) {
1651
+ if(isset($this->language_data['PARSER_CONTROL']['KEYWORDS']['SPACE_AS_WHITESPACE'])) {
1652
+ $space_as_whitespace = $this->language_data['PARSER_CONTROL']['KEYWORDS']['SPACE_AS_WHITESPACE'];
1653
+ }
1654
+ if(isset($this->language_data['PARSER_CONTROL']['KEYWORDS'][$key]['SPACE_AS_WHITESPACE'])) {
1655
+ if(isset($this->language_data['PARSER_CONTROL']['KEYWORDS'][$key]['SPACE_AS_WHITESPACE'])) {
1656
+ $space_as_whitespace = $this->language_data['PARSER_CONTROL']['KEYWORDS'][$key]['SPACE_AS_WHITESPACE'];
1657
+ }
1658
+ }
1659
+ }
1660
+ }
1661
+ if($space_as_whitespace) {
1662
+ foreach($this->language_data['CACHED_KEYWORD_LISTS'][$key] as $rxk => $rxv) {
1663
+ $this->language_data['CACHED_KEYWORD_LISTS'][$key][$rxk] =
1664
+ str_replace(" ", "\\s+", $rxv);
1665
+ }
1666
+ }
1667
+ }
1668
+
1669
+ /**
1670
+ * Sets the content of the header block
1671
+ *
1672
+ * @param string The content of the header block
1673
+ * @since 1.0.2
1674
+ */
1675
+ function set_header_content($content) {
1676
+ $this->header_content = $content;
1677
+ }
1678
+
1679
+ /**
1680
+ * Sets the content of the footer block
1681
+ *
1682
+ * @param string The content of the footer block
1683
+ * @since 1.0.2
1684
+ */
1685
+ function set_footer_content($content) {
1686
+ $this->footer_content = $content;
1687
+ }
1688
+
1689
+ /**
1690
+ * Sets the style for the header content
1691
+ *
1692
+ * @param string The style for the header content
1693
+ * @since 1.0.2
1694
+ */
1695
+ function set_header_content_style($style) {
1696
+ $this->header_content_style = $style;
1697
+ }
1698
+
1699
+ /**
1700
+ * Sets the style for the footer content
1701
+ *
1702
+ * @param string The style for the footer content
1703
+ * @since 1.0.2
1704
+ */
1705
+ function set_footer_content_style($style) {
1706
+ $this->footer_content_style = $style;
1707
+ }
1708
+
1709
+ /**
1710
+ * Sets whether to force a surrounding block around
1711
+ * the highlighted code or not
1712
+ *
1713
+ * @param boolean Tells whether to enable or disable this feature
1714
+ * @since 1.0.7.20
1715
+ */
1716
+ function enable_inner_code_block($flag) {
1717
+ $this->force_code_block = (bool)$flag;
1718
+ }
1719
+
1720
+ /**
1721
+ * Sets the base URL to be used for keywords
1722
+ *
1723
+ * @param int The key of the keyword group to set the URL for
1724
+ * @param string The URL to set for the group. If {FNAME} is in
1725
+ * the url somewhere, it is replaced by the keyword
1726
+ * that the URL is being made for
1727
+ * @since 1.0.2
1728
+ */
1729
+ function set_url_for_keyword_group($group, $url) {
1730
+ $this->language_data['URLS'][$group] = $url;
1731
+ }
1732
+
1733
+ /**
1734
+ * Sets styles for links in code
1735
+ *
1736
+ * @param int A constant that specifies what state the style is being
1737
+ * set for - e.g. :hover or :visited
1738
+ * @param string The styles to use for that state
1739
+ * @since 1.0.2
1740
+ */
1741
+ function set_link_styles($type, $styles) {
1742
+ $this->link_styles[$type] = $styles;
1743
+ }
1744
+
1745
+ /**
1746
+ * Sets the target for links in code
1747
+ *
1748
+ * @param string The target for links in the code, e.g. _blank
1749
+ * @since 1.0.3
1750
+ */
1751
+ function set_link_target($target) {
1752
+ if (!$target) {
1753
+ $this->link_target = '';
1754
+ } else {
1755
+ $this->link_target = ' target="' . $target . '"';
1756
+ }
1757
+ }
1758
+
1759
+ /**
1760
+ * Sets styles for important parts of the code
1761
+ *
1762
+ * @param string The styles to use on important parts of the code
1763
+ * @since 1.0.2
1764
+ */
1765
+ function set_important_styles($styles) {
1766
+ $this->important_styles = $styles;
1767
+ }
1768
+
1769
+ /**
1770
+ * Sets whether context-important blocks are highlighted
1771
+ *
1772
+ * @param boolean Tells whether to enable or disable highlighting of important blocks
1773
+ * @todo REMOVE THIS SHIZ FROM GESHI!
1774
+ * @deprecated
1775
+ * @since 1.0.2
1776
+ */
1777
+ function enable_important_blocks($flag) {
1778
+ $this->enable_important_blocks = ( $flag ) ? true : false;
1779
+ }
1780
+
1781
+ /**
1782
+ * Whether CSS IDs should be added to each line
1783
+ *
1784
+ * @param boolean If true, IDs will be added to each line.
1785
+ * @since 1.0.2
1786
+ */
1787
+ function enable_ids($flag = true) {
1788
+ $this->add_ids = ($flag) ? true : false;
1789
+ }
1790
+
1791
+ /**
1792
+ * Specifies which lines to highlight extra
1793
+ *
1794
+ * The extra style parameter was added in 1.0.7.21.
1795
+ *
1796
+ * @param mixed An array of line numbers to highlight, or just a line
1797
+ * number on its own.
1798
+ * @param string A string specifying the style to use for this line.
1799
+ * If null is specified, the default style is used.
1800
+ * If false is specified, the line will be removed from
1801
+ * special highlighting
1802
+ * @since 1.0.2
1803
+ * @todo Some data replication here that could be cut down on
1804
+ */
1805
+ function highlight_lines_extra($lines, $style = null) {
1806
+ if (is_array($lines)) {
1807
+ //Split up the job using single lines at a time
1808
+ foreach ($lines as $line) {
1809
+ $this->highlight_lines_extra($line, $style);
1810
+ }
1811
+ } else {
1812
+ //Mark the line as being highlighted specially
1813
+ $lines = intval($lines);
1814
+ $this->highlight_extra_lines[$lines] = $lines;
1815
+
1816
+ //Decide on which style to use
1817
+ if ($style === null) { //Check if we should use default style
1818
+ unset($this->highlight_extra_lines_styles[$lines]);
1819
+ } else if ($style === false) { //Check if to remove this line
1820
+ unset($this->highlight_extra_lines[$lines]);
1821
+ unset($this->highlight_extra_lines_styles[$lines]);
1822
+ } else {
1823
+ $this->highlight_extra_lines_styles[$lines] = $style;
1824
+ }
1825
+ }
1826
+ }
1827
+
1828
+ /**
1829
+ * Sets the style for extra-highlighted lines
1830
+ *
1831
+ * @param string The style for extra-highlighted lines
1832
+ * @since 1.0.2
1833
+ */
1834
+ function set_highlight_lines_extra_style($styles) {
1835
+ $this->highlight_extra_lines_style = $styles;
1836
+ }
1837
+
1838
+ /**
1839
+ * Sets the line-ending
1840
+ *
1841
+ * @param string The new line-ending
1842
+ * @since 1.0.2
1843
+ */
1844
+ function set_line_ending($line_ending) {
1845
+ $this->line_ending = (string)$line_ending;
1846
+ }
1847
+
1848
+ /**
1849
+ * Sets what number line numbers should start at. Should
1850
+ * be a positive integer, and will be converted to one.
1851
+ *
1852
+ * <b>Warning:</b> Using this method will add the "start"
1853
+ * attribute to the &lt;ol&gt; that is used for line numbering.
1854
+ * This is <b>not</b> valid XHTML strict, so if that's what you
1855
+ * care about then don't use this method. Firefox is getting
1856
+ * support for the CSS method of doing this in 1.1 and Opera
1857
+ * has support for the CSS method, but (of course) IE doesn't
1858
+ * so it's not worth doing it the CSS way yet.
1859
+ *
1860
+ * @param int The number to start line numbers at
1861
+ * @since 1.0.2
1862
+ */
1863
+ function start_line_numbers_at($number) {
1864
+ $this->line_numbers_start = abs(intval($number));
1865
+ }
1866
+
1867
+ /**
1868
+ * Sets the encoding used for htmlspecialchars(), for international
1869
+ * support.
1870
+ *
1871
+ * NOTE: This is not needed for now because htmlspecialchars() is not
1872
+ * being used (it has a security hole in PHP4 that has not been patched).
1873
+ * Maybe in a future version it may make a return for speed reasons, but
1874
+ * I doubt it.
1875
+ *
1876
+ * @param string The encoding to use for the source
1877
+ * @since 1.0.3
1878
+ */
1879
+ function set_encoding($encoding) {
1880
+ if ($encoding) {
1881
+ $this->encoding = strtolower($encoding);
1882
+ }
1883
+ }
1884
+
1885
+ /**
1886
+ * Turns linking of keywords on or off.
1887
+ *
1888
+ * @param boolean If true, links will be added to keywords
1889
+ * @since 1.0.2
1890
+ */
1891
+ function enable_keyword_links($enable = true) {
1892
+ $this->keyword_links = (bool) $enable;
1893
+ }
1894
+
1895
+ /**
1896
+ * Setup caches needed for styling. This is automatically called in
1897
+ * parse_code() and get_stylesheet() when appropriate. This function helps
1898
+ * stylesheet generators as they rely on some style information being
1899
+ * preprocessed
1900
+ *
1901
+ * @since 1.0.8
1902
+ * @access private
1903
+ */
1904
+ function build_style_cache() {
1905
+ //Build the style cache needed to highlight numbers appropriate
1906
+ if($this->lexic_permissions['NUMBERS']) {
1907
+ //First check what way highlighting information for numbers are given
1908
+ if(!isset($this->language_data['NUMBERS'])) {
1909
+ $this->language_data['NUMBERS'] = 0;
1910
+ }
1911
+
1912
+ if(is_array($this->language_data['NUMBERS'])) {
1913
+ $this->language_data['NUMBERS_CACHE'] = $this->language_data['NUMBERS'];
1914
+ } else {
1915
+ $this->language_data['NUMBERS_CACHE'] = array();
1916
+ if(!$this->language_data['NUMBERS']) {
1917
+ $this->language_data['NUMBERS'] =
1918
+ GESHI_NUMBER_INT_BASIC |
1919
+ GESHI_NUMBER_FLT_NONSCI;
1920
+ }
1921
+
1922
+ for($i = 0, $j = $this->language_data['NUMBERS']; $j > 0; ++$i, $j>>=1) {
1923
+ //Rearrange style indices if required ...
1924
+ if(isset($this->language_data['STYLES']['NUMBERS'][1<<$i])) {
1925
+ $this->language_data['STYLES']['NUMBERS'][$i] =
1926
+ $this->language_data['STYLES']['NUMBERS'][1<<$i];
1927
+ unset($this->language_data['STYLES']['NUMBERS'][1<<$i]);
1928
+ }
1929
+
1930
+ //Check if this bit is set for highlighting
1931
+ if($j&1) {
1932
+ //So this bit is set ...
1933
+ //Check if it belongs to group 0 or the actual stylegroup
1934
+ if(isset($this->language_data['STYLES']['NUMBERS'][$i])) {
1935
+ $this->language_data['NUMBERS_CACHE'][$i] = 1 << $i;
1936
+ } else {
1937
+ if(!isset($this->language_data['NUMBERS_CACHE'][0])) {
1938
+ $this->language_data['NUMBERS_CACHE'][0] = 0;
1939
+ }
1940
+ $this->language_data['NUMBERS_CACHE'][0] |= 1 << $i;
1941
+ }
1942
+ }
1943
+ }
1944
+ }
1945
+ }
1946
+ }
1947
+
1948
+ /**
1949
+ * Setup caches needed for parsing. This is automatically called in parse_code() when appropriate.
1950
+ * This function makes stylesheet generators much faster as they do not need these caches.
1951
+ *
1952
+ * @since 1.0.8
1953
+ * @access private
1954
+ */
1955
+ function build_parse_cache() {
1956
+ // cache symbol regexp
1957
+ //As this is a costy operation, we avoid doing it for multiple groups ...
1958
+ //Instead we perform it for all symbols at once.
1959
+ //
1960
+ //For this to work, we need to reorganize the data arrays.
1961
+ if ($this->lexic_permissions['SYMBOLS'] && !empty($this->language_data['SYMBOLS'])) {
1962
+ $this->language_data['MULTIPLE_SYMBOL_GROUPS'] = count($this->language_data['STYLES']['SYMBOLS']) > 1;
1963
+
1964
+ $this->language_data['SYMBOL_DATA'] = array();
1965
+ $symbol_preg_multi = array(); // multi char symbols
1966
+ $symbol_preg_single = array(); // single char symbols
1967
+ foreach ($this->language_data['SYMBOLS'] as $key => $symbols) {
1968
+ if (is_array($symbols)) {
1969
+ foreach ($symbols as $sym) {
1970
+ $sym = $this->hsc($sym);
1971
+ if (!isset($this->language_data['SYMBOL_DATA'][$sym])) {
1972
+ $this->language_data['SYMBOL_DATA'][$sym] = $key;
1973
+ if (isset($sym[1])) { // multiple chars
1974
+ $symbol_preg_multi[] = preg_quote($sym, '/');
1975
+ } else { // single char
1976
+ if ($sym == '-') {
1977
+ // don't trigger range out of order error
1978
+ $symbol_preg_single[] = '\-';
1979
+ } else {
1980
+ $symbol_preg_single[] = preg_quote($sym, '/');
1981
+ }
1982
+ }
1983
+ }
1984
+ }
1985
+ } else {
1986
+ $symbols = $this->hsc($symbols);
1987
+ if (!isset($this->language_data['SYMBOL_DATA'][$symbols])) {
1988
+ $this->language_data['SYMBOL_DATA'][$symbols] = 0;
1989
+ if (isset($symbols[1])) { // multiple chars
1990
+ $symbol_preg_multi[] = preg_quote($symbols, '/');
1991
+ } else if ($symbols == '-') {
1992
+ // don't trigger range out of order error
1993
+ $symbol_preg_single[] = '\-';
1994
+ } else { // single char
1995
+ $symbol_preg_single[] = preg_quote($symbols, '/');
1996
+ }
1997
+ }
1998
+ }
1999
+ }
2000
+
2001
+ //Now we have an array with each possible symbol as the key and the style as the actual data.
2002
+ //This way we can set the correct style just the moment we highlight ...
2003
+ //
2004
+ //Now we need to rewrite our array to get a search string that
2005
+ $symbol_preg = array();
2006
+ if (!empty($symbol_preg_multi)) {
2007
+ rsort($symbol_preg_multi);
2008
+ $symbol_preg[] = implode('|', $symbol_preg_multi);
2009
+ }
2010
+ if (!empty($symbol_preg_single)) {
2011
+ rsort($symbol_preg_single);
2012
+ $symbol_preg[] = '[' . implode('', $symbol_preg_single) . ']';
2013
+ }
2014
+ $this->language_data['SYMBOL_SEARCH'] = implode("|", $symbol_preg);
2015
+ }
2016
+
2017
+ // cache optimized regexp for keyword matching
2018
+ // remove old cache
2019
+ $this->language_data['CACHED_KEYWORD_LISTS'] = array();
2020
+ foreach (array_keys($this->language_data['KEYWORDS']) as $key) {
2021
+ if (!isset($this->lexic_permissions['KEYWORDS'][$key]) ||
2022
+ $this->lexic_permissions['KEYWORDS'][$key]) {
2023
+ $this->optimize_keyword_group($key);
2024
+ }
2025
+ }
2026
+
2027
+ // brackets
2028
+ if ($this->lexic_permissions['BRACKETS']) {
2029
+ $this->language_data['CACHE_BRACKET_MATCH'] = array('[', ']', '(', ')', '{', '}');
2030
+ if (!$this->use_classes && isset($this->language_data['STYLES']['BRACKETS'][0])) {
2031
+ $this->language_data['CACHE_BRACKET_REPLACE'] = array(
2032
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#91;|>',
2033
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#93;|>',
2034
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#40;|>',
2035
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#41;|>',
2036
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#123;|>',
2037
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#125;|>',
2038
+ );
2039
+ }
2040
+ else {
2041
+ $this->language_data['CACHE_BRACKET_REPLACE'] = array(
2042
+ '<| class="br0">&#91;|>',
2043
+ '<| class="br0">&#93;|>',
2044
+ '<| class="br0">&#40;|>',
2045
+ '<| class="br0">&#41;|>',
2046
+ '<| class="br0">&#123;|>',
2047
+ '<| class="br0">&#125;|>',
2048
+ );
2049
+ }
2050
+ }
2051
+
2052
+ //Build the parse cache needed to highlight numbers appropriate
2053
+ if($this->lexic_permissions['NUMBERS']) {
2054
+ //Check if the style rearrangements have been processed ...
2055
+ //This also does some preprocessing to check which style groups are useable ...
2056
+ if(!isset($this->language_data['NUMBERS_CACHE'])) {
2057
+ $this->build_style_cache();
2058
+ }
2059
+
2060
+ //Number format specification
2061
+ //All this formats are matched case-insensitively!
2062
+ static $numbers_format = array(
2063
+ GESHI_NUMBER_INT_BASIC =>
2064
+ '(?:(?<![0-9a-z_\.%$@])|(?<=\.\.))(?<![\d\.]e[+\-])([1-9]\d*?|0)(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
2065
+ GESHI_NUMBER_INT_CSTYLE =>
2066
+ '(?<![0-9a-z_\.%])(?<![\d\.]e[+\-])([1-9]\d*?|0)l(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
2067
+ GESHI_NUMBER_BIN_SUFFIX =>
2068
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])[01]+?[bB](?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
2069
+ GESHI_NUMBER_BIN_PREFIX_PERCENT =>
2070
+ '(?<![0-9a-z_\.%])(?<![\d\.]e[+\-])%[01]+?(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
2071
+ GESHI_NUMBER_BIN_PREFIX_0B =>
2072
+ '(?<![0-9a-z_\.%])(?<![\d\.]e[+\-])0b[01]+?(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
2073
+ GESHI_NUMBER_OCT_PREFIX =>
2074
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])0[0-7]+?(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
2075
+ GESHI_NUMBER_OCT_PREFIX_0O =>
2076
+ '(?<![0-9a-z_\.%])(?<![\d\.]e[+\-])0o[0-7]+?(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
2077
+ GESHI_NUMBER_OCT_PREFIX_AT =>
2078
+ '(?<![0-9a-z_\.%])(?<![\d\.]e[+\-])\@[0-7]+?(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
2079
+ GESHI_NUMBER_OCT_SUFFIX =>
2080
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])[0-7]+?o(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
2081
+ GESHI_NUMBER_HEX_PREFIX =>
2082
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])0x[0-9a-fA-F]+?(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
2083
+ GESHI_NUMBER_HEX_PREFIX_DOLLAR =>
2084
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])\$[0-9a-fA-F]+?(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
2085
+ GESHI_NUMBER_HEX_SUFFIX =>
2086
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])\d[0-9a-fA-F]*?[hH](?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
2087
+ GESHI_NUMBER_FLT_NONSCI =>
2088
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])\d+?\.\d+?(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
2089
+ GESHI_NUMBER_FLT_NONSCI_F =>
2090
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])(?:\d+?(?:\.\d*?)?|\.\d+?)f(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
2091
+ GESHI_NUMBER_FLT_SCI_SHORT =>
2092
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])\.\d+?(?:e[+\-]?\d+?)?(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
2093
+ GESHI_NUMBER_FLT_SCI_ZERO =>
2094
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])(?:\d+?(?:\.\d*?)?|\.\d+?)(?:e[+\-]?\d+?)?(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)'
2095
+ );
2096
+
2097
+ //At this step we have an associative array with flag groups for a
2098
+ //specific style or an string denoting a regexp given its index.
2099
+ $this->language_data['NUMBERS_RXCACHE'] = array();
2100
+ foreach($this->language_data['NUMBERS_CACHE'] as $key => $rxdata) {
2101
+ if(is_string($rxdata)) {
2102
+ $regexp = $rxdata;
2103
+ } else {
2104
+ //This is a bitfield of number flags to highlight:
2105
+ //Build an array, implode them together and make this the actual RX
2106
+ $rxuse = array();
2107
+ for($i = 1; $i <= $rxdata; $i<<=1) {
2108
+ if($rxdata & $i) {
2109
+ $rxuse[] = $numbers_format[$i];
2110
+ }
2111
+ }
2112
+ $regexp = implode("|", $rxuse);
2113
+ }
2114
+
2115
+ $this->language_data['NUMBERS_RXCACHE'][$key] =
2116
+ "/(?<!<\|\/)(?<!<\|!REG3XP)(?<!<\|\/NUM!)(?<!\d\/>)($regexp)(?!(?:<DOT>|(?>[^\<]))+>)(?![^<]*>)(?!\|>)(?!\/>)/i"; //
2117
+ }
2118
+
2119
+ if(!isset($this->language_data['PARSER_CONTROL']['NUMBERS']['PRECHECK_RX'])) {
2120
+ $this->language_data['PARSER_CONTROL']['NUMBERS']['PRECHECK_RX'] = '#\d#';
2121
+ }
2122
+ }
2123
+
2124
+ $this->parse_cache_built = true;
2125
+ }
2126
+
2127
+ /**
2128
+ * Returns the code in $this->source, highlighted and surrounded by the
2129
+ * nessecary HTML.
2130
+ *
2131
+ * This should only be called ONCE, cos it's SLOW! If you want to highlight
2132
+ * the same source multiple times, you're better off doing a whole lot of
2133
+ * str_replaces to replace the &lt;span&gt;s
2134
+ *
2135
+ * @since 1.0.0
2136
+ */
2137
+ function parse_code () {
2138
+ // Start the timer
2139
+ $start_time = microtime();
2140
+
2141
+ // Replace all newlines to a common form.
2142
+ $code = str_replace("\r\n", "\n", $this->source);
2143
+ $code = str_replace("\r", "\n", $code);
2144
+
2145
+ // Firstly, if there is an error, we won't highlight
2146
+ if ($this->error) {
2147
+ //Escape the source for output
2148
+ $result = $this->hsc($this->source);
2149
+
2150
+ //This fix is related to SF#1923020, but has to be applied regardless of
2151
+ //actually highlighting symbols.
2152
+ $result = str_replace(array('<SEMI>', '<PIPE>'), array(';', '|'), $result);
2153
+
2154
+ // Timing is irrelevant
2155
+ $this->set_time($start_time, $start_time);
2156
+ $this->finalise($result);
2157
+ return $result;
2158
+ }
2159
+
2160
+ // make sure the parse cache is up2date
2161
+ if (!$this->parse_cache_built) {
2162
+ $this->build_parse_cache();
2163
+ }
2164
+
2165
+ // Initialise various stuff
2166
+ $length = strlen($code);
2167
+ $COMMENT_MATCHED = false;
2168
+ $stuff_to_parse = '';
2169
+ $endresult = '';
2170
+
2171
+ // "Important" selections are handled like multiline comments
2172
+ // @todo GET RID OF THIS SHIZ
2173
+ if ($this->enable_important_blocks) {
2174
+ $this->language_data['COMMENT_MULTI'][GESHI_START_IMPORTANT] = GESHI_END_IMPORTANT;
2175
+ }
2176
+
2177
+ if ($this->strict_mode) {
2178
+ // Break the source into bits. Each bit will be a portion of the code
2179
+ // within script delimiters - for example, HTML between < and >
2180
+ $k = 0;
2181
+ $parts = array();
2182
+ $matches = array();
2183
+ $next_match_pointer = null;
2184
+ // we use a copy to unset delimiters on demand (when they are not found)
2185
+ $delim_copy = $this->language_data['SCRIPT_DELIMITERS'];
2186
+ $i = 0;
2187
+ while ($i < $length) {
2188
+ $next_match_pos = $length + 1; // never true
2189
+ foreach ($delim_copy as $dk => $delimiters) {
2190
+ if(is_array($delimiters)) {
2191
+ foreach ($delimiters as $open => $close) {
2192
+ // make sure the cache is setup properly
2193
+ if (!isset($matches[$dk][$open])) {
2194
+ $matches[$dk][$open] = array(
2195
+ 'next_match' => -1,
2196
+ 'dk' => $dk,
2197
+
2198
+ 'open' => $open, // needed for grouping of adjacent code blocks (see below)
2199
+ 'open_strlen' => strlen($open),
2200
+
2201
+ 'close' => $close,
2202
+ 'close_strlen' => strlen($close),
2203
+ );
2204
+ }
2205
+ // Get the next little bit for this opening string
2206
+ if ($matches[$dk][$open]['next_match'] < $i) {
2207
+ // only find the next pos if it was not already cached
2208
+ $open_pos = strpos($code, $open, $i);
2209
+ if ($open_pos === false) {
2210
+ // no match for this delimiter ever
2211
+ unset($delim_copy[$dk][$open]);
2212
+ continue;
2213
+ }
2214
+ $matches[$dk][$open]['next_match'] = $open_pos;
2215
+ }
2216
+ if ($matches[$dk][$open]['next_match'] < $next_match_pos) {
2217
+ //So we got a new match, update the close_pos
2218
+ $matches[$dk][$open]['close_pos'] =
2219
+ strpos($code, $close, $matches[$dk][$open]['next_match']+1);
2220
+
2221
+ $next_match_pointer =& $matches[$dk][$open];
2222
+ $next_match_pos = $matches[$dk][$open]['next_match'];
2223
+ }
2224
+ }
2225
+ } else {
2226
+ //So we should match an RegExp as Strict Block ...
2227
+ /**
2228
+ * The value in $delimiters is expected to be an RegExp
2229
+ * containing exactly 2 matching groups:
2230
+ * - Group 1 is the opener
2231
+ * - Group 2 is the closer
2232
+ */
2233
+ if(!GESHI_PHP_PRE_433 && //Needs proper rewrite to work with PHP >=4.3.0; 4.3.3 is guaranteed to work.
2234
+ preg_match($delimiters, $code, $matches_rx, PREG_OFFSET_CAPTURE, $i)) {
2235
+ //We got a match ...
2236
+ if(isset($matches_rx['start']) && isset($matches_rx['end']))
2237
+ {
2238
+ $matches[$dk] = array(
2239
+ 'next_match' => $matches_rx['start'][1],
2240
+ 'dk' => $dk,
2241
+
2242
+ 'close_strlen' => strlen($matches_rx['end'][0]),
2243
+ 'close_pos' => $matches_rx['end'][1],
2244
+ );
2245
+ } else {
2246
+ $matches[$dk] = array(
2247
+ 'next_match' => $matches_rx[1][1],
2248
+ 'dk' => $dk,
2249
+
2250
+ 'close_strlen' => strlen($matches_rx[2][0]),
2251
+ 'close_pos' => $matches_rx[2][1],
2252
+ );
2253
+ }
2254
+ } else {
2255
+ // no match for this delimiter ever
2256
+ unset($delim_copy[$dk]);
2257
+ continue;
2258
+ }
2259
+
2260
+ if ($matches[$dk]['next_match'] <= $next_match_pos) {
2261
+ $next_match_pointer =& $matches[$dk];
2262
+ $next_match_pos = $matches[$dk]['next_match'];
2263
+ }
2264
+ }
2265
+ }
2266
+
2267
+ // non-highlightable text
2268
+ $parts[$k] = array(
2269
+ 1 => substr($code, $i, $next_match_pos - $i)
2270
+ );
2271
+ ++$k;
2272
+
2273
+ if ($next_match_pos > $length) {
2274
+ // out of bounds means no next match was found
2275
+ break;
2276
+ }
2277
+
2278
+ // highlightable code
2279
+ $parts[$k][0] = $next_match_pointer['dk'];
2280
+
2281
+ //Only combine for non-rx script blocks
2282
+ if(is_array($delim_copy[$next_match_pointer['dk']])) {
2283
+ // group adjacent script blocks, e.g. <foobar><asdf> should be one block, not three!
2284
+ $i = $next_match_pos + $next_match_pointer['open_strlen'];
2285
+ while (true) {
2286
+ $close_pos = strpos($code, $next_match_pointer['close'], $i);
2287
+ if ($close_pos == false) {
2288
+ break;
2289
+ }
2290
+ $i = $close_pos + $next_match_pointer['close_strlen'];
2291
+ if ($i == $length) {
2292
+ break;
2293
+ }
2294
+ if ($code[$i] == $next_match_pointer['open'][0] && ($next_match_pointer['open_strlen'] == 1 ||
2295
+ substr($code, $i, $next_match_pointer['open_strlen']) == $next_match_pointer['open'])) {
2296
+ // merge adjacent but make sure we don't merge things like <tag><!-- comment -->
2297
+ foreach ($matches as $submatches) {
2298
+ foreach ($submatches as $match) {
2299
+ if ($match['next_match'] == $i) {
2300
+ // a different block already matches here!
2301
+ break 3;
2302
+ }
2303
+ }
2304
+ }
2305
+ } else {
2306
+ break;
2307
+ }
2308
+ }
2309
+ } else {
2310
+ $close_pos = $next_match_pointer['close_pos'] + $next_match_pointer['close_strlen'];
2311
+ $i = $close_pos;
2312
+ }
2313
+
2314
+ if ($close_pos === false) {
2315
+ // no closing delimiter found!
2316
+ $parts[$k][1] = substr($code, $next_match_pos);
2317
+ ++$k;
2318
+ break;
2319
+ } else {
2320
+ $parts[$k][1] = substr($code, $next_match_pos, $i - $next_match_pos);
2321
+ ++$k;
2322
+ }
2323
+ }
2324
+ unset($delim_copy, $next_match_pointer, $next_match_pos, $matches);
2325
+ $num_parts = $k;
2326
+
2327
+ if ($num_parts == 1 && $this->strict_mode == GESHI_MAYBE) {
2328
+ // when we have only one part, we don't have anything to highlight at all.
2329
+ // if we have a "maybe" strict language, this should be handled as highlightable code
2330
+ $parts = array(
2331
+ 0 => array(
2332
+ 0 => '',
2333
+ 1 => ''
2334
+ ),
2335
+ 1 => array(
2336
+ 0 => null,
2337
+ 1 => $parts[0][1]
2338
+ )
2339
+ );
2340
+ $num_parts = 2;
2341
+ }
2342
+
2343
+ } else {
2344
+ // Not strict mode - simply dump the source into
2345
+ // the array at index 1 (the first highlightable block)
2346
+ $parts = array(
2347
+ 0 => array(
2348
+ 0 => '',
2349
+ 1 => ''
2350
+ ),
2351
+ 1 => array(
2352
+ 0 => null,
2353
+ 1 => $code
2354
+ )
2355
+ );
2356
+ $num_parts = 2;
2357
+ }
2358
+
2359
+ //Unset variables we won't need any longer
2360
+ unset($code);
2361
+
2362
+ //Preload some repeatedly used values regarding hardquotes ...
2363
+ $hq = isset($this->language_data['HARDQUOTE']) ? $this->language_data['HARDQUOTE'][0] : false;
2364
+ $hq_strlen = strlen($hq);
2365
+
2366
+ //Preload if line numbers are to be generated afterwards
2367
+ //Added a check if line breaks should be forced even without line numbers, fixes SF#1727398
2368
+ $check_linenumbers = $this->line_numbers != GESHI_NO_LINE_NUMBERS ||
2369
+ !empty($this->highlight_extra_lines) || !$this->allow_multiline_span;
2370
+
2371
+ //preload the escape char for faster checking ...
2372
+ $escaped_escape_char = $this->hsc($this->language_data['ESCAPE_CHAR']);
2373
+
2374
+ // this is used for single-line comments
2375
+ $sc_disallowed_before = "";
2376
+ $sc_disallowed_after = "";
2377
+
2378
+ if (isset($this->language_data['PARSER_CONTROL'])) {
2379
+ if (isset($this->language_data['PARSER_CONTROL']['COMMENTS'])) {
2380
+ if (isset($this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_BEFORE'])) {
2381
+ $sc_disallowed_before = $this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_BEFORE'];
2382
+ }
2383
+ if (isset($this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_AFTER'])) {
2384
+ $sc_disallowed_after = $this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_AFTER'];
2385
+ }
2386
+ }
2387
+ }
2388
+
2389
+ //Fix for SF#1932083: Multichar Quotemarks unsupported
2390
+ $is_string_starter = array();
2391
+ if ($this->lexic_permissions['STRINGS']) {
2392
+ foreach ($this->language_data['QUOTEMARKS'] as $quotemark) {
2393
+ if (!isset($is_string_starter[$quotemark[0]])) {
2394
+ $is_string_starter[$quotemark[0]] = (string)$quotemark;
2395
+ } else if (is_string($is_string_starter[$quotemark[0]])) {
2396
+ $is_string_starter[$quotemark[0]] = array(
2397
+ $is_string_starter[$quotemark[0]],
2398
+ $quotemark);
2399
+ } else {
2400
+ $is_string_starter[$quotemark[0]][] = $quotemark;
2401
+ }
2402
+ }
2403
+ }
2404
+
2405
+ // Now we go through each part. We know that even-indexed parts are
2406
+ // code that shouldn't be highlighted, and odd-indexed parts should
2407
+ // be highlighted
2408
+ for ($key = 0; $key < $num_parts; ++$key) {
2409
+ $STRICTATTRS = '';
2410
+
2411
+ // If this block should be highlighted...
2412
+ if (!($key & 1)) {
2413
+ // Else not a block to highlight
2414
+ $endresult .= $this->hsc($parts[$key][1]);
2415
+ unset($parts[$key]);
2416
+ continue;
2417
+ }
2418
+
2419
+ $result = '';
2420
+ $part = $parts[$key][1];
2421
+
2422
+ $highlight_part = true;
2423
+ if ($this->strict_mode && !is_null($parts[$key][0])) {
2424
+ // get the class key for this block of code
2425
+ $script_key = $parts[$key][0];
2426
+ $highlight_part = $this->language_data['HIGHLIGHT_STRICT_BLOCK'][$script_key];
2427
+ if ($this->language_data['STYLES']['SCRIPT'][$script_key] != '' &&
2428
+ $this->lexic_permissions['SCRIPT']) {
2429
+ // Add a span element around the source to
2430
+ // highlight the overall source block
2431
+ if (!$this->use_classes &&
2432
+ $this->language_data['STYLES']['SCRIPT'][$script_key] != '') {
2433
+ $attributes = ' style="' . $this->language_data['STYLES']['SCRIPT'][$script_key] . '"';
2434
+ } else {
2435
+ $attributes = ' class="sc' . $script_key . '"';
2436
+ }
2437
+ $result .= "<span$attributes>";
2438
+ $STRICTATTRS = $attributes;
2439
+ }
2440
+ }
2441
+
2442
+ if ($highlight_part) {
2443
+ // Now, highlight the code in this block. This code
2444
+ // is really the engine of GeSHi (along with the method
2445
+ // parse_non_string_part).
2446
+
2447
+ // cache comment regexps incrementally
2448
+ $next_comment_regexp_key = '';
2449
+ $next_comment_regexp_pos = -1;
2450
+ $next_comment_multi_pos = -1;
2451
+ $next_comment_single_pos = -1;
2452
+ $comment_regexp_cache_per_key = array();
2453
+ $comment_multi_cache_per_key = array();
2454
+ $comment_single_cache_per_key = array();
2455
+ $next_open_comment_multi = '';
2456
+ $next_comment_single_key = '';
2457
+ $escape_regexp_cache_per_key = array();
2458
+ $next_escape_regexp_key = '';
2459
+ $next_escape_regexp_pos = -1;
2460
+
2461
+ $length = strlen($part);
2462
+ for ($i = 0; $i < $length; ++$i) {
2463
+ // Get the next char
2464
+ $char = $part[$i];
2465
+ $char_len = 1;
2466
+
2467
+ // update regexp comment cache if needed
2468
+ if (isset($this->language_data['COMMENT_REGEXP']) && $next_comment_regexp_pos < $i) {
2469
+ $next_comment_regexp_pos = $length;
2470
+ foreach ($this->language_data['COMMENT_REGEXP'] as $comment_key => $regexp) {
2471
+ $match_i = false;
2472
+ if (isset($comment_regexp_cache_per_key[$comment_key]) &&
2473
+ ($comment_regexp_cache_per_key[$comment_key]['pos'] >= $i ||
2474
+ $comment_regexp_cache_per_key[$comment_key]['pos'] === false)) {
2475
+ // we have already matched something
2476
+ if ($comment_regexp_cache_per_key[$comment_key]['pos'] === false) {
2477
+ // this comment is never matched
2478
+ continue;
2479
+ }
2480
+ $match_i = $comment_regexp_cache_per_key[$comment_key]['pos'];
2481
+ } else if (
2482
+ //This is to allow use of the offset parameter in preg_match and stay as compatible with older PHP versions as possible
2483
+ (GESHI_PHP_PRE_433 && preg_match($regexp, substr($part, $i), $match, PREG_OFFSET_CAPTURE)) ||
2484
+ (!GESHI_PHP_PRE_433 && preg_match($regexp, $part, $match, PREG_OFFSET_CAPTURE, $i))
2485
+ ) {
2486
+ $match_i = $match[0][1];
2487
+ if (GESHI_PHP_PRE_433) {
2488
+ $match_i += $i;
2489
+ }
2490
+
2491
+ $comment_regexp_cache_per_key[$comment_key] = array(
2492
+ 'key' => $comment_key,
2493
+ 'length' => strlen($match[0][0]),
2494
+ 'pos' => $match_i
2495
+ );
2496
+ } else {
2497
+ $comment_regexp_cache_per_key[$comment_key]['pos'] = false;
2498
+ continue;
2499
+ }
2500
+
2501
+ if ($match_i !== false && $match_i < $next_comment_regexp_pos) {
2502
+ $next_comment_regexp_pos = $match_i;
2503
+ $next_comment_regexp_key = $comment_key;
2504
+ if ($match_i === $i) {
2505
+ break;
2506
+ }
2507
+ }
2508
+ }
2509
+ }
2510
+
2511
+ $string_started = false;
2512
+
2513
+ if (isset($is_string_starter[$char])) {
2514
+ // Possibly the start of a new string ...
2515
+
2516
+ //Check which starter it was ...
2517
+ //Fix for SF#1932083: Multichar Quotemarks unsupported
2518
+ if (is_array($is_string_starter[$char])) {
2519
+ $char_new = '';
2520
+ foreach ($is_string_starter[$char] as $testchar) {
2521
+ if ($testchar === substr($part, $i, strlen($testchar)) &&
2522
+ strlen($testchar) > strlen($char_new)) {
2523
+ $char_new = $testchar;
2524
+ $string_started = true;
2525
+ }
2526
+ }
2527
+ if ($string_started) {
2528
+ $char = $char_new;
2529
+ }
2530
+ } else {
2531
+ $testchar = $is_string_starter[$char];
2532
+ if ($testchar === substr($part, $i, strlen($testchar))) {
2533
+ $char = $testchar;
2534
+ $string_started = true;
2535
+ }
2536
+ }
2537
+ $char_len = strlen($char);
2538
+ }
2539
+
2540
+ if ($string_started && ($i != $next_comment_regexp_pos)) {
2541
+ // Hand out the correct style information for this string
2542
+ $string_key = array_search($char, $this->language_data['QUOTEMARKS']);
2543
+ if (!isset($this->language_data['STYLES']['STRINGS'][$string_key]) ||
2544
+ !isset($this->language_data['STYLES']['ESCAPE_CHAR'][$string_key])) {
2545
+ $string_key = 0;
2546
+ }
2547
+
2548
+ // parse the stuff before this
2549
+ $result .= $this->parse_non_string_part($stuff_to_parse);
2550
+ $stuff_to_parse = '';
2551
+
2552
+ if (!$this->use_classes) {
2553
+ $string_attributes = ' style="' . $this->language_data['STYLES']['STRINGS'][$string_key] . '"';
2554
+ } else {
2555
+ $string_attributes = ' class="st'.$string_key.'"';
2556
+ }
2557
+
2558
+ // now handle the string
2559
+ $string = "<span$string_attributes>" . GeSHi::hsc($char);
2560
+ $start = $i + $char_len;
2561
+ $string_open = true;
2562
+
2563
+ if(empty($this->language_data['ESCAPE_REGEXP'])) {
2564
+ $next_escape_regexp_pos = $length;
2565
+ }
2566
+
2567
+ do {
2568
+ //Get the regular ending pos ...
2569
+ $close_pos = strpos($part, $char, $start);
2570
+ if(false === $close_pos) {
2571
+ $close_pos = $length;
2572
+ }
2573
+
2574
+ if($this->lexic_permissions['ESCAPE_CHAR']) {
2575
+ // update escape regexp cache if needed
2576
+ if (isset($this->language_data['ESCAPE_REGEXP']) && $next_escape_regexp_pos < $start) {
2577
+ $next_escape_regexp_pos = $length;
2578
+ foreach ($this->language_data['ESCAPE_REGEXP'] as $escape_key => $regexp) {
2579
+ $match_i = false;
2580
+ if (isset($escape_regexp_cache_per_key[$escape_key]) &&
2581
+ ($escape_regexp_cache_per_key[$escape_key]['pos'] >= $start ||
2582
+ $escape_regexp_cache_per_key[$escape_key]['pos'] === false)) {
2583
+ // we have already matched something
2584
+ if ($escape_regexp_cache_per_key[$escape_key]['pos'] === false) {
2585
+ // this comment is never matched
2586
+ continue;
2587
+ }
2588
+ $match_i = $escape_regexp_cache_per_key[$escape_key]['pos'];
2589
+ } else if (
2590
+ //This is to allow use of the offset parameter in preg_match and stay as compatible with older PHP versions as possible
2591
+ (GESHI_PHP_PRE_433 && preg_match($regexp, substr($part, $start), $match, PREG_OFFSET_CAPTURE)) ||
2592
+ (!GESHI_PHP_PRE_433 && preg_match($regexp, $part, $match, PREG_OFFSET_CAPTURE, $start))
2593
+ ) {
2594
+ $match_i = $match[0][1];
2595
+ if (GESHI_PHP_PRE_433) {
2596
+ $match_i += $start;
2597
+ }
2598
+
2599
+ $escape_regexp_cache_per_key[$escape_key] = array(
2600
+ 'key' => $escape_key,
2601
+ 'length' => strlen($match[0][0]),
2602
+ 'pos' => $match_i
2603
+ );
2604
+ } else {
2605
+ $escape_regexp_cache_per_key[$escape_key]['pos'] = false;
2606
+ continue;
2607
+ }
2608
+
2609
+ if ($match_i !== false && $match_i < $next_escape_regexp_pos) {
2610
+ $next_escape_regexp_pos = $match_i;
2611
+ $next_escape_regexp_key = $escape_key;
2612
+ if ($match_i === $start) {
2613
+ break;
2614
+ }
2615
+ }
2616
+ }
2617
+ }
2618
+
2619
+ //Find the next simple escape position
2620
+ if('' != $this->language_data['ESCAPE_CHAR']) {
2621
+ $simple_escape = strpos($part, $this->language_data['ESCAPE_CHAR'], $start);
2622
+ if(false === $simple_escape) {
2623
+ $simple_escape = $length;
2624
+ }
2625
+ } else {
2626
+ $simple_escape = $length;
2627
+ }
2628
+ } else {
2629
+ $next_escape_regexp_pos = $length;
2630
+ $simple_escape = $length;
2631
+ }
2632
+
2633
+ if($simple_escape < $next_escape_regexp_pos &&
2634
+ $simple_escape < $length &&
2635
+ $simple_escape < $close_pos) {
2636
+ //The nexxt escape sequence is a simple one ...
2637
+ $es_pos = $simple_escape;
2638
+
2639
+ //Add the stuff not in the string yet ...
2640
+ $string .= $this->hsc(substr($part, $start, $es_pos - $start));
2641
+
2642
+ //Get the style for this escaped char ...
2643
+ if (!$this->use_classes) {
2644
+ $escape_char_attributes = ' style="' . $this->language_data['STYLES']['ESCAPE_CHAR'][0] . '"';
2645
+ } else {
2646
+ $escape_char_attributes = ' class="es0"';
2647
+ }
2648
+
2649
+ //Add the style for the escape char ...
2650
+ $string .= "<span$escape_char_attributes>" .
2651
+ GeSHi::hsc($this->language_data['ESCAPE_CHAR']);
2652
+
2653
+ //Get the byte AFTER the ESCAPE_CHAR we just found
2654
+ $es_char = $part[$es_pos + 1];
2655
+ if ($es_char == "\n") {
2656
+ // don't put a newline around newlines
2657
+ $string .= "</span>\n";
2658
+ $start = $es_pos + 2;
2659
+ } else if (ord($es_char) >= 128) {
2660
+ //This is an non-ASCII char (UTF8 or single byte)
2661
+ //This code tries to work around SF#2037598 ...
2662
+ if(function_exists('mb_substr')) {
2663
+ $es_char_m = mb_substr(substr($part, $es_pos+1, 16), 0, 1, $this->encoding);
2664
+ $string .= $es_char_m . '</span>';
2665
+ } else if (!GESHI_PHP_PRE_433 && 'utf-8' == $this->encoding) {
2666
+ if(preg_match("/[\xC2-\xDF][\x80-\xBF]".
2667
+ "|\xE0[\xA0-\xBF][\x80-\xBF]".
2668
+ "|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}".
2669
+ "|\xED[\x80-\x9F][\x80-\xBF]".
2670
+ "|\xF0[\x90-\xBF][\x80-\xBF]{2}".
2671
+ "|[\xF1-\xF3][\x80-\xBF]{3}".
2672
+ "|\xF4[\x80-\x8F][\x80-\xBF]{2}/s",
2673
+ $part, $es_char_m, null, $es_pos + 1)) {
2674
+ $es_char_m = $es_char_m[0];
2675
+ } else {
2676
+ $es_char_m = $es_char;
2677
+ }
2678
+ $string .= $this->hsc($es_char_m) . '</span>';
2679
+ } else {
2680
+ $es_char_m = $this->hsc($es_char);
2681
+ }
2682
+ $start = $es_pos + strlen($es_char_m) + 1;
2683
+ } else {
2684
+ $string .= $this->hsc($es_char) . '</span>';
2685
+ $start = $es_pos + 2;
2686
+ }
2687
+ } else if ($next_escape_regexp_pos < $length &&
2688
+ $next_escape_regexp_pos < $close_pos) {
2689
+ $es_pos = $next_escape_regexp_pos;
2690
+ //Add the stuff not in the string yet ...
2691
+ $string .= $this->hsc(substr($part, $start, $es_pos - $start));
2692
+
2693
+ //Get the key and length of this match ...
2694
+ $escape = $escape_regexp_cache_per_key[$next_escape_regexp_key];
2695
+ $escape_str = substr($part, $es_pos, $escape['length']);
2696
+ $escape_key = $escape['key'];
2697
+
2698
+ //Get the style for this escaped char ...
2699
+ if (!$this->use_classes) {
2700
+ $escape_char_attributes = ' style="' . $this->language_data['STYLES']['ESCAPE_CHAR'][$escape_key] . '"';
2701
+ } else {
2702
+ $escape_char_attributes = ' class="es' . $escape_key . '"';
2703
+ }
2704
+
2705
+ //Add the style for the escape char ...
2706
+ $string .= "<span$escape_char_attributes>" .
2707
+ $this->hsc($escape_str) . '</span>';
2708
+
2709
+ $start = $es_pos + $escape['length'];
2710
+ } else {
2711
+ //Copy the remainder of the string ...
2712
+ $string .= $this->hsc(substr($part, $start, $close_pos - $start + $char_len)) . '</span>';
2713
+ $start = $close_pos + $char_len;
2714
+ $string_open = false;
2715
+ }
2716
+ } while($string_open);
2717
+
2718
+ if ($check_linenumbers) {
2719
+ // Are line numbers used? If, we should end the string before
2720
+ // the newline and begin it again (so when <li>s are put in the source
2721
+ // remains XHTML compliant)
2722
+ // note to self: This opens up possibility of config files specifying
2723
+ // that languages can/cannot have multiline strings???
2724
+ $string = str_replace("\n", "</span>\n<span$string_attributes>", $string);
2725
+ }
2726
+
2727
+ $result .= $string;
2728
+ $string = '';
2729
+ $i = $start - 1;
2730
+ continue;
2731
+ } else if ($this->lexic_permissions['STRINGS'] && $hq && $hq[0] == $char &&
2732
+ substr($part, $i, $hq_strlen) == $hq && ($i != $next_comment_regexp_pos)) {
2733
+ // The start of a hard quoted string
2734
+ if (!$this->use_classes) {
2735
+ $string_attributes = ' style="' . $this->language_data['STYLES']['STRINGS']['HARD'] . '"';
2736
+ $escape_char_attributes = ' style="' . $this->language_data['STYLES']['ESCAPE_CHAR']['HARD'] . '"';
2737
+ } else {
2738
+ $string_attributes = ' class="st_h"';
2739
+ $escape_char_attributes = ' class="es_h"';
2740
+ }
2741
+ // parse the stuff before this
2742
+ $result .= $this->parse_non_string_part($stuff_to_parse);
2743
+ $stuff_to_parse = '';
2744
+
2745
+ // now handle the string
2746
+ $string = '';
2747
+
2748
+ // look for closing quote
2749
+ $start = $i + $hq_strlen;
2750
+ while ($close_pos = strpos($part, $this->language_data['HARDQUOTE'][1], $start)) {
2751
+ $start = $close_pos + 1;
2752
+ if ($this->lexic_permissions['ESCAPE_CHAR'] && $part[$close_pos - 1] == $this->language_data['HARDCHAR'] &&
2753
+ (($i + $hq_strlen) != ($close_pos))) { //Support empty string for HQ escapes if Starter = Escape
2754
+ // make sure this quote is not escaped
2755
+ foreach ($this->language_data['HARDESCAPE'] as $hardescape) {
2756
+ if (substr($part, $close_pos - 1, strlen($hardescape)) == $hardescape) {
2757
+ // check wether this quote is escaped or if it is something like '\\'
2758
+ $escape_char_pos = $close_pos - 1;
2759
+ while ($escape_char_pos > 0
2760
+ && $part[$escape_char_pos - 1] == $this->language_data['HARDCHAR']) {
2761
+ --$escape_char_pos;
2762
+ }
2763
+ if (($close_pos - $escape_char_pos) & 1) {
2764
+ // uneven number of escape chars => this quote is escaped
2765
+ continue 2;
2766
+ }
2767
+ }
2768
+ }
2769
+ }
2770
+
2771
+ // found closing quote
2772
+ break;
2773
+ }
2774
+
2775
+ //Found the closing delimiter?
2776
+ if (!$close_pos) {
2777
+ // span till the end of this $part when no closing delimiter is found
2778
+ $close_pos = $length;
2779
+ }
2780
+
2781
+ //Get the actual string
2782
+ $string = substr($part, $i, $close_pos - $i + 1);
2783
+ $i = $close_pos;
2784
+
2785
+ // handle escape chars and encode html chars
2786
+ // (special because when we have escape chars within our string they may not be escaped)
2787
+ if ($this->lexic_permissions['ESCAPE_CHAR'] && $this->language_data['ESCAPE_CHAR']) {
2788
+ $start = 0;
2789
+ $new_string = '';
2790
+ while ($es_pos = strpos($string, $this->language_data['ESCAPE_CHAR'], $start)) {
2791
+ // hmtl escape stuff before
2792
+ $new_string .= $this->hsc(substr($string, $start, $es_pos - $start));
2793
+ // check if this is a hard escape
2794
+ foreach ($this->language_data['HARDESCAPE'] as $hardescape) {
2795
+ if (substr($string, $es_pos, strlen($hardescape)) == $hardescape) {
2796
+ // indeed, this is a hardescape
2797
+ $new_string .= "<span$escape_char_attributes>" .
2798
+ $this->hsc($hardescape) . '</span>';
2799
+ $start = $es_pos + strlen($hardescape);
2800
+ continue 2;
2801
+ }
2802
+ }
2803
+ // not a hard escape, but a normal escape
2804
+ // they come in pairs of two
2805
+ $c = 0;
2806
+ while (isset($string[$es_pos + $c]) && isset($string[$es_pos + $c + 1])
2807
+ && $string[$es_pos + $c] == $this->language_data['ESCAPE_CHAR']
2808
+ && $string[$es_pos + $c + 1] == $this->language_data['ESCAPE_CHAR']) {
2809
+ $c += 2;
2810
+ }
2811
+ if ($c) {
2812
+ $new_string .= "<span$escape_char_attributes>" .
2813
+ str_repeat($escaped_escape_char, $c) .
2814
+ '</span>';
2815
+ $start = $es_pos + $c;
2816
+ } else {
2817
+ // this is just a single lonely escape char...
2818
+ $new_string .= $escaped_escape_char;
2819
+ $start = $es_pos + 1;
2820
+ }
2821
+ }
2822
+ $string = $new_string . $this->hsc(substr($string, $start));
2823
+ } else {
2824
+ $string = $this->hsc($string);
2825
+ }
2826
+
2827
+ if ($check_linenumbers) {
2828
+ // Are line numbers used? If, we should end the string before
2829
+ // the newline and begin it again (so when <li>s are put in the source
2830
+ // remains XHTML compliant)
2831
+ // note to self: This opens up possibility of config files specifying
2832
+ // that languages can/cannot have multiline strings???
2833
+ $string = str_replace("\n", "</span>\n<span$string_attributes>", $string);
2834
+ }
2835
+
2836
+ $result .= "<span$string_attributes>" . $string . '</span>';
2837
+ $string = '';
2838
+ continue;
2839
+ } else {
2840
+ //Have a look for regexp comments
2841
+ if ($i == $next_comment_regexp_pos) {
2842
+ $COMMENT_MATCHED = true;
2843
+ $comment = $comment_regexp_cache_per_key[$next_comment_regexp_key];
2844
+ $test_str = $this->hsc(substr($part, $i, $comment['length']));
2845
+
2846
+ //@todo If remove important do remove here
2847
+ if ($this->lexic_permissions['COMMENTS']['MULTI']) {
2848
+ if (!$this->use_classes) {
2849
+ $attributes = ' style="' . $this->language_data['STYLES']['COMMENTS'][$comment['key']] . '"';
2850
+ } else {
2851
+ $attributes = ' class="co' . $comment['key'] . '"';
2852
+ }
2853
+
2854
+ $test_str = "<span$attributes>" . $test_str . "</span>";
2855
+
2856
+ // Short-cut through all the multiline code
2857
+ if ($check_linenumbers) {
2858
+ // strreplace to put close span and open span around multiline newlines
2859
+ $test_str = str_replace(
2860
+ "\n", "</span>\n<span$attributes>",
2861
+ str_replace("\n ", "\n&nbsp;", $test_str)
2862
+ );
2863
+ }
2864
+ }
2865
+
2866
+ $i += $comment['length'] - 1;
2867
+
2868
+ // parse the rest
2869
+ $result .= $this->parse_non_string_part($stuff_to_parse);
2870
+ $stuff_to_parse = '';
2871
+ }
2872
+
2873
+ // If we haven't matched a regexp comment, try multi-line comments
2874
+ if (!$COMMENT_MATCHED) {
2875
+ // Is this a multiline comment?
2876
+ if (!empty($this->language_data['COMMENT_MULTI']) && $next_comment_multi_pos < $i) {
2877
+ $next_comment_multi_pos = $length;
2878
+ foreach ($this->language_data['COMMENT_MULTI'] as $open => $close) {
2879
+ $match_i = false;
2880
+ if (isset($comment_multi_cache_per_key[$open]) &&
2881
+ ($comment_multi_cache_per_key[$open] >= $i ||
2882
+ $comment_multi_cache_per_key[$open] === false)) {
2883
+ // we have already matched something
2884
+ if ($comment_multi_cache_per_key[$open] === false) {
2885
+ // this comment is never matched
2886
+ continue;
2887
+ }
2888
+ $match_i = $comment_multi_cache_per_key[$open];
2889
+ } else if (($match_i = stripos($part, $open, $i)) !== false) {
2890
+ $comment_multi_cache_per_key[$open] = $match_i;
2891
+ } else {
2892
+ $comment_multi_cache_per_key[$open] = false;
2893
+ continue;
2894
+ }
2895
+ if ($match_i !== false && $match_i < $next_comment_multi_pos) {
2896
+ $next_comment_multi_pos = $match_i;
2897
+ $next_open_comment_multi = $open;
2898
+ if ($match_i === $i) {
2899
+ break;
2900
+ }
2901
+ }
2902
+ }
2903
+ }
2904
+ if ($i == $next_comment_multi_pos) {
2905
+ $open = $next_open_comment_multi;
2906
+ $close = $this->language_data['COMMENT_MULTI'][$open];
2907
+ $open_strlen = strlen($open);
2908
+ $close_strlen = strlen($close);
2909
+ $COMMENT_MATCHED = true;
2910
+ $test_str_match = $open;
2911
+ //@todo If remove important do remove here
2912
+ if ($this->lexic_permissions['COMMENTS']['MULTI'] ||
2913
+ $open == GESHI_START_IMPORTANT) {
2914
+ if ($open != GESHI_START_IMPORTANT) {
2915
+ if (!$this->use_classes) {
2916
+ $attributes = ' style="' . $this->language_data['STYLES']['COMMENTS']['MULTI'] . '"';
2917
+ } else {
2918
+ $attributes = ' class="coMULTI"';
2919
+ }
2920
+ $test_str = "<span$attributes>" . $this->hsc($open);
2921
+ } else {
2922
+ if (!$this->use_classes) {
2923
+ $attributes = ' style="' . $this->important_styles . '"';
2924
+ } else {
2925
+ $attributes = ' class="imp"';
2926
+ }
2927
+
2928
+ // We don't include the start of the comment if it's an
2929
+ // "important" part
2930
+ $test_str = "<span$attributes>";
2931
+ }
2932
+ } else {
2933
+ $test_str = $this->hsc($open);
2934
+ }
2935
+
2936
+ $close_pos = strpos( $part, $close, $i + $open_strlen );
2937
+
2938
+ if ($close_pos === false) {
2939
+ $close_pos = $length;
2940
+ }
2941
+
2942
+ // Short-cut through all the multiline code
2943
+ $rest_of_comment = $this->hsc(substr($part, $i + $open_strlen, $close_pos - $i - $open_strlen + $close_strlen));
2944
+ if (($this->lexic_permissions['COMMENTS']['MULTI'] ||
2945
+ $test_str_match == GESHI_START_IMPORTANT) &&
2946
+ $check_linenumbers) {
2947
+
2948
+ // strreplace to put close span and open span around multiline newlines
2949
+ $test_str .= str_replace(
2950
+ "\n", "</span>\n<span$attributes>",
2951
+ str_replace("\n ", "\n&nbsp;", $rest_of_comment)
2952
+ );
2953
+ } else {
2954
+ $test_str .= $rest_of_comment;
2955
+ }
2956
+
2957
+ if ($this->lexic_permissions['COMMENTS']['MULTI'] ||
2958
+ $test_str_match == GESHI_START_IMPORTANT) {
2959
+ $test_str .= '</span>';
2960
+ }
2961
+
2962
+ $i = $close_pos + $close_strlen - 1;
2963
+
2964
+ // parse the rest
2965
+ $result .= $this->parse_non_string_part($stuff_to_parse);
2966
+ $stuff_to_parse = '';
2967
+ }
2968
+ }
2969
+
2970
+ // If we haven't matched a multiline comment, try single-line comments
2971
+ if (!$COMMENT_MATCHED) {
2972
+ // cache potential single line comment occurances
2973
+ if (!empty($this->language_data['COMMENT_SINGLE']) && $next_comment_single_pos < $i) {
2974
+ $next_comment_single_pos = $length;
2975
+ foreach ($this->language_data['COMMENT_SINGLE'] as $comment_key => $comment_mark) {
2976
+ $match_i = false;
2977
+ if (isset($comment_single_cache_per_key[$comment_key]) &&
2978
+ ($comment_single_cache_per_key[$comment_key] >= $i ||
2979
+ $comment_single_cache_per_key[$comment_key] === false)) {
2980
+ // we have already matched something
2981
+ if ($comment_single_cache_per_key[$comment_key] === false) {
2982
+ // this comment is never matched
2983
+ continue;
2984
+ }
2985
+ $match_i = $comment_single_cache_per_key[$comment_key];
2986
+ } else if (
2987
+ // case sensitive comments
2988
+ ($this->language_data['CASE_SENSITIVE'][GESHI_COMMENTS] &&
2989
+ ($match_i = stripos($part, $comment_mark, $i)) !== false) ||
2990
+ // non case sensitive
2991
+ (!$this->language_data['CASE_SENSITIVE'][GESHI_COMMENTS] &&
2992
+ (($match_i = strpos($part, $comment_mark, $i)) !== false))) {
2993
+ $comment_single_cache_per_key[$comment_key] = $match_i;
2994
+ } else {
2995
+ $comment_single_cache_per_key[$comment_key] = false;
2996
+ continue;
2997
+ }
2998
+ if ($match_i !== false && $match_i < $next_comment_single_pos) {
2999
+ $next_comment_single_pos = $match_i;
3000
+ $next_comment_single_key = $comment_key;
3001
+ if ($match_i === $i) {
3002
+ break;
3003
+ }
3004
+ }
3005
+ }
3006
+ }
3007
+ if ($next_comment_single_pos == $i) {
3008
+ $comment_key = $next_comment_single_key;
3009
+ $comment_mark = $this->language_data['COMMENT_SINGLE'][$comment_key];
3010
+ $com_len = strlen($comment_mark);
3011
+
3012
+ // This check will find special variables like $# in bash
3013
+ // or compiler directives of Delphi beginning {$
3014
+ if ((empty($sc_disallowed_before) || ($i == 0) ||
3015
+ (false === strpos($sc_disallowed_before, $part[$i-1]))) &&
3016
+ (empty($sc_disallowed_after) || ($length <= $i + $com_len) ||
3017
+ (false === strpos($sc_disallowed_after, $part[$i + $com_len]))))
3018
+ {
3019
+ // this is a valid comment
3020
+ $COMMENT_MATCHED = true;
3021
+ if ($this->lexic_permissions['COMMENTS'][$comment_key]) {
3022
+ if (!$this->use_classes) {
3023
+ $attributes = ' style="' . $this->language_data['STYLES']['COMMENTS'][$comment_key] . '"';
3024
+ } else {
3025
+ $attributes = ' class="co' . $comment_key . '"';
3026
+ }
3027
+ $test_str = "<span$attributes>" . $this->hsc($this->change_case($comment_mark));
3028
+ } else {
3029
+ $test_str = $this->hsc($comment_mark);
3030
+ }
3031
+
3032
+ //Check if this comment is the last in the source
3033
+ $close_pos = strpos($part, "\n", $i);
3034
+ $oops = false;
3035
+ if ($close_pos === false) {
3036
+ $close_pos = $length;
3037
+ $oops = true;
3038
+ }
3039
+ $test_str .= $this->hsc(substr($part, $i + $com_len, $close_pos - $i - $com_len));
3040
+ if ($this->lexic_permissions['COMMENTS'][$comment_key]) {
3041
+ $test_str .= "</span>";
3042
+ }
3043
+
3044
+ // Take into account that the comment might be the last in the source
3045
+ if (!$oops) {
3046
+ $test_str .= "\n";
3047
+ }
3048
+
3049
+ $i = $close_pos;
3050
+
3051
+ // parse the rest
3052
+ $result .= $this->parse_non_string_part($stuff_to_parse);
3053
+ $stuff_to_parse = '';
3054
+ }
3055
+ }
3056
+ }
3057
+ }
3058
+
3059
+ // Where are we adding this char?
3060
+ if (!$COMMENT_MATCHED) {
3061
+ $stuff_to_parse .= $char;
3062
+ } else {
3063
+ $result .= $test_str;
3064
+ unset($test_str);
3065
+ $COMMENT_MATCHED = false;
3066
+ }
3067
+ }
3068
+ // Parse the last bit
3069
+ $result .= $this->parse_non_string_part($stuff_to_parse);
3070
+ $stuff_to_parse = '';
3071
+ } else {
3072
+ $result .= $this->hsc($part);
3073
+ }
3074
+ // Close the <span> that surrounds the block
3075
+ if ($STRICTATTRS != '') {
3076
+ $result = str_replace("\n", "</span>\n<span$STRICTATTRS>", $result);
3077
+ $result .= '</span>';
3078
+ }
3079
+
3080
+ $endresult .= $result;
3081
+ unset($part, $parts[$key], $result);
3082
+ }
3083
+
3084
+ //This fix is related to SF#1923020, but has to be applied regardless of
3085
+ //actually highlighting symbols.
3086
+ /** NOTE: memorypeak #3 */
3087
+ $endresult = str_replace(array('<SEMI>', '<PIPE>'), array(';', '|'), $endresult);
3088
+
3089
+ // // Parse the last stuff (redundant?)
3090
+ // $result .= $this->parse_non_string_part($stuff_to_parse);
3091
+
3092
+ // Lop off the very first and last spaces
3093
+ // $result = substr($result, 1, -1);
3094
+
3095
+ // We're finished: stop timing
3096
+ $this->set_time($start_time, microtime());
3097
+
3098
+ $this->finalise($endresult);
3099
+ return $endresult;
3100
+ }
3101
+
3102
+ /**
3103
+ * Swaps out spaces and tabs for HTML indentation. Not needed if
3104
+ * the code is in a pre block...
3105
+ *
3106
+ * @param string The source to indent (reference!)
3107
+ * @since 1.0.0
3108
+ * @access private
3109
+ */
3110
+ function indent(&$result) {
3111
+ /// Replace tabs with the correct number of spaces
3112
+ if (false !== strpos($result, "\t")) {
3113
+ $lines = explode("\n", $result);
3114
+ $result = null;//Save memory while we process the lines individually
3115
+ $tab_width = $this->get_real_tab_width();
3116
+ $tab_string = '&nbsp;' . str_repeat(' ', $tab_width);
3117
+
3118
+ for ($key = 0, $n = count($lines); $key < $n; $key++) {
3119
+ $line = $lines[$key];
3120
+ if (false === strpos($line, "\t")) {
3121
+ continue;
3122
+ }
3123
+
3124
+ $pos = 0;
3125
+ $length = strlen($line);
3126
+ $lines[$key] = ''; // reduce memory
3127
+
3128
+ $IN_TAG = false;
3129
+ for ($i = 0; $i < $length; ++$i) {
3130
+ $char = $line[$i];
3131
+ // Simple engine to work out whether we're in a tag.
3132
+ // If we are we modify $pos. This is so we ignore HTML
3133
+ // in the line and only workout the tab replacement
3134
+ // via the actual content of the string
3135
+ // This test could be improved to include strings in the
3136
+ // html so that < or > would be allowed in user's styles
3137
+ // (e.g. quotes: '<' '>'; or similar)
3138
+ if ($IN_TAG) {
3139
+ if ('>' == $char) {
3140
+ $IN_TAG = false;
3141
+ }
3142
+ $lines[$key] .= $char;
3143
+ } else if ('<' == $char) {
3144
+ $IN_TAG = true;
3145
+ $lines[$key] .= '<';
3146
+ } else if ('&' == $char) {
3147
+ $substr = substr($line, $i + 3, 5);
3148
+ $posi = strpos($substr, ';');
3149
+ if (false === $posi) {
3150
+ ++$pos;
3151
+ } else {
3152
+ $pos -= $posi+2;
3153
+ }
3154
+ $lines[$key] .= $char;
3155
+ } else if ("\t" == $char) {
3156
+ $str = '';
3157
+ // OPTIMISE - move $strs out. Make an array:
3158
+ // $tabs = array(
3159
+ // 1 => '&nbsp;',
3160
+ // 2 => '&nbsp; ',
3161
+ // 3 => '&nbsp; &nbsp;' etc etc
3162
+ // to use instead of building a string every time
3163
+ $tab_end_width = $tab_width - ($pos % $tab_width); //Moved out of the look as it doesn't change within the loop
3164
+ if (($pos & 1) || 1 == $tab_end_width) {
3165
+ $str .= substr($tab_string, 6, $tab_end_width);
3166
+ } else {
3167
+ $str .= substr($tab_string, 0, $tab_end_width+5);
3168
+ }
3169
+ $lines[$key] .= $str;
3170
+ $pos += $tab_end_width;
3171
+
3172
+ if (false === strpos($line, "\t", $i + 1)) {
3173
+ $lines[$key] .= substr($line, $i + 1);
3174
+ break;
3175
+ }
3176
+ } else if (0 == $pos && ' ' == $char) {
3177
+ $lines[$key] .= '&nbsp;';
3178
+ ++$pos;
3179
+ } else {
3180
+ $lines[$key] .= $char;
3181
+ ++$pos;
3182
+ }
3183
+ }
3184
+ }
3185
+ $result = implode("\n", $lines);
3186
+ unset($lines);//We don't need the lines separated beyond this --- free them!
3187
+ }
3188
+ // Other whitespace
3189
+ // BenBE: Fix to reduce the number of replacements to be done
3190
+ $result = preg_replace('/^ /m', '&nbsp;', $result);
3191
+ $result = str_replace(' ', ' &nbsp;', $result);
3192
+
3193
+ if ($this->line_numbers == GESHI_NO_LINE_NUMBERS && $this->header_type != GESHI_HEADER_PRE_TABLE) {
3194
+ if ($this->line_ending === null) {
3195
+ $result = nl2br($result);
3196
+ } else {
3197
+ $result = str_replace("\n", $this->line_ending, $result);
3198
+ }
3199
+ }
3200
+ }
3201
+
3202
+ /**
3203
+ * Changes the case of a keyword for those languages where a change is asked for
3204
+ *
3205
+ * @param string The keyword to change the case of
3206
+ * @return string The keyword with its case changed
3207
+ * @since 1.0.0
3208
+ * @access private
3209
+ */
3210
+ function change_case($instr) {
3211
+ switch ($this->language_data['CASE_KEYWORDS']) {
3212
+ case GESHI_CAPS_UPPER:
3213
+ return strtoupper($instr);
3214
+ case GESHI_CAPS_LOWER:
3215
+ return strtolower($instr);
3216
+ default:
3217
+ return $instr;
3218
+ }
3219
+ }
3220
+
3221
+ /**
3222
+ * Handles replacements of keywords to include markup and links if requested
3223
+ *
3224
+ * @param string The keyword to add the Markup to
3225
+ * @return The HTML for the match found
3226
+ * @since 1.0.8
3227
+ * @access private
3228
+ *
3229
+ * @todo Get rid of ender in keyword links
3230
+ */
3231
+ function handle_keyword_replace($match) {
3232
+ $k = $this->_kw_replace_group;
3233
+ $keyword = $match[0];
3234
+
3235
+ $before = '';
3236
+ $after = '';
3237
+
3238
+ if ($this->keyword_links) {
3239
+ // Keyword links have been ebabled
3240
+
3241
+ if (isset($this->language_data['URLS'][$k]) &&
3242
+ $this->language_data['URLS'][$k] != '') {
3243
+ // There is a base group for this keyword
3244
+
3245
+ // Old system: strtolower
3246
+ //$keyword = ( $this->language_data['CASE_SENSITIVE'][$group] ) ? $keyword : strtolower($keyword);
3247
+ // New system: get keyword from language file to get correct case
3248
+ if (!$this->language_data['CASE_SENSITIVE'][$k] &&
3249
+ strpos($this->language_data['URLS'][$k], '{FNAME}') !== false) {
3250
+ foreach ($this->language_data['KEYWORDS'][$k] as $word) {
3251
+ if (strcasecmp($word, $keyword) == 0) {
3252
+ break;
3253
+ }
3254
+ }
3255
+ } else {
3256
+ $word = $keyword;
3257
+ }
3258
+
3259
+ $before = '<|UR1|"' .
3260
+ str_replace(
3261
+ array(
3262
+ '{FNAME}',
3263
+ '{FNAMEL}',
3264
+ '{FNAMEU}',
3265
+ '.'),
3266
+ array(
3267
+ str_replace('+', '%20', urlencode($this->hsc($word))),
3268
+ str_replace('+', '%20', urlencode($this->hsc(strtolower($word)))),
3269
+ str_replace('+', '%20', urlencode($this->hsc(strtoupper($word)))),
3270
+ '<DOT>'),
3271
+ $this->language_data['URLS'][$k]
3272
+ ) . '">';
3273
+ $after = '</a>';
3274
+ }
3275
+ }
3276
+
3277
+ return $before . '<|/'. $k .'/>' . $this->change_case($keyword) . '|>' . $after;
3278
+ }
3279
+
3280
+ /**
3281
+ * handles regular expressions highlighting-definitions with callback functions
3282
+ *
3283
+ * @note this is a callback, don't use it directly
3284
+ *
3285
+ * @param array the matches array
3286
+ * @return The highlighted string
3287
+ * @since 1.0.8
3288
+ * @access private
3289
+ */
3290
+ function handle_regexps_callback($matches) {
3291
+ // before: "' style=\"' . call_user_func(\"$func\", '\\1') . '\"\\1|>'",
3292
+ return ' style="' . call_user_func($this->language_data['STYLES']['REGEXPS'][$this->_rx_key], $matches[1]) . '"'. $matches[1] . '|>';
3293
+ }
3294
+
3295
+ /**
3296
+ * handles newlines in REGEXPS matches. Set the _hmr_* vars before calling this
3297
+ *
3298
+ * @note this is a callback, don't use it directly
3299
+ *
3300
+ * @param array the matches array
3301
+ * @return string
3302
+ * @since 1.0.8
3303
+ * @access private
3304
+ */
3305
+ function handle_multiline_regexps($matches) {
3306
+ $before = $this->_hmr_before;
3307
+ $after = $this->_hmr_after;
3308
+ if ($this->_hmr_replace) {
3309
+ $replace = $this->_hmr_replace;
3310
+ $search = array();
3311
+
3312
+ foreach (array_keys($matches) as $k) {
3313
+ $search[] = '\\' . $k;
3314
+ }
3315
+
3316
+ $before = str_replace($search, $matches, $before);
3317
+ $after = str_replace($search, $matches, $after);
3318
+ $replace = str_replace($search, $matches, $replace);
3319
+ } else {
3320
+ $replace = $matches[0];
3321
+ }
3322
+ return $before
3323
+ . '<|!REG3XP' . $this->_hmr_key .'!>'
3324
+ . str_replace("\n", "|>\n<|!REG3XP" . $this->_hmr_key . '!>', $replace)
3325
+ . '|>'
3326
+ . $after;
3327
+ }
3328
+
3329
+ /**
3330
+ * Takes a string that has no strings or comments in it, and highlights
3331
+ * stuff like keywords, numbers and methods.
3332
+ *
3333
+ * @param string The string to parse for keyword, numbers etc.
3334
+ * @since 1.0.0
3335
+ * @access private
3336
+ * @todo BUGGY! Why? Why not build string and return?
3337
+ */
3338
+ function parse_non_string_part($stuff_to_parse) {
3339
+ $stuff_to_parse = ' ' . $this->hsc($stuff_to_parse);
3340
+
3341
+ // Highlight keywords
3342
+ $disallowed_before = "(?<![a-zA-Z0-9\$_\|\#|^&";
3343
+ $disallowed_after = "(?![a-zA-Z0-9_\|%\\-&;";
3344
+ if ($this->lexic_permissions['STRINGS']) {
3345
+ $quotemarks = preg_quote(implode($this->language_data['QUOTEMARKS']), '/');
3346
+ $disallowed_before .= $quotemarks;
3347
+ $disallowed_after .= $quotemarks;
3348
+ }
3349
+ $disallowed_before .= "])";
3350
+ $disallowed_after .= "])";
3351
+
3352
+ $parser_control_pergroup = false;
3353
+ if (isset($this->language_data['PARSER_CONTROL'])) {
3354
+ if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS'])) {
3355
+ $x = 0; // check wether per-keyword-group parser_control is enabled
3356
+ if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_BEFORE'])) {
3357
+ $disallowed_before = $this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_BEFORE'];
3358
+ ++$x;
3359
+ }
3360
+ if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_AFTER'])) {
3361
+ $disallowed_after = $this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_AFTER'];
3362
+ ++$x;
3363
+ }
3364
+ $parser_control_pergroup = (count($this->language_data['PARSER_CONTROL']['KEYWORDS']) - $x) > 0;
3365
+ }
3366
+ }
3367
+
3368
+ foreach (array_keys($this->language_data['KEYWORDS']) as $k) {
3369
+ if (!isset($this->lexic_permissions['KEYWORDS'][$k]) ||
3370
+ $this->lexic_permissions['KEYWORDS'][$k]) {
3371
+
3372
+ $case_sensitive = $this->language_data['CASE_SENSITIVE'][$k];
3373
+ $modifiers = $case_sensitive ? '' : 'i';
3374
+
3375
+ // NEW in 1.0.8 - per-keyword-group parser control
3376
+ $disallowed_before_local = $disallowed_before;
3377
+ $disallowed_after_local = $disallowed_after;
3378
+ if ($parser_control_pergroup && isset($this->language_data['PARSER_CONTROL']['KEYWORDS'][$k])) {
3379
+ if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS'][$k]['DISALLOWED_BEFORE'])) {
3380
+ $disallowed_before_local =
3381
+ $this->language_data['PARSER_CONTROL']['KEYWORDS'][$k]['DISALLOWED_BEFORE'];
3382
+ }
3383
+
3384
+ if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS'][$k]['DISALLOWED_AFTER'])) {
3385
+ $disallowed_after_local =
3386
+ $this->language_data['PARSER_CONTROL']['KEYWORDS'][$k]['DISALLOWED_AFTER'];
3387
+ }
3388
+ }
3389
+
3390
+ $this->_kw_replace_group = $k;
3391
+
3392
+ //NEW in 1.0.8, the cached regexp list
3393
+ // since we don't want PHP / PCRE to crash due to too large patterns we split them into smaller chunks
3394
+ for ($set = 0, $set_length = count($this->language_data['CACHED_KEYWORD_LISTS'][$k]); $set < $set_length; ++$set) {
3395
+ $keywordset =& $this->language_data['CACHED_KEYWORD_LISTS'][$k][$set];
3396
+ // Might make a more unique string for putting the number in soon
3397
+ // Basically, we don't put the styles in yet because then the styles themselves will
3398
+ // get highlighted if the language has a CSS keyword in it (like CSS, for example ;))
3399
+ $stuff_to_parse = preg_replace_callback(
3400
+ "/$disallowed_before_local({$keywordset})(?!\<DOT\>(?:htm|php|aspx?))$disallowed_after_local/$modifiers",
3401
+ array($this, 'handle_keyword_replace'),
3402
+ $stuff_to_parse
3403
+ );
3404
+ }
3405
+ }
3406
+ }
3407
+
3408
+ // Regular expressions
3409
+ foreach ($this->language_data['REGEXPS'] as $key => $regexp) {
3410
+ if ($this->lexic_permissions['REGEXPS'][$key]) {
3411
+ if (is_array($regexp)) {
3412
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
3413
+ // produce valid HTML when we match multiple lines
3414
+ $this->_hmr_replace = $regexp[GESHI_REPLACE];
3415
+ $this->_hmr_before = $regexp[GESHI_BEFORE];
3416
+ $this->_hmr_key = $key;
3417
+ $this->_hmr_after = $regexp[GESHI_AFTER];
3418
+ $stuff_to_parse = preg_replace_callback(
3419
+ "/" . $regexp[GESHI_SEARCH] . "/{$regexp[GESHI_MODIFIERS]}",
3420
+ array($this, 'handle_multiline_regexps'),
3421
+ $stuff_to_parse);
3422
+ $this->_hmr_replace = false;
3423
+ $this->_hmr_before = '';
3424
+ $this->_hmr_after = '';
3425
+ } else {
3426
+ $stuff_to_parse = preg_replace(
3427
+ '/' . $regexp[GESHI_SEARCH] . '/' . $regexp[GESHI_MODIFIERS],
3428
+ $regexp[GESHI_BEFORE] . '<|!REG3XP'. $key .'!>' . $regexp[GESHI_REPLACE] . '|>' . $regexp[GESHI_AFTER],
3429
+ $stuff_to_parse);
3430
+ }
3431
+ } else {
3432
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
3433
+ // produce valid HTML when we match multiple lines
3434
+ $this->_hmr_key = $key;
3435
+ $stuff_to_parse = preg_replace_callback( "/(" . $regexp . ")/",
3436
+ array($this, 'handle_multiline_regexps'), $stuff_to_parse);
3437
+ $this->_hmr_key = '';
3438
+ } else {
3439
+ $stuff_to_parse = preg_replace( "/(" . $regexp . ")/", "<|!REG3XP$key!>\\1|>", $stuff_to_parse);
3440
+ }
3441
+ }
3442
+ }
3443
+ }
3444
+
3445
+ // Highlight numbers. As of 1.0.8 we support different types of numbers
3446
+ $numbers_found = false;
3447
+
3448
+ if ($this->lexic_permissions['NUMBERS'] && preg_match($this->language_data['PARSER_CONTROL']['NUMBERS']['PRECHECK_RX'], $stuff_to_parse )) {
3449
+ $numbers_found = true;
3450
+
3451
+ //For each of the formats ...
3452
+ foreach($this->language_data['NUMBERS_RXCACHE'] as $id => $regexp) {
3453
+ //Check if it should be highlighted ...
3454
+ $stuff_to_parse = preg_replace($regexp, "<|/NUM!$id/>\\1|>", $stuff_to_parse);
3455
+ }
3456
+ }
3457
+
3458
+ //
3459
+ // Now that's all done, replace /[number]/ with the correct styles
3460
+ //
3461
+ foreach (array_keys($this->language_data['KEYWORDS']) as $k) {
3462
+ if (!$this->use_classes) {
3463
+ $attributes = ' style="' .
3464
+ (isset($this->language_data['STYLES']['KEYWORDS'][$k]) ?
3465
+ $this->language_data['STYLES']['KEYWORDS'][$k] : "") . '"';
3466
+ } else {
3467
+ $attributes = ' class="kw' . $k . '"';
3468
+ }
3469
+ $stuff_to_parse = str_replace("<|/$k/>", "<|$attributes>", $stuff_to_parse);
3470
+ }
3471
+
3472
+ if ($numbers_found) {
3473
+ // Put number styles in
3474
+ foreach($this->language_data['NUMBERS_RXCACHE'] as $id => $regexp) {
3475
+ //Commented out for now, as this needs some review ...
3476
+ // if ($numbers_permissions & $id) {
3477
+ //Get the appropriate style ...
3478
+ //Checking for unset styles is done by the style cache builder ...
3479
+ if (!$this->use_classes) {
3480
+ $attributes = ' style="' . $this->language_data['STYLES']['NUMBERS'][$id] . '"';
3481
+ } else {
3482
+ $attributes = ' class="nu'.$id.'"';
3483
+ }
3484
+
3485
+ //Set in the correct styles ...
3486
+ $stuff_to_parse = str_replace("/NUM!$id/", $attributes, $stuff_to_parse);
3487
+ // }
3488
+ }
3489
+ }
3490
+
3491
+ // Highlight methods and fields in objects
3492
+ if ($this->lexic_permissions['METHODS'] && $this->language_data['OOLANG']) {
3493
+ $oolang_spaces = "[\s]*";
3494
+ $oolang_before = "";
3495
+ $oolang_after = "[a-zA-Z][a-zA-Z0-9_]*";
3496
+ if (isset($this->language_data['PARSER_CONTROL'])) {
3497
+ if (isset($this->language_data['PARSER_CONTROL']['OOLANG'])) {
3498
+ if (isset($this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_BEFORE'])) {
3499
+ $oolang_before = $this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_BEFORE'];
3500
+ }
3501
+ if (isset($this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_AFTER'])) {
3502
+ $oolang_after = $this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_AFTER'];
3503
+ }
3504
+ if (isset($this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_SPACES'])) {
3505
+ $oolang_spaces = $this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_SPACES'];
3506
+ }
3507
+ }
3508
+ }
3509
+
3510
+ foreach ($this->language_data['OBJECT_SPLITTERS'] as $key => $splitter) {
3511
+ if (false !== strpos($stuff_to_parse, $splitter)) {
3512
+ if (!$this->use_classes) {
3513
+ $attributes = ' style="' . $this->language_data['STYLES']['METHODS'][$key] . '"';
3514
+ } else {
3515
+ $attributes = ' class="me' . $key . '"';
3516
+ }
3517
+ $stuff_to_parse = preg_replace("/($oolang_before)(" . preg_quote($this->language_data['OBJECT_SPLITTERS'][$key], '/') . ")($oolang_spaces)($oolang_after)/", "\\1\\2\\3<|$attributes>\\4|>", $stuff_to_parse);
3518
+ }
3519
+ }
3520
+ }
3521
+
3522
+ //
3523
+ // Highlight brackets. Yes, I've tried adding a semi-colon to this list.
3524
+ // You try it, and see what happens ;)
3525
+ // TODO: Fix lexic permissions not converting entities if shouldn't
3526
+ // be highlighting regardless
3527
+ //
3528
+ if ($this->lexic_permissions['BRACKETS']) {
3529
+ $stuff_to_parse = str_replace( $this->language_data['CACHE_BRACKET_MATCH'],
3530
+ $this->language_data['CACHE_BRACKET_REPLACE'], $stuff_to_parse );
3531
+ }
3532
+
3533
+
3534
+ //FIX for symbol highlighting ...
3535
+ if ($this->lexic_permissions['SYMBOLS'] && !empty($this->language_data['SYMBOLS'])) {
3536
+ //Get all matches and throw away those witin a block that is already highlighted... (i.e. matched by a regexp)
3537
+ $n_symbols = preg_match_all("/<\|(?:<DOT>|[^>])+>(?:(?!\|>).*?)\|>|<\/a>|(?:" . $this->language_data['SYMBOL_SEARCH'] . ")+(?![^<]+?>)/", $stuff_to_parse, $pot_symbols, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
3538
+ $global_offset = 0;
3539
+ for ($s_id = 0; $s_id < $n_symbols; ++$s_id) {
3540
+ $symbol_match = $pot_symbols[$s_id][0][0];
3541
+ if (strpos($symbol_match, '<') !== false || strpos($symbol_match, '>') !== false) {
3542
+ // already highlighted blocks _must_ include either < or >
3543
+ // so if this conditional applies, we have to skip this match
3544
+ // BenBE: UNLESS the block contains <SEMI> or <PIPE>
3545
+ if(strpos($symbol_match, '<SEMI>') === false &&
3546
+ strpos($symbol_match, '<PIPE>') === false) {
3547
+ continue;
3548
+ }
3549
+ }
3550
+
3551
+ // if we reach this point, we have a valid match which needs to be highlighted
3552
+
3553
+ $symbol_length = strlen($symbol_match);
3554
+ $symbol_offset = $pot_symbols[$s_id][0][1];
3555
+ unset($pot_symbols[$s_id]);
3556
+ $symbol_end = $symbol_length + $symbol_offset;
3557
+ $symbol_hl = "";
3558
+
3559
+ // if we have multiple styles, we have to handle them properly
3560
+ if ($this->language_data['MULTIPLE_SYMBOL_GROUPS']) {
3561
+ $old_sym = -1;
3562
+ // Split the current stuff to replace into its atomic symbols ...
3563
+ preg_match_all("/" . $this->language_data['SYMBOL_SEARCH'] . "/", $symbol_match, $sym_match_syms, PREG_PATTERN_ORDER);
3564
+ foreach ($sym_match_syms[0] as $sym_ms) {
3565
+ //Check if consequtive symbols belong to the same group to save output ...
3566
+ if (isset($this->language_data['SYMBOL_DATA'][$sym_ms])
3567
+ && ($this->language_data['SYMBOL_DATA'][$sym_ms] != $old_sym)) {
3568
+ if (-1 != $old_sym) {
3569
+ $symbol_hl .= "|>";
3570
+ }
3571
+ $old_sym = $this->language_data['SYMBOL_DATA'][$sym_ms];
3572
+ if (!$this->use_classes) {
3573
+ $symbol_hl .= '<| style="' . $this->language_data['STYLES']['SYMBOLS'][$old_sym] . '">';
3574
+ } else {
3575
+ $symbol_hl .= '<| class="sy' . $old_sym . '">';
3576
+ }
3577
+ }
3578
+ $symbol_hl .= $sym_ms;
3579
+ }
3580
+ unset($sym_match_syms);
3581
+
3582
+ //Close remaining tags and insert the replacement at the right position ...
3583
+ //Take caution if symbol_hl is empty to avoid doubled closing spans.
3584
+ if (-1 != $old_sym) {
3585
+ $symbol_hl .= "|>";
3586
+ }
3587
+ } else {
3588
+ if (!$this->use_classes) {
3589
+ $symbol_hl = '<| style="' . $this->language_data['STYLES']['SYMBOLS'][0] . '">';
3590
+ } else {
3591
+ $symbol_hl = '<| class="sy0">';
3592
+ }
3593
+ $symbol_hl .= $symbol_match . '|>';
3594
+ }
3595
+
3596
+ $stuff_to_parse = substr_replace($stuff_to_parse, $symbol_hl, $symbol_offset + $global_offset, $symbol_length);
3597
+
3598
+ // since we replace old text with something of different size,
3599
+ // we'll have to keep track of the differences
3600
+ $global_offset += strlen($symbol_hl) - $symbol_length;
3601
+ }
3602
+ }
3603
+ //FIX for symbol highlighting ...
3604
+
3605
+ // Add class/style for regexps
3606
+ foreach (array_keys($this->language_data['REGEXPS']) as $key) {
3607
+ if ($this->lexic_permissions['REGEXPS'][$key]) {
3608
+ if (is_callable($this->language_data['STYLES']['REGEXPS'][$key])) {
3609
+ $this->_rx_key = $key;
3610
+ $stuff_to_parse = preg_replace_callback("/!REG3XP$key!(.*)\|>/U",
3611
+ array($this, 'handle_regexps_callback'),
3612
+ $stuff_to_parse);
3613
+ } else {
3614
+ if (!$this->use_classes) {
3615
+ $attributes = ' style="' . $this->language_data['STYLES']['REGEXPS'][$key] . '"';
3616
+ } else {
3617
+ if (is_array($this->language_data['REGEXPS'][$key]) &&
3618
+ array_key_exists(GESHI_CLASS, $this->language_data['REGEXPS'][$key])) {
3619
+ $attributes = ' class="' .
3620
+ $this->language_data['REGEXPS'][$key][GESHI_CLASS] . '"';
3621
+ } else {
3622
+ $attributes = ' class="re' . $key . '"';
3623
+ }
3624
+ }
3625
+ $stuff_to_parse = str_replace("!REG3XP$key!", "$attributes", $stuff_to_parse);
3626
+ }
3627
+ }
3628
+ }
3629
+
3630
+ // Replace <DOT> with . for urls
3631
+ $stuff_to_parse = str_replace('<DOT>', '.', $stuff_to_parse);
3632
+ // Replace <|UR1| with <a href= for urls also
3633
+ if (isset($this->link_styles[GESHI_LINK])) {
3634
+ if ($this->use_classes) {
3635
+ $stuff_to_parse = str_replace('<|UR1|', '<a' . $this->link_target . ' href=', $stuff_to_parse);
3636
+ } else {
3637
+ $stuff_to_parse = str_replace('<|UR1|', '<a' . $this->link_target . ' style="' . $this->link_styles[GESHI_LINK] . '" href=', $stuff_to_parse);
3638
+ }
3639
+ } else {
3640
+ $stuff_to_parse = str_replace('<|UR1|', '<a' . $this->link_target . ' href=', $stuff_to_parse);
3641
+ }
3642
+
3643
+ //
3644
+ // NOW we add the span thingy ;)
3645
+ //
3646
+
3647
+ $stuff_to_parse = str_replace('<|', '<span', $stuff_to_parse);
3648
+ $stuff_to_parse = str_replace ( '|>', '</span>', $stuff_to_parse );
3649
+ return substr($stuff_to_parse, 1);
3650
+ }
3651
+
3652
+ /**
3653
+ * Sets the time taken to parse the code
3654
+ *
3655
+ * @param microtime The time when parsing started
3656
+ * @param microtime The time when parsing ended
3657
+ * @since 1.0.2
3658
+ * @access private
3659
+ */
3660
+ function set_time($start_time, $end_time) {
3661
+ $start = explode(' ', $start_time);
3662
+ $end = explode(' ', $end_time);
3663
+ $this->time = $end[0] + $end[1] - $start[0] - $start[1];
3664
+ }
3665
+
3666
+ /**
3667
+ * Gets the time taken to parse the code
3668
+ *
3669
+ * @return double The time taken to parse the code
3670
+ * @since 1.0.2
3671
+ */
3672
+ function get_time() {
3673
+ return $this->time;
3674
+ }
3675
+
3676
+ /**
3677
+ * Merges arrays recursively, overwriting values of the first array with values of later arrays
3678
+ *
3679
+ * @since 1.0.8
3680
+ * @access private
3681
+ */
3682
+ function merge_arrays() {
3683
+ $arrays = func_get_args();
3684
+ $narrays = count($arrays);
3685
+
3686
+ // check arguments
3687
+ // comment out if more performance is necessary (in this case the foreach loop will trigger a warning if the argument is not an array)
3688
+ for ($i = 0; $i < $narrays; $i ++) {
3689
+ if (!is_array($arrays[$i])) {
3690
+ // also array_merge_recursive returns nothing in this case
3691
+ trigger_error('Argument #' . ($i+1) . ' is not an array - trying to merge array with scalar! Returning false!', E_USER_WARNING);
3692
+ return false;
3693
+ }
3694
+ }
3695
+
3696
+ // the first array is in the output set in every case
3697
+ $ret = $arrays[0];
3698
+
3699
+ // merege $ret with the remaining arrays
3700
+ for ($i = 1; $i < $narrays; $i ++) {
3701
+ foreach ($arrays[$i] as $key => $value) {
3702
+ if (is_array($value) && isset($ret[$key])) {
3703
+ // if $ret[$key] is not an array you try to merge an scalar value with an array - the result is not defined (incompatible arrays)
3704
+ // in this case the call will trigger an E_USER_WARNING and the $ret[$key] will be false.
3705
+ $ret[$key] = $this->merge_arrays($ret[$key], $value);
3706
+ } else {
3707
+ $ret[$key] = $value;
3708
+ }
3709
+ }
3710
+ }
3711
+
3712
+ return $ret;
3713
+ }
3714
+
3715
+ /**
3716
+ * Gets language information and stores it for later use
3717
+ *
3718
+ * @param string The filename of the language file you want to load
3719
+ * @since 1.0.0
3720
+ * @access private
3721
+ * @todo Needs to load keys for lexic permissions for keywords, regexps etc
3722
+ */
3723
+ function load_language($file_name) {
3724
+ if ($file_name == $this->loaded_language) {
3725
+ // this file is already loaded!
3726
+ return;
3727
+ }
3728
+
3729
+ //Prepare some stuff before actually loading the language file
3730
+ $this->loaded_language = $file_name;
3731
+ $this->parse_cache_built = false;
3732
+ $this->enable_highlighting();
3733
+ $language_data = array();
3734
+
3735
+ //Load the language file
3736
+ require $file_name;
3737
+
3738
+ // Perhaps some checking might be added here later to check that
3739
+ // $language data is a valid thing but maybe not
3740
+ $this->language_data = $language_data;
3741
+
3742
+ // Set strict mode if should be set
3743
+ $this->strict_mode = $this->language_data['STRICT_MODE_APPLIES'];
3744
+
3745
+ // Set permissions for all lexics to true
3746
+ // so they'll be highlighted by default
3747
+ foreach (array_keys($this->language_data['KEYWORDS']) as $key) {
3748
+ if (!empty($this->language_data['KEYWORDS'][$key])) {
3749
+ $this->lexic_permissions['KEYWORDS'][$key] = true;
3750
+ } else {
3751
+ $this->lexic_permissions['KEYWORDS'][$key] = false;
3752
+ }
3753
+ }
3754
+
3755
+ foreach (array_keys($this->language_data['COMMENT_SINGLE']) as $key) {
3756
+ $this->lexic_permissions['COMMENTS'][$key] = true;
3757
+ }
3758
+ foreach (array_keys($this->language_data['REGEXPS']) as $key) {
3759
+ $this->lexic_permissions['REGEXPS'][$key] = true;
3760
+ }
3761
+
3762
+ // for BenBE and future code reviews:
3763
+ // we can use empty here since we only check for existance and emptiness of an array
3764
+ // if it is not an array at all but rather false or null this will work as intended as well
3765
+ // even if $this->language_data['PARSER_CONTROL'] is undefined this won't trigger a notice
3766
+ if (!empty($this->language_data['PARSER_CONTROL']['ENABLE_FLAGS'])) {
3767
+ foreach ($this->language_data['PARSER_CONTROL']['ENABLE_FLAGS'] as $flag => $value) {
3768
+ // it's either true or false and maybe is true as well
3769
+ $perm = $value !== GESHI_NEVER;
3770
+ if ($flag == 'ALL') {
3771
+ $this->enable_highlighting($perm);
3772
+ continue;
3773
+ }
3774
+ if (!isset($this->lexic_permissions[$flag])) {
3775
+ // unknown lexic permission
3776
+ continue;
3777
+ }
3778
+ if (is_array($this->lexic_permissions[$flag])) {
3779
+ foreach ($this->lexic_permissions[$flag] as $key => $val) {
3780
+ $this->lexic_permissions[$flag][$key] = $perm;
3781
+ }
3782
+ } else {
3783
+ $this->lexic_permissions[$flag] = $perm;
3784
+ }
3785
+ }
3786
+ unset($this->language_data['PARSER_CONTROL']['ENABLE_FLAGS']);
3787
+ }
3788
+
3789
+ //Fix: Problem where hardescapes weren't handled if no ESCAPE_CHAR was given
3790
+ //You need to set one for HARDESCAPES only in this case.
3791
+ if(!isset($this->language_data['HARDCHAR'])) {
3792
+ $this->language_data['HARDCHAR'] = $this->language_data['ESCAPE_CHAR'];
3793
+ }
3794
+
3795
+ //NEW in 1.0.8: Allow styles to be loaded from a separate file to override defaults
3796
+ $style_filename = substr($file_name, 0, -4) . '.style.php';
3797
+ if (is_readable($style_filename)) {
3798
+ //Clear any style_data that could have been set before ...
3799
+ if (isset($style_data)) {
3800
+ unset($style_data);
3801
+ }
3802
+
3803
+ //Read the Style Information from the style file
3804
+ include $style_filename;
3805
+
3806
+ //Apply the new styles to our current language styles
3807
+ if (isset($style_data) && is_array($style_data)) {
3808
+ $this->language_data['STYLES'] =
3809
+ $this->merge_arrays($this->language_data['STYLES'], $style_data);
3810
+ }
3811
+ }
3812
+ }
3813
+
3814
+ /**
3815
+ * Takes the parsed code and various options, and creates the HTML
3816
+ * surrounding it to make it look nice.
3817
+ *
3818
+ * @param string The code already parsed (reference!)
3819
+ * @since 1.0.0
3820
+ * @access private
3821
+ */
3822
+ function finalise(&$parsed_code) {
3823
+ // Remove end parts of important declarations
3824
+ // This is BUGGY!! My fault for bad code: fix coming in 1.2
3825
+ // @todo Remove this crap
3826
+ if ($this->enable_important_blocks &&
3827
+ (strpos($parsed_code, $this->hsc(GESHI_START_IMPORTANT)) === false)) {
3828
+ $parsed_code = str_replace($this->hsc(GESHI_END_IMPORTANT), '', $parsed_code);
3829
+ }
3830
+
3831
+ // Add HTML whitespace stuff if we're using the <div> header
3832
+ if ($this->header_type != GESHI_HEADER_PRE && $this->header_type != GESHI_HEADER_PRE_VALID) {
3833
+ $this->indent($parsed_code);
3834
+ }
3835
+
3836
+ // purge some unnecessary stuff
3837
+ /** NOTE: memorypeak #1 */
3838
+ $parsed_code = preg_replace('#<span[^>]+>(\s*)</span>#', '\\1', $parsed_code);
3839
+
3840
+ // If we are using IDs for line numbers, there needs to be an overall
3841
+ // ID set to prevent collisions.
3842
+ if ($this->add_ids && !$this->overall_id) {
3843
+ $this->overall_id = 'geshi-' . substr(md5(microtime()), 0, 4);
3844
+ }
3845
+
3846
+ // Get code into lines
3847
+ /** NOTE: memorypeak #2 */
3848
+ $code = explode("\n", $parsed_code);
3849
+ $parsed_code = $this->header();
3850
+
3851
+ // If we're using line numbers, we insert <li>s and appropriate
3852
+ // markup to style them (otherwise we don't need to do anything)
3853
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS && $this->header_type != GESHI_HEADER_PRE_TABLE) {
3854
+ // If we're using the <pre> header, we shouldn't add newlines because
3855
+ // the <pre> will line-break them (and the <li>s already do this for us)
3856
+ $ls = ($this->header_type != GESHI_HEADER_PRE && $this->header_type != GESHI_HEADER_PRE_VALID) ? "\n" : '';
3857
+
3858
+ // Set vars to defaults for following loop
3859
+ $i = 0;
3860
+
3861
+ // Foreach line...
3862
+ for ($i = 0, $n = count($code); $i < $n;) {
3863
+ //Reset the attributes for a new line ...
3864
+ $attrs = array();
3865
+
3866
+ // Make lines have at least one space in them if they're empty
3867
+ // BenBE: Checking emptiness using trim instead of relying on blanks
3868
+ if ('' == trim($code[$i])) {
3869
+ $code[$i] = '&nbsp;';
3870
+ }
3871
+
3872
+ // If this is a "special line"...
3873
+ if ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS &&
3874
+ $i % $this->line_nth_row == ($this->line_nth_row - 1)) {
3875
+ // Set the attributes to style the line
3876
+ if ($this->use_classes) {
3877
+ //$attr = ' class="li2"';
3878
+ $attrs['class'][] = 'li2';
3879
+ $def_attr = ' class="de2"';
3880
+ } else {
3881
+ //$attr = ' style="' . $this->line_style2 . '"';
3882
+ $attrs['style'][] = $this->line_style2;
3883
+ // This style "covers up" the special styles set for special lines
3884
+ // so that styles applied to special lines don't apply to the actual
3885
+ // code on that line
3886
+ $def_attr = ' style="' . $this->code_style . '"';
3887
+ }
3888
+ } else {
3889
+ if ($this->use_classes) {
3890
+ //$attr = ' class="li1"';
3891
+ $attrs['class'][] = 'li1';
3892
+ $def_attr = ' class="de1"';
3893
+ } else {
3894
+ //$attr = ' style="' . $this->line_style1 . '"';
3895
+ $attrs['style'][] = $this->line_style1;
3896
+ $def_attr = ' style="' . $this->code_style . '"';
3897
+ }
3898
+ }
3899
+
3900
+ //Check which type of tag to insert for this line
3901
+ if ($this->header_type == GESHI_HEADER_PRE_VALID) {
3902
+ $start = "<pre$def_attr>";
3903
+ $end = '</pre>';
3904
+ } else {
3905
+ // Span or div?
3906
+ $start = "<div$def_attr>";
3907
+ $end = '</div>';
3908
+ }
3909
+
3910
+ ++$i;
3911
+
3912
+ // Are we supposed to use ids? If so, add them
3913
+ if ($this->add_ids) {
3914
+ $attrs['id'][] = "$this->overall_id-$i";
3915
+ }
3916
+
3917
+ //Is this some line with extra styles???
3918
+ if (in_array($i, $this->highlight_extra_lines)) {
3919
+ if ($this->use_classes) {
3920
+ if (isset($this->highlight_extra_lines_styles[$i])) {
3921
+ $attrs['class'][] = "lx$i";
3922
+ } else {
3923
+ $attrs['class'][] = "ln-xtra";
3924
+ }
3925
+ } else {
3926
+ array_push($attrs['style'], $this->get_line_style($i));
3927
+ }
3928
+ }
3929
+
3930
+ // Add in the line surrounded by appropriate list HTML
3931
+ $attr_string = '';
3932
+ foreach ($attrs as $key => $attr) {
3933
+ $attr_string .= ' ' . $key . '="' . implode(' ', $attr) . '"';
3934
+ }
3935
+
3936
+ $parsed_code .= "<li$attr_string>$start{$code[$i-1]}$end</li>$ls";
3937
+ unset($code[$i - 1]);
3938
+ }
3939
+ } else {
3940
+ $n = count($code);
3941
+ if ($this->use_classes) {
3942
+ $attributes = ' class="de1"';
3943
+ } else {
3944
+ $attributes = ' style="'. $this->code_style .'"';
3945
+ }
3946
+ if ($this->header_type == GESHI_HEADER_PRE_VALID) {
3947
+ $parsed_code .= '<pre'. $attributes .'>';
3948
+ } elseif ($this->header_type == GESHI_HEADER_PRE_TABLE) {
3949
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
3950
+ if ($this->use_classes) {
3951
+ $attrs = ' class="ln"';
3952
+ } else {
3953
+ $attrs = ' style="'. $this->table_linenumber_style .'"';
3954
+ }
3955
+ $parsed_code .= '<td'.$attrs.'><pre'.$attributes.'>';
3956
+ // get linenumbers
3957
+ // we don't merge it with the for below, since it should be better for
3958
+ // memory consumption this way
3959
+ // @todo: but... actually it would still be somewhat nice to merge the two loops
3960
+ // the mem peaks are at different positions
3961
+ for ($i = 0; $i < $n; ++$i) {
3962
+ $close = 0;
3963
+ // fancy lines
3964
+ if ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS &&
3965
+ $i % $this->line_nth_row == ($this->line_nth_row - 1)) {
3966
+ // Set the attributes to style the line
3967
+ if ($this->use_classes) {
3968
+ $parsed_code .= '<span class="xtra li2"><span class="de2">';
3969
+ } else {
3970
+ // This style "covers up" the special styles set for special lines
3971
+ // so that styles applied to special lines don't apply to the actual
3972
+ // code on that line
3973
+ $parsed_code .= '<span style="display:block;' . $this->line_style2 . '">'
3974
+ .'<span style="' . $this->code_style .'">';
3975
+ }
3976
+ $close += 2;
3977
+ }
3978
+ //Is this some line with extra styles???
3979
+ if (in_array($i + 1, $this->highlight_extra_lines)) {
3980
+ if ($this->use_classes) {
3981
+ if (isset($this->highlight_extra_lines_styles[$i])) {
3982
+ $parsed_code .= "<span class=\"xtra lx$i\">";
3983
+ } else {
3984
+ $parsed_code .= "<span class=\"xtra ln-xtra\">";
3985
+ }
3986
+ } else {
3987
+ $parsed_code .= "<span style=\"display:block;" . $this->get_line_style($i) . "\">";
3988
+ }
3989
+ ++$close;
3990
+ }
3991
+ $parsed_code .= $this->line_numbers_start + $i;
3992
+ if ($close) {
3993
+ $parsed_code .= str_repeat('</span>', $close);
3994
+ } else if ($i != $n) {
3995
+ $parsed_code .= "\n";
3996
+ }
3997
+ }
3998
+ $parsed_code .= '</pre></td><td'.$attributes.'>';
3999
+ }
4000
+ $parsed_code .= '<pre'. $attributes .'>';
4001
+ }
4002
+ // No line numbers, but still need to handle highlighting lines extra.
4003
+ // Have to use divs so the full width of the code is highlighted
4004
+ $close = 0;
4005
+ for ($i = 0; $i < $n; ++$i) {
4006
+ // Make lines have at least one space in them if they're empty
4007
+ // BenBE: Checking emptiness using trim instead of relying on blanks
4008
+ if ('' == trim($code[$i])) {
4009
+ $code[$i] = '&nbsp;';
4010
+ }
4011
+ // fancy lines
4012
+ if ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS &&
4013
+ $i % $this->line_nth_row == ($this->line_nth_row - 1)) {
4014
+ // Set the attributes to style the line
4015
+ if ($this->use_classes) {
4016
+ $parsed_code .= '<span class="xtra li2"><span class="de2">';
4017
+ } else {
4018
+ // This style "covers up" the special styles set for special lines
4019
+ // so that styles applied to special lines don't apply to the actual
4020
+ // code on that line
4021
+ $parsed_code .= '<span style="display:block;' . $this->line_style2 . '">'
4022
+ .'<span style="' . $this->code_style .'">';
4023
+ }
4024
+ $close += 2;
4025
+ }
4026
+ //Is this some line with extra styles???
4027
+ if (in_array($i + 1, $this->highlight_extra_lines)) {
4028
+ if ($this->use_classes) {
4029
+ if (isset($this->highlight_extra_lines_styles[$i])) {
4030
+ $parsed_code .= "<span class=\"xtra lx$i\">";
4031
+ } else {
4032
+ $parsed_code .= "<span class=\"xtra ln-xtra\">";
4033
+ }
4034
+ } else {
4035
+ $parsed_code .= "<span style=\"display:block;" . $this->get_line_style($i) . "\">";
4036
+ }
4037
+ ++$close;
4038
+ }
4039
+
4040
+ $parsed_code .= $code[$i];
4041
+
4042
+ if ($close) {
4043
+ $parsed_code .= str_repeat('</span>', $close);
4044
+ $close = 0;
4045
+ }
4046
+ elseif ($i + 1 < $n) {
4047
+ $parsed_code .= "\n";
4048
+ }
4049
+ unset($code[$i]);
4050
+ }
4051
+
4052
+ if ($this->header_type == GESHI_HEADER_PRE_VALID || $this->header_type == GESHI_HEADER_PRE_TABLE) {
4053
+ $parsed_code .= '</pre>';
4054
+ }
4055
+ if ($this->header_type == GESHI_HEADER_PRE_TABLE && $this->line_numbers != GESHI_NO_LINE_NUMBERS) {
4056
+ $parsed_code .= '</td>';
4057
+ }
4058
+ }
4059
+
4060
+ $parsed_code .= $this->footer();
4061
+ }
4062
+
4063
+ /**
4064
+ * Creates the header for the code block (with correct attributes)
4065
+ *
4066
+ * @return string The header for the code block
4067
+ * @since 1.0.0
4068
+ * @access private
4069
+ */
4070
+ function header() {
4071
+ // Get attributes needed
4072
+ /**
4073
+ * @todo Document behaviour change - class is outputted regardless of whether
4074
+ * we're using classes or not. Same with style
4075
+ */
4076
+ $attributes = ' class="' . $this->_genCSSName($this->language);
4077
+ if ($this->overall_class != '') {
4078
+ $attributes .= " ".$this->_genCSSName($this->overall_class);
4079
+ }
4080
+ $attributes .= '"';
4081
+
4082
+ if ($this->overall_id != '') {
4083
+ $attributes .= " id=\"{$this->overall_id}\"";
4084
+ }
4085
+ if ($this->overall_style != '' && !$this->use_classes) {
4086
+ $attributes .= ' style="' . $this->overall_style . '"';
4087
+ }
4088
+
4089
+ $ol_attributes = '';
4090
+
4091
+ if ($this->line_numbers_start != 1) {
4092
+ $ol_attributes .= ' start="' . $this->line_numbers_start . '"';
4093
+ }
4094
+
4095
+ // Get the header HTML
4096
+ $header = $this->header_content;
4097
+ if ($header) {
4098
+ if ($this->header_type == GESHI_HEADER_PRE || $this->header_type == GESHI_HEADER_PRE_VALID) {
4099
+ $header = str_replace("\n", '', $header);
4100
+ }
4101
+ $header = $this->replace_keywords($header);
4102
+
4103
+ if ($this->use_classes) {
4104
+ $attr = ' class="head"';
4105
+ } else {
4106
+ $attr = " style=\"{$this->header_content_style}\"";
4107
+ }
4108
+ if ($this->header_type == GESHI_HEADER_PRE_TABLE && $this->line_numbers != GESHI_NO_LINE_NUMBERS) {
4109
+ $header = "<thead><tr><td colspan=\"2\" $attr>$header</td></tr></thead>";
4110
+ } else {
4111
+ $header = "<div$attr>$header</div>";
4112
+ }
4113
+ }
4114
+
4115
+ if (GESHI_HEADER_NONE == $this->header_type) {
4116
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
4117
+ return "$header<ol$attributes$ol_attributes>";
4118
+ }
4119
+ return $header . ($this->force_code_block ? '<div>' : '');
4120
+ }
4121
+
4122
+ // Work out what to return and do it
4123
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
4124
+ if ($this->header_type == GESHI_HEADER_PRE) {
4125
+ return "<pre$attributes>$header<ol$ol_attributes>";
4126
+ } else if ($this->header_type == GESHI_HEADER_DIV ||
4127
+ $this->header_type == GESHI_HEADER_PRE_VALID) {
4128
+ return "<div$attributes>$header<ol$ol_attributes>";
4129
+ } else if ($this->header_type == GESHI_HEADER_PRE_TABLE) {
4130
+ return "<table$attributes>$header<tbody><tr class=\"li1\">";
4131
+ }
4132
+ } else {
4133
+ if ($this->header_type == GESHI_HEADER_PRE) {
4134
+ return "<pre$attributes>$header" .
4135
+ ($this->force_code_block ? '<div>' : '');
4136
+ } else {
4137
+ return "<div$attributes>$header" .
4138
+ ($this->force_code_block ? '<div>' : '');
4139
+ }
4140
+ }
4141
+ }
4142
+
4143
+ /**
4144
+ * Returns the footer for the code block.
4145
+ *
4146
+ * @return string The footer for the code block
4147
+ * @since 1.0.0
4148
+ * @access private
4149
+ */
4150
+ function footer() {
4151
+ $footer = $this->footer_content;
4152
+ if ($footer) {
4153
+ if ($this->header_type == GESHI_HEADER_PRE) {
4154
+ $footer = str_replace("\n", '', $footer);;
4155
+ }
4156
+ $footer = $this->replace_keywords($footer);
4157
+
4158
+ if ($this->use_classes) {
4159
+ $attr = ' class="foot"';
4160
+ } else {
4161
+ $attr = " style=\"{$this->footer_content_style}\"";
4162
+ }
4163
+ if ($this->header_type == GESHI_HEADER_PRE_TABLE && $this->line_numbers != GESHI_NO_LINE_NUMBERS) {
4164
+ $footer = "<tfoot><tr><td colspan=\"2\">$footer</td></tr></tfoot>";
4165
+ } else {
4166
+ $footer = "<div$attr>$footer</div>";
4167
+ }
4168
+ }
4169
+
4170
+ if (GESHI_HEADER_NONE == $this->header_type) {
4171
+ return ($this->line_numbers != GESHI_NO_LINE_NUMBERS) ? '</ol>' . $footer : $footer;
4172
+ }
4173
+
4174
+ if ($this->header_type == GESHI_HEADER_DIV || $this->header_type == GESHI_HEADER_PRE_VALID) {
4175
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
4176
+ return "</ol>$footer</div>";
4177
+ }
4178
+ return ($this->force_code_block ? '</div>' : '') .
4179
+ "$footer</div>";
4180
+ }
4181
+ elseif ($this->header_type == GESHI_HEADER_PRE_TABLE) {
4182
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
4183
+ return "</tr></tbody>$footer</table>";
4184
+ }
4185
+ return ($this->force_code_block ? '</div>' : '') .
4186
+ "$footer</div>";
4187
+ }
4188
+ else {
4189
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
4190
+ return "</ol>$footer</pre>";
4191
+ }
4192
+ return ($this->force_code_block ? '</div>' : '') .
4193
+ "$footer</pre>";
4194
+ }
4195
+ }
4196
+
4197
+ /**
4198
+ * Replaces certain keywords in the header and footer with
4199
+ * certain configuration values
4200
+ *
4201
+ * @param string The header or footer content to do replacement on
4202
+ * @return string The header or footer with replaced keywords
4203
+ * @since 1.0.2
4204
+ * @access private
4205
+ */
4206
+ function replace_keywords($instr) {
4207
+ $keywords = $replacements = array();
4208
+
4209
+ $keywords[] = '<TIME>';
4210
+ $keywords[] = '{TIME}';
4211
+ $replacements[] = $replacements[] = number_format($time = $this->get_time(), 3);
4212
+
4213
+ $keywords[] = '<LANGUAGE>';
4214
+ $keywords[] = '{LANGUAGE}';
4215
+ $replacements[] = $replacements[] = $this->language_data['LANG_NAME'];
4216
+
4217
+ $keywords[] = '<VERSION>';
4218
+ $keywords[] = '{VERSION}';
4219
+ $replacements[] = $replacements[] = GESHI_VERSION;
4220
+
4221
+ $keywords[] = '<SPEED>';
4222
+ $keywords[] = '{SPEED}';
4223
+ if ($time <= 0) {
4224
+ $speed = 'N/A';
4225
+ } else {
4226
+ $speed = strlen($this->source) / $time;
4227
+ if ($speed >= 1024) {
4228
+ $speed = sprintf("%.2f KB/s", $speed / 1024.0);
4229
+ } else {
4230
+ $speed = sprintf("%.0f B/s", $speed);
4231
+ }
4232
+ }
4233
+ $replacements[] = $replacements[] = $speed;
4234
+
4235
+ return str_replace($keywords, $replacements, $instr);
4236
+ }
4237
+
4238
+ /**
4239
+ * Secure replacement for PHP built-in function htmlspecialchars().
4240
+ *
4241
+ * See ticket #427 (http://wush.net/trac/wikka/ticket/427) for the rationale
4242
+ * for this replacement function.
4243
+ *
4244
+ * The INTERFACE for this function is almost the same as that for
4245
+ * htmlspecialchars(), with the same default for quote style; however, there
4246
+ * is no 'charset' parameter. The reason for this is as follows:
4247
+ *
4248
+ * The PHP docs say:
4249
+ * "The third argument charset defines character set used in conversion."
4250
+ *
4251
+ * I suspect PHP's htmlspecialchars() is working at the byte-value level and
4252
+ * thus _needs_ to know (or asssume) a character set because the special
4253
+ * characters to be replaced could exist at different code points in
4254
+ * different character sets. (If indeed htmlspecialchars() works at
4255
+ * byte-value level that goes some way towards explaining why the
4256
+ * vulnerability would exist in this function, too, and not only in
4257
+ * htmlentities() which certainly is working at byte-value level.)
4258
+ *
4259
+ * This replacement function however works at character level and should
4260
+ * therefore be "immune" to character set differences - so no charset
4261
+ * parameter is needed or provided. If a third parameter is passed, it will
4262
+ * be silently ignored.
4263
+ *
4264
+ * In the OUTPUT there is a minor difference in that we use '&#39;' instead
4265
+ * of PHP's '&#039;' for a single quote: this provides compatibility with
4266
+ * get_html_translation_table(HTML_SPECIALCHARS, ENT_QUOTES)
4267
+ * (see comment by mikiwoz at yahoo dot co dot uk on
4268
+ * http://php.net/htmlspecialchars); it also matches the entity definition
4269
+ * for XML 1.0
4270
+ * (http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_Special_characters).
4271
+ * Like PHP we use a numeric character reference instead of '&apos;' for the
4272
+ * single quote. For the other special characters we use the named entity
4273
+ * references, as PHP is doing.
4274
+ *
4275
+ * @author {@link http://wikkawiki.org/JavaWoman Marjolein Katsma}
4276
+ *
4277
+ * @license http://www.gnu.org/copyleft/lgpl.html
4278
+ * GNU Lesser General Public License
4279
+ * @copyright Copyright 2007, {@link http://wikkawiki.org/CreditsPage
4280
+ * Wikka Development Team}
4281
+ *
4282
+ * @access private
4283
+ * @param string $string string to be converted
4284
+ * @param integer $quote_style
4285
+ * - ENT_COMPAT: escapes &, <, > and double quote (default)
4286
+ * - ENT_NOQUOTES: escapes only &, < and >
4287
+ * - ENT_QUOTES: escapes &, <, >, double and single quotes
4288
+ * @return string converted string
4289
+ * @since 1.0.7.18
4290
+ */
4291
+ function hsc($string, $quote_style = ENT_COMPAT) {
4292
+ // init
4293
+ static $aTransSpecchar = array(
4294
+ '&' => '&amp;',
4295
+ '"' => '&quot;',
4296
+ '<' => '&lt;',
4297
+ '>' => '&gt;',
4298
+
4299
+ //This fix is related to SF#1923020, but has to be applied
4300
+ //regardless of actually highlighting symbols.
4301
+
4302
+ //Circumvent a bug with symbol highlighting
4303
+ //This is required as ; would produce undesirable side-effects if it
4304
+ //was not to be processed as an entity.
4305
+ ';' => '<SEMI>', // Force ; to be processed as entity
4306
+ '|' => '<PIPE>' // Force | to be processed as entity
4307
+ ); // ENT_COMPAT set
4308
+
4309
+ switch ($quote_style) {
4310
+ case ENT_NOQUOTES: // don't convert double quotes
4311
+ unset($aTransSpecchar['"']);
4312
+ break;
4313
+ case ENT_QUOTES: // convert single quotes as well
4314
+ $aTransSpecchar["'"] = '&#39;'; // (apos) htmlspecialchars() uses '&#039;'
4315
+ break;
4316
+ }
4317
+
4318
+ // return translated string
4319
+ return strtr($string, $aTransSpecchar);
4320
+ }
4321
+
4322
+ function _genCSSName($name){
4323
+ return (is_numeric($name[0]) ? '_' : '') . $name;
4324
+ }
4325
+
4326
+ /**
4327
+ * Returns a stylesheet for the highlighted code. If $economy mode
4328
+ * is true, we only return the stylesheet declarations that matter for
4329
+ * this code block instead of the whole thing
4330
+ *
4331
+ * @param boolean Whether to use economy mode or not
4332
+ * @return string A stylesheet built on the data for the current language
4333
+ * @since 1.0.0
4334
+ */
4335
+ function get_stylesheet($economy_mode = true) {
4336
+ // If there's an error, chances are that the language file
4337
+ // won't have populated the language data file, so we can't
4338
+ // risk getting a stylesheet...
4339
+ if ($this->error) {
4340
+ return '';
4341
+ }
4342
+
4343
+ //Check if the style rearrangements have been processed ...
4344
+ //This also does some preprocessing to check which style groups are useable ...
4345
+ if(!isset($this->language_data['NUMBERS_CACHE'])) {
4346
+ $this->build_style_cache();
4347
+ }
4348
+
4349
+ // First, work out what the selector should be. If there's an ID,
4350
+ // that should be used, the same for a class. Otherwise, a selector
4351
+ // of '' means that these styles will be applied anywhere
4352
+ if ($this->overall_id) {
4353
+ $selector = '#' . $this->_genCSSName($this->overall_id);
4354
+ } else {
4355
+ $selector = '.' . $this->_genCSSName($this->language);
4356
+ if ($this->overall_class) {
4357
+ $selector .= '.' . $this->_genCSSName($this->overall_class);
4358
+ }
4359
+ }
4360
+ $selector .= ' ';
4361
+
4362
+ // Header of the stylesheet
4363
+ if (!$economy_mode) {
4364
+ $stylesheet = "/**\n".
4365
+ " * GeSHi Dynamically Generated Stylesheet\n".
4366
+ " * --------------------------------------\n".
4367
+ " * Dynamically generated stylesheet for {$this->language}\n".
4368
+ " * CSS class: {$this->overall_class}, CSS id: {$this->overall_id}\n".
4369
+ " * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann\n" .
4370
+ " * (http://qbnz.com/highlighter/ and http://geshi.org/)\n".
4371
+ " * --------------------------------------\n".
4372
+ " */\n";
4373
+ } else {
4374
+ $stylesheet = "/**\n".
4375
+ " * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann\n" .
4376
+ " * (http://qbnz.com/highlighter/ and http://geshi.org/)\n".
4377
+ " */\n";
4378
+ }
4379
+
4380
+ // Set the <ol> to have no effect at all if there are line numbers
4381
+ // (<ol>s have margins that should be destroyed so all layout is
4382
+ // controlled by the set_overall_style method, which works on the
4383
+ // <pre> or <div> container). Additionally, set default styles for lines
4384
+ if (!$economy_mode || $this->line_numbers != GESHI_NO_LINE_NUMBERS) {
4385
+ //$stylesheet .= "$selector, {$selector}ol, {$selector}ol li {margin: 0;}\n";
4386
+ $stylesheet .= "$selector.de1, $selector.de2 {{$this->code_style}}\n";
4387
+ }
4388
+
4389
+ // Add overall styles
4390
+ // note: neglect economy_mode, empty styles are meaningless
4391
+ if ($this->overall_style != '') {
4392
+ $stylesheet .= "$selector {{$this->overall_style}}\n";
4393
+ }
4394
+
4395
+ // Add styles for links
4396
+ // note: economy mode does not make _any_ sense here
4397
+ // either the style is empty and thus no selector is needed
4398
+ // or the appropriate key is given.
4399
+ foreach ($this->link_styles as $key => $style) {
4400
+ if ($style != '') {
4401
+ switch ($key) {
4402
+ case GESHI_LINK:
4403
+ $stylesheet .= "{$selector}a:link {{$style}}\n";
4404
+ break;
4405
+ case GESHI_HOVER:
4406
+ $stylesheet .= "{$selector}a:hover {{$style}}\n";
4407
+ break;
4408
+ case GESHI_ACTIVE:
4409
+ $stylesheet .= "{$selector}a:active {{$style}}\n";
4410
+ break;
4411
+ case GESHI_VISITED:
4412
+ $stylesheet .= "{$selector}a:visited {{$style}}\n";
4413
+ break;
4414
+ }
4415
+ }
4416
+ }
4417
+
4418
+ // Header and footer
4419
+ // note: neglect economy_mode, empty styles are meaningless
4420
+ if ($this->header_content_style != '') {
4421
+ $stylesheet .= "$selector.head {{$this->header_content_style}}\n";
4422
+ }
4423
+ if ($this->footer_content_style != '') {
4424
+ $stylesheet .= "$selector.foot {{$this->footer_content_style}}\n";
4425
+ }
4426
+
4427
+ // Styles for important stuff
4428
+ // note: neglect economy_mode, empty styles are meaningless
4429
+ if ($this->important_styles != '') {
4430
+ $stylesheet .= "$selector.imp {{$this->important_styles}}\n";
4431
+ }
4432
+
4433
+ // Simple line number styles
4434
+ if ((!$economy_mode || $this->line_numbers != GESHI_NO_LINE_NUMBERS) && $this->line_style1 != '') {
4435
+ $stylesheet .= "{$selector}li, {$selector}.li1 {{$this->line_style1}}\n";
4436
+ }
4437
+ if ((!$economy_mode || $this->line_numbers != GESHI_NO_LINE_NUMBERS) && $this->table_linenumber_style != '') {
4438
+ $stylesheet .= "{$selector}.ln {{$this->table_linenumber_style}}\n";
4439
+ }
4440
+ // If there is a style set for fancy line numbers, echo it out
4441
+ if ((!$economy_mode || $this->line_numbers == GESHI_FANCY_LINE_NUMBERS) && $this->line_style2 != '') {
4442
+ $stylesheet .= "{$selector}.li2 {{$this->line_style2}}\n";
4443
+ }
4444
+
4445
+ // note: empty styles are meaningless
4446
+ foreach ($this->language_data['STYLES']['KEYWORDS'] as $group => $styles) {
4447
+ if ($styles != '' && (!$economy_mode ||
4448
+ (isset($this->lexic_permissions['KEYWORDS'][$group]) &&
4449
+ $this->lexic_permissions['KEYWORDS'][$group]))) {
4450
+ $stylesheet .= "$selector.kw$group {{$styles}}\n";
4451
+ }
4452
+ }
4453
+ foreach ($this->language_data['STYLES']['COMMENTS'] as $group => $styles) {
4454
+ if ($styles != '' && (!$economy_mode ||
4455
+ (isset($this->lexic_permissions['COMMENTS'][$group]) &&
4456
+ $this->lexic_permissions['COMMENTS'][$group]) ||
4457
+ (!empty($this->language_data['COMMENT_REGEXP']) &&
4458
+ !empty($this->language_data['COMMENT_REGEXP'][$group])))) {
4459
+ $stylesheet .= "$selector.co$group {{$styles}}\n";
4460
+ }
4461
+ }
4462
+ foreach ($this->language_data['STYLES']['ESCAPE_CHAR'] as $group => $styles) {
4463
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['ESCAPE_CHAR'])) {
4464
+ // NEW: since 1.0.8 we have to handle hardescapes
4465
+ if ($group === 'HARD') {
4466
+ $group = '_h';
4467
+ }
4468
+ $stylesheet .= "$selector.es$group {{$styles}}\n";
4469
+ }
4470
+ }
4471
+ foreach ($this->language_data['STYLES']['BRACKETS'] as $group => $styles) {
4472
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['BRACKETS'])) {
4473
+ $stylesheet .= "$selector.br$group {{$styles}}\n";
4474
+ }
4475
+ }
4476
+ foreach ($this->language_data['STYLES']['SYMBOLS'] as $group => $styles) {
4477
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['SYMBOLS'])) {
4478
+ $stylesheet .= "$selector.sy$group {{$styles}}\n";
4479
+ }
4480
+ }
4481
+ foreach ($this->language_data['STYLES']['STRINGS'] as $group => $styles) {
4482
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['STRINGS'])) {
4483
+ // NEW: since 1.0.8 we have to handle hardquotes
4484
+ if ($group === 'HARD') {
4485
+ $group = '_h';
4486
+ }
4487
+ $stylesheet .= "$selector.st$group {{$styles}}\n";
4488
+ }
4489
+ }
4490
+ foreach ($this->language_data['STYLES']['NUMBERS'] as $group => $styles) {
4491
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['NUMBERS'])) {
4492
+ $stylesheet .= "$selector.nu$group {{$styles}}\n";
4493
+ }
4494
+ }
4495
+ foreach ($this->language_data['STYLES']['METHODS'] as $group => $styles) {
4496
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['METHODS'])) {
4497
+ $stylesheet .= "$selector.me$group {{$styles}}\n";
4498
+ }
4499
+ }
4500
+ // note: neglect economy_mode, empty styles are meaningless
4501
+ foreach ($this->language_data['STYLES']['SCRIPT'] as $group => $styles) {
4502
+ if ($styles != '') {
4503
+ $stylesheet .= "$selector.sc$group {{$styles}}\n";
4504
+ }
4505
+ }
4506
+ foreach ($this->language_data['STYLES']['REGEXPS'] as $group => $styles) {
4507
+ if ($styles != '' && (!$economy_mode ||
4508
+ (isset($this->lexic_permissions['REGEXPS'][$group]) &&
4509
+ $this->lexic_permissions['REGEXPS'][$group]))) {
4510
+ if (is_array($this->language_data['REGEXPS'][$group]) &&
4511
+ array_key_exists(GESHI_CLASS, $this->language_data['REGEXPS'][$group])) {
4512
+ $stylesheet .= "$selector.";
4513
+ $stylesheet .= $this->language_data['REGEXPS'][$group][GESHI_CLASS];
4514
+ $stylesheet .= " {{$styles}}\n";
4515
+ } else {
4516
+ $stylesheet .= "$selector.re$group {{$styles}}\n";
4517
+ }
4518
+ }
4519
+ }
4520
+ // Styles for lines being highlighted extra
4521
+ if (!$economy_mode || (count($this->highlight_extra_lines)!=count($this->highlight_extra_lines_styles))) {
4522
+ $stylesheet .= "{$selector}.ln-xtra, {$selector}li.ln-xtra, {$selector}div.ln-xtra {{$this->highlight_extra_lines_style}}\n";
4523
+ }
4524
+ $stylesheet .= "{$selector}span.xtra { display:block; }\n";
4525
+ foreach ($this->highlight_extra_lines_styles as $lineid => $linestyle) {
4526
+ $stylesheet .= "{$selector}.lx$lineid, {$selector}li.lx$lineid, {$selector}div.lx$lineid {{$linestyle}}\n";
4527
+ }
4528
+
4529
+ return $stylesheet;
4530
+ }
4531
+
4532
+ /**
4533
+ * Get's the style that is used for the specified line
4534
+ *
4535
+ * @param int The line number information is requested for
4536
+ * @access private
4537
+ * @since 1.0.7.21
4538
+ */
4539
+ function get_line_style($line) {
4540
+ //$style = null;
4541
+ $style = null;
4542
+ if (isset($this->highlight_extra_lines_styles[$line])) {
4543
+ $style = $this->highlight_extra_lines_styles[$line];
4544
+ } else { // if no "extra" style assigned
4545
+ $style = $this->highlight_extra_lines_style;
4546
+ }
4547
+
4548
+ return $style;
4549
+ }
4550
+
4551
+ /**
4552
+ * this functions creates an optimized regular expression list
4553
+ * of an array of strings.
4554
+ *
4555
+ * Example:
4556
+ * <code>$list = array('faa', 'foo', 'foobar');
4557
+ * => string 'f(aa|oo(bar)?)'</code>
4558
+ *
4559
+ * @param $list array of (unquoted) strings
4560
+ * @param $regexp_delimiter your regular expression delimiter, @see preg_quote()
4561
+ * @return string for regular expression
4562
+ * @author Milian Wolff <mail@milianw.de>
4563
+ * @since 1.0.8
4564
+ * @access private
4565
+ */
4566
+ function optimize_regexp_list($list, $regexp_delimiter = '/') {
4567
+ $regex_chars = array('.', '\\', '+', '-', '*', '?', '[', '^', ']', '$',
4568
+ '(', ')', '{', '}', '=', '!', '<', '>', '|', ':', $regexp_delimiter);
4569
+ sort($list);
4570
+ $regexp_list = array('');
4571
+ $num_subpatterns = 0;
4572
+ $list_key = 0;
4573
+
4574
+ // the tokens which we will use to generate the regexp list
4575
+ $tokens = array();
4576
+ $prev_keys = array();
4577
+ // go through all entries of the list and generate the token list
4578
+ $cur_len = 0;
4579
+ for ($i = 0, $i_max = count($list); $i < $i_max; ++$i) {
4580
+ if ($cur_len > GESHI_MAX_PCRE_LENGTH) {
4581
+ // seems like the length of this pcre is growing exorbitantly
4582
+ $regexp_list[++$list_key] = $this->_optimize_regexp_list_tokens_to_string($tokens);
4583
+ $num_subpatterns = substr_count($regexp_list[$list_key], '(?:');
4584
+ $tokens = array();
4585
+ $cur_len = 0;
4586
+ }
4587
+ $level = 0;
4588
+ $entry = preg_quote((string) $list[$i], $regexp_delimiter);
4589
+ $pointer = &$tokens;
4590
+ // properly assign the new entry to the correct position in the token array
4591
+ // possibly generate smaller common denominator keys
4592
+ while (true) {
4593
+ // get the common denominator
4594
+ if (isset($prev_keys[$level])) {
4595
+ if ($prev_keys[$level] == $entry) {
4596
+ // this is a duplicate entry, skip it
4597
+ continue 2;
4598
+ }
4599
+ $char = 0;
4600
+ while (isset($entry[$char]) && isset($prev_keys[$level][$char])
4601
+ && $entry[$char] == $prev_keys[$level][$char]) {
4602
+ ++$char;
4603
+ }
4604
+ if ($char > 0) {
4605
+ // this entry has at least some chars in common with the current key
4606
+ if ($char == strlen($prev_keys[$level])) {
4607
+ // current key is totally matched, i.e. this entry has just some bits appended
4608
+ $pointer = &$pointer[$prev_keys[$level]];
4609
+ } else {
4610
+ // only part of the keys match
4611
+ $new_key_part1 = substr($prev_keys[$level], 0, $char);
4612
+ $new_key_part2 = substr($prev_keys[$level], $char);
4613
+
4614
+ if (in_array($new_key_part1[0], $regex_chars)
4615
+ || in_array($new_key_part2[0], $regex_chars)) {
4616
+ // this is bad, a regex char as first character
4617
+ $pointer[$entry] = array('' => true);
4618
+ array_splice($prev_keys, $level, count($prev_keys), $entry);
4619
+ $cur_len += strlen($entry);
4620
+ continue;
4621
+ } else {
4622
+ // relocate previous tokens
4623
+ $pointer[$new_key_part1] = array($new_key_part2 => $pointer[$prev_keys[$level]]);
4624
+ unset($pointer[$prev_keys[$level]]);
4625
+ $pointer = &$pointer[$new_key_part1];
4626
+ // recreate key index
4627
+ array_splice($prev_keys, $level, count($prev_keys), array($new_key_part1, $new_key_part2));
4628
+ $cur_len += strlen($new_key_part2);
4629
+ }
4630
+ }
4631
+ ++$level;
4632
+ $entry = substr($entry, $char);
4633
+ continue;
4634
+ }
4635
+ // else: fall trough, i.e. no common denominator was found
4636
+ }
4637
+ if ($level == 0 && !empty($tokens)) {
4638
+ // we can dump current tokens into the string and throw them away afterwards
4639
+ $new_entry = $this->_optimize_regexp_list_tokens_to_string($tokens);
4640
+ $new_subpatterns = substr_count($new_entry, '(?:');
4641
+ if (GESHI_MAX_PCRE_SUBPATTERNS && $num_subpatterns + $new_subpatterns > GESHI_MAX_PCRE_SUBPATTERNS) {
4642
+ $regexp_list[++$list_key] = $new_entry;
4643
+ $num_subpatterns = $new_subpatterns;
4644
+ } else {
4645
+ if (!empty($regexp_list[$list_key])) {
4646
+ $new_entry = '|' . $new_entry;
4647
+ }
4648
+ $regexp_list[$list_key] .= $new_entry;
4649
+ $num_subpatterns += $new_subpatterns;
4650
+ }
4651
+ $tokens = array();
4652
+ $cur_len = 0;
4653
+ }
4654
+ // no further common denominator found
4655
+ $pointer[$entry] = array('' => true);
4656
+ array_splice($prev_keys, $level, count($prev_keys), $entry);
4657
+
4658
+ $cur_len += strlen($entry);
4659
+ break;
4660
+ }
4661
+ unset($list[$i]);
4662
+ }
4663
+ // make sure the last tokens get converted as well
4664
+ $new_entry = $this->_optimize_regexp_list_tokens_to_string($tokens);
4665
+ if (GESHI_MAX_PCRE_SUBPATTERNS && $num_subpatterns + substr_count($new_entry, '(?:') > GESHI_MAX_PCRE_SUBPATTERNS) {
4666
+ if ( !empty($regexp_list[$list_key]) ) {
4667
+ ++$list_key;
4668
+ }
4669
+ $regexp_list[$list_key] = $new_entry;
4670
+ } else {
4671
+ if (!empty($regexp_list[$list_key])) {
4672
+ $new_entry = '|' . $new_entry;
4673
+ }
4674
+ $regexp_list[$list_key] .= $new_entry;
4675
+ }
4676
+ return $regexp_list;
4677
+ }
4678
+ /**
4679
+ * this function creates the appropriate regexp string of an token array
4680
+ * you should not call this function directly, @see $this->optimize_regexp_list().
4681
+ *
4682
+ * @param &$tokens array of tokens
4683
+ * @param $recursed bool to know wether we recursed or not
4684
+ * @return string
4685
+ * @author Milian Wolff <mail@milianw.de>
4686
+ * @since 1.0.8
4687
+ * @access private
4688
+ */
4689
+ function _optimize_regexp_list_tokens_to_string(&$tokens, $recursed = false) {
4690
+ $list = '';
4691
+ foreach ($tokens as $token => $sub_tokens) {
4692
+ $list .= $token;
4693
+ $close_entry = isset($sub_tokens['']);
4694
+ unset($sub_tokens['']);
4695
+ if (!empty($sub_tokens)) {
4696
+ $list .= '(?:' . $this->_optimize_regexp_list_tokens_to_string($sub_tokens, true) . ')';
4697
+ if ($close_entry) {
4698
+ // make sub_tokens optional
4699
+ $list .= '?';
4700
+ }
4701
+ }
4702
+ $list .= '|';
4703
+ }
4704
+ if (!$recursed) {
4705
+ // do some optimizations
4706
+ // common trailing strings
4707
+ // BUGGY!
4708
+ //$list = preg_replace_callback('#(?<=^|\:|\|)\w+?(\w+)(?:\|.+\1)+(?=\|)#', create_function(
4709
+ // '$matches', 'return "(?:" . preg_replace("#" . preg_quote($matches[1], "#") . "(?=\||$)#", "", $matches[0]) . ")" . $matches[1];'), $list);
4710
+ // (?:p)? => p?
4711
+ $list = preg_replace('#\(\?\:(.)\)\?#', '\1?', $list);
4712
+ // (?:a|b|c|d|...)? => [abcd...]?
4713
+ // TODO: a|bb|c => [ac]|bb
4714
+ static $callback_2;
4715
+ if (!isset($callback_2)) {
4716
+ $callback_2 = create_function('$matches', 'return "[" . str_replace("|", "", $matches[1]) . "]";');
4717
+ }
4718
+ $list = preg_replace_callback('#\(\?\:((?:.\|)+.)\)#', $callback_2, $list);
4719
+ }
4720
+ // return $list without trailing pipe
4721
+ return substr($list, 0, -1);
4722
+ }
4723
+ } // End Class GeSHi
4724
+
4725
+
4726
+ if (!function_exists('geshi_highlight')) {
4727
+ /**
4728
+ * Easy way to highlight stuff. Behaves just like highlight_string
4729
+ *
4730
+ * @param string The code to highlight
4731
+ * @param string The language to highlight the code in
4732
+ * @param string The path to the language files. You can leave this blank if you need
4733
+ * as from version 1.0.7 the path should be automatically detected
4734
+ * @param boolean Whether to return the result or to echo
4735
+ * @return string The code highlighted (if $return is true)
4736
+ * @since 1.0.2
4737
+ */
4738
+ function geshi_highlight($string, $language, $path = null, $return = false) {
4739
+ $geshi = new GeSHi($string, $language, $path);
4740
+ $geshi->set_header_type(GESHI_HEADER_NONE);
4741
+
4742
+ if ($return) {
4743
+ return '<code>' . $geshi->parse_code() . '</code>';
4744
+ }
4745
+
4746
+ echo '<code>' . $geshi->parse_code() . '</code>';
4747
+
4748
+ if ($geshi->error()) {
4749
+ return false;
4750
+ }
4751
+ return true;
4752
+ }
4753
+ }
4754
+
4755
+ ?>
lib/geshi/apache.php ADDED
@@ -0,0 +1,483 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*************************************************************************************
3
+ * apache.php
4
+ * ----------
5
+ * Author: Tux (tux@inmail.cz)
6
+ * Copyright: (c) 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
7
+ * Release Version: 1.0.8.10
8
+ * Date Started: 2004/29/07
9
+ *
10
+ * Apache language file for GeSHi.
11
+ * Words are from SciTe configuration file
12
+ *
13
+ * CHANGES
14
+ * -------
15
+ * 2008/17/06 (1.0.8)
16
+ * - Added support for apache configuration sections (milian)
17
+ * - Added missing php keywords (milian)
18
+ * - Added some more keywords
19
+ * - Disabled highlighting of brackets by default
20
+ * 2004/11/27 (1.0.2)
21
+ * - Added support for multiple object splitters
22
+ * 2004/10/27 (1.0.1)
23
+ * - Added support for URLs
24
+ * 2004/08/05 (1.0.0)
25
+ * - First Release
26
+ *
27
+ * TODO (updated 2004/07/29)
28
+ * -------------------------
29
+ *
30
+ *************************************************************************************
31
+ *
32
+ * This file is part of GeSHi.
33
+ *
34
+ * GeSHi is free software; you can redistribute it and/or modify
35
+ * it under the terms of the GNU General Public License as published by
36
+ * the Free Software Foundation; either version 2 of the License, or
37
+ * (at your option) any later version.
38
+ *
39
+ * GeSHi is distributed in the hope that it will be useful,
40
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
41
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
42
+ * GNU General Public License for more details.
43
+ *
44
+ * You should have received a copy of the GNU General Public License
45
+ * along with GeSHi; if not, write to the Free Software
46
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
47
+ *
48
+ ************************************************************************************/
49
+
50
+ $language_data = array (
51
+ 'LANG_NAME' => 'Apache configuration',
52
+ 'COMMENT_SINGLE' => array(1 => '#'),
53
+ 'COMMENT_MULTI' => array(),
54
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
55
+ 'QUOTEMARKS' => array("'", '"'),
56
+ 'ESCAPE_CHAR' => '\\',
57
+ 'KEYWORDS' => array(
58
+ /*keywords*/
59
+ 1 => array(
60
+ //core.c
61
+ 'AcceptFilter','AcceptPathInfo','AccessConfig','AccessFileName',
62
+ 'AddDefaultCharset','AddOutputFilterByType','AllowEncodedSlashes',
63
+ 'AllowOverride','AuthName','AuthType','ContentDigest',
64
+ 'CoreDumpDirectory','DefaultType','DocumentRoot','EnableMMAP',
65
+ 'EnableSendfile','ErrorDocument','ErrorLog','FileETag','ForceType',
66
+ 'HostnameLookups','Include','LimitInternalRecursion',
67
+ 'LimitRequestBody','LimitRequestFields','LimitRequestFieldsize',
68
+ 'LimitRequestLine','LimitXMLRequestBody','LogLevel','MaxMemFree',
69
+ 'MaxRequestsPerChild','NameVirtualHost','Options','PidFile','Port',
70
+ 'Protocol','Require','RLimitCPU','RLimitMEM','RLimitNPROC',
71
+ 'Satisfy','ScoreBoardFile','ServerAdmin','ServerAlias','ServerName',
72
+ 'ServerPath','ServerRoot','ServerSignature','ServerTokens',
73
+ 'SetHandler','SetInputFilter','SetOutputFilter','ThreadStackSize',
74
+ 'Timeout','TraceEnable','UseCanonicalName',
75
+ 'UseCanonicalPhysicalPort',
76
+
77
+ //http_core.c
78
+ 'KeepAlive','KeepAliveTimeout','MaxKeepAliveRequests',
79
+
80
+ //mod_actions.c
81
+ 'Action','Script',
82
+
83
+ //mod_alias.c
84
+ 'Alias','AliasMatch','Redirect','RedirectMatch','RedirectPermanent',
85
+ 'RedirectTemp','ScriptAlias','ScriptAliasMatch',
86
+
87
+ //mod_asis.c
88
+
89
+ //mod_auth_basic.c
90
+ 'AuthBasicAuthoritative','AuthBasicProvider',
91
+
92
+ //mod_auth_digest.c
93
+ 'AuthDigestAlgorithm','AuthDigestDomain','AuthDigestNcCheck',
94
+ 'AuthDigestNonceFormat','AuthDigestNonceLifetime',
95
+ 'AuthDigestProvider','AuthDigestQop','AuthDigestShmemSize',
96
+
97
+ //mod_authn_alias.c
98
+
99
+ //mod_authn_anon.c
100
+ 'Anonymous','Anonymous_LogEmail','Anonymous_MustGiveEmail',
101
+ 'Anonymous_NoUserId','Anonymous_VerifyEmail',
102
+
103
+ //mod_authn_dbd.c
104
+ 'AuthDBDUserPWQuery','AuthDBDUserRealmQuery',
105
+
106
+ //mod_authn_dbm.c
107
+ 'AuthDBMType','AuthDBMUserFile',
108
+
109
+ //mod_authn_default.c
110
+ 'AuthDefaultAuthoritative',
111
+
112
+ //mod_authn_file.c
113
+ 'AuthUserFile',
114
+
115
+ //mod_authnz_ldap.c
116
+ 'AuthLDAPBindDN','AuthLDAPBindPassword','AuthLDAPCharsetConfig',
117
+ 'AuthLDAPCompareDNOnServer','AuthLDAPDereferenceAliases',
118
+ 'AuthLDAPGroupAttribute','AuthLDAPGroupAttributeIsDN',
119
+ 'AuthLDAPRemoteUserAttribute','AuthLDAPRemoteUserIsDN',
120
+ 'AuthLDAPURL','AuthzLDAPAuthoritative',
121
+
122
+ //mod_authz_dbm.c
123
+ 'AuthDBMGroupFile','AuthzDBMAuthoritative','AuthzDBMType',
124
+
125
+ //mod_authz_default.c
126
+ 'AuthzDefaultAuthoritative',
127
+
128
+ //mod_authz_groupfile.c
129
+ 'AuthGroupFile','AuthzGroupFileAuthoritative',
130
+
131
+ //mod_authz_host.c
132
+ 'Allow','Deny','Order',
133
+
134
+ //mod_authz_owner.c
135
+ 'AuthzOwnerAuthoritative',
136
+
137
+ //mod_authz_svn.c
138
+ 'AuthzForceUsernameCase','AuthzSVNAccessFile','AuthzSVNAnonymous',
139
+ 'AuthzSVNAuthoritative','AuthzSVNNoAuthWhenAnonymousAllowed',
140
+
141
+ //mod_authz_user.c
142
+ 'AuthzUserAuthoritative',
143
+
144
+ //mod_autoindex.c
145
+ 'AddAlt','AddAltByEncoding','AddAltByType','AddDescription',
146
+ 'AddIcon','AddIconByEncoding','AddIconByType','DefaultIcon',
147
+ 'FancyIndexing','HeaderName','IndexHeadInsert','IndexIgnore',
148
+ 'IndexOptions','IndexOrderDefault','IndexStyleSheet','ReadmeName',
149
+
150
+ //mod_bt.c
151
+ 'Tracker','TrackerDetailURL','TrackerFlags','TrackerHashMaxAge',
152
+ 'TrackerHashMinAge','TrackerHashWatermark','TrackerHome',
153
+ 'TrackerReturnInterval','TrackerReturnMax',
154
+ 'TrackerReturnPeerFactor','TrackerReturnPeers','TrackerRootInclude',
155
+ 'TrackerStyleSheet',
156
+
157
+ //mod_bw.c
158
+ 'BandWidth','BandWidthError','BandWidthModule','BandWidthPacket',
159
+ 'ForceBandWidthModule','LargeFileLimit','MaxConnection',
160
+ 'MinBandWidth',
161
+
162
+ //mod_cache.c
163
+ 'CacheDefaultExpire','CacheDisable','CacheEnable',
164
+ 'CacheIgnoreCacheControl','CacheIgnoreHeaders',
165
+ 'CacheIgnoreNoLastMod','CacheIgnoreQueryString',
166
+ 'CacheLastModifiedFactor','CacheMaxExpire','CacheStoreNoStore',
167
+ 'CacheStorePrivate',
168
+
169
+ //mod_cern_meta.c
170
+ 'MetaDir','MetaFiles','MetaSuffix',
171
+
172
+ //mod_cgi.c
173
+ 'ScriptLog','ScriptLogBuffer','ScriptLogLength',
174
+
175
+ //mod_charset_lite.c
176
+ 'CharsetDefault','CharsetOptions','CharsetSourceEnc',
177
+
178
+ //mod_dav.c
179
+ 'DAV','DAVDepthInfinity','DAVMinTimeout',
180
+
181
+ //mod_dav_fs.c
182
+ 'DAVLockDB',
183
+
184
+ //mod_dav_lock.c
185
+ 'DAVGenericLockDB',
186
+
187
+ //mod_dav_svn.c
188
+ 'SVNActivitiesDB','SVNAllowBulkUpdates','SVNAutoversioning',
189
+ 'SVNIndexXSLT','SVNListParentPath','SVNMasterURI','SVNParentPath',
190
+ 'SVNPath','SVNPathAuthz','SVNReposName','SVNSpecialURI',
191
+
192
+ //mod_dbd.c
193
+ 'DBDExptime','DBDKeep','DBDMax','DBDMin','DBDParams','DBDPersist',
194
+ 'DBDPrepareSQL','DBDriver',
195
+
196
+ //mod_deflate.c
197
+ 'DeflateBufferSize','DeflateCompressionLevel','DeflateFilterNote',
198
+ 'DeflateMemLevel','DeflateWindowSize',
199
+
200
+ //mod_dir.c
201
+ 'DirectoryIndex','DirectorySlash',
202
+
203
+ //mod_disk_cache.c
204
+ 'CacheDirLength','CacheDirLevels','CacheMaxFileSize',
205
+ 'CacheMinFileSize','CacheRoot',
206
+
207
+ //mod_dumpio.c
208
+ 'DumpIOInput','DumpIOLogLevel','DumpIOOutput',
209
+
210
+ //mod_env.c
211
+ 'PassEnv','SetEnv','UnsetEnv',
212
+
213
+ //mod_expires.c
214
+ 'ExpiresActive','ExpiresByType','ExpiresDefault',
215
+
216
+ //mod_ext_filter.c
217
+ 'ExtFilterDefine','ExtFilterOptions',
218
+
219
+ //mod_file_cache.c
220
+ 'cachefile','mmapfile',
221
+
222
+ //mod_filter.c
223
+ 'FilterChain','FilterDeclare','FilterProtocol','FilterProvider',
224
+ 'FilterTrace',
225
+
226
+ //mod_gnutls.c
227
+ 'GnuTLSCache','GnuTLSCacheTimeout','GnuTLSCertificateFile',
228
+ 'GnuTLSKeyFile','GnuTLSPGPCertificateFile','GnuTLSPGPKeyFile',
229
+ 'GnuTLSClientVerify','GnuTLSClientCAFile','GnuTLSPGPKeyringFile',
230
+ 'GnuTLSEnable','GnuTLSDHFile','GnuTLSRSAFile','GnuTLSSRPPasswdFile',
231
+ 'GnuTLSSRPPasswdConfFile','GnuTLSPriorities',
232
+ 'GnuTLSExportCertificates',
233
+
234
+ //mod_headers.c
235
+ 'Header','RequestHeader',
236
+
237
+ //mod_imagemap.c
238
+ 'ImapBase','ImapDefault','ImapMenu',
239
+
240
+ //mod_include.c
241
+ 'SSIAccessEnable','SSIEndTag','SSIErrorMsg','SSIStartTag',
242
+ 'SSITimeFormat','SSIUndefinedEcho','XBitHack',
243
+
244
+ //mod_ident.c
245
+ 'IdentityCheck','IdentityCheckTimeout',
246
+
247
+ //mod_info.c
248
+ 'AddModuleInfo',
249
+
250
+ //mod_isapi.c
251
+ 'ISAPIAppendLogToErrors','ISAPIAppendLogToQuery','ISAPICacheFile',
252
+ 'ISAPIFakeAsync','ISAPILogNotSupported','ISAPIReadAheadBuffer',
253
+
254
+ //mod_log_config.c
255
+ 'BufferedLogs','CookieLog','CustomLog','LogFormat','TransferLog',
256
+
257
+ //mod_log_forensic.c
258
+ 'ForensicLog',
259
+
260
+ //mod_log_rotate.c
261
+ 'RotateInterval','RotateLogs','RotateLogsLocalTime',
262
+
263
+ //mod_logio.c
264
+
265
+ //mod_mem_cache.c
266
+ 'MCacheMaxObjectCount','MCacheMaxObjectSize',
267
+ 'MCacheMaxStreamingBuffer','MCacheMinObjectSize',
268
+ 'MCacheRemovalAlgorithm','MCacheSize',
269
+
270
+ //mod_mime.c
271
+ 'AddCharset','AddEncoding','AddHandler','AddInputFilter',
272
+ 'AddLanguage','AddOutputFilter','AddType','DefaultLanguage',
273
+ 'ModMimeUsePathInfo','MultiviewsMatch','RemoveCharset',
274
+ 'RemoveEncoding','RemoveHandler','RemoveInputFilter',
275
+ 'RemoveLanguage','RemoveOutputFilter','RemoveType','TypesConfig',
276
+
277
+ //mod_mime_magic.c
278
+ 'MimeMagicFile',
279
+
280
+ //mod_negotiation.c
281
+ 'CacheNegotiatedDocs','ForceLanguagePriority','LanguagePriority',
282
+
283
+ //mod_php5.c
284
+ 'php_admin_flag','php_admin_value','php_flag','php_value',
285
+ 'PHPINIDir',
286
+
287
+ //mod_proxy.c
288
+ 'AllowCONNECT','BalancerMember','NoProxy','ProxyBadHeader',
289
+ 'ProxyBlock','ProxyDomain','ProxyErrorOverride',
290
+ 'ProxyFtpDirCharset','ProxyIOBufferSize','ProxyMaxForwards',
291
+ 'ProxyPass','ProxyPassInterpolateEnv','ProxyPassMatch',
292
+ 'ProxyPassReverse','ProxyPassReverseCookieDomain',
293
+ 'ProxyPassReverseCookiePath','ProxyPreserveHost',
294
+ 'ProxyReceiveBufferSize','ProxyRemote','ProxyRemoteMatch',
295
+ 'ProxyRequests','ProxySet','ProxyStatus','ProxyTimeout','ProxyVia',
296
+
297
+ //mod_proxy_ajp.c
298
+
299
+ //mod_proxy_balancer.c
300
+
301
+ //mod_proxy_connect.c
302
+
303
+ //mod_proxy_ftp.c
304
+
305
+ //mod_proxy_http.c
306
+
307
+ //mod_rewrite.c
308
+ 'RewriteBase','RewriteCond','RewriteEngine','RewriteLock',
309
+ 'RewriteLog','RewriteLogLevel','RewriteMap','RewriteOptions',
310
+ 'RewriteRule',
311
+
312
+ //mod_setenvif.c
313
+ 'BrowserMatch','BrowserMatchNoCase','SetEnvIf','SetEnvIfNoCase',
314
+
315
+ //mod_so.c
316
+ 'LoadFile','LoadModule',
317
+
318
+ //mod_speling.c
319
+ 'CheckCaseOnly','CheckSpelling',
320
+
321
+ //mod_ssl.c
322
+ 'SSLCACertificateFile','SSLCACertificatePath','SSLCADNRequestFile',
323
+ 'SSLCADNRequestPath','SSLCARevocationFile','SSLCARevocationPath',
324
+ 'SSLCertificateChainFile','SSLCertificateFile',
325
+ 'SSLCertificateKeyFile','SSLCipherSuite','SSLCryptoDevice',
326
+ 'SSLEngine','SSLHonorCipherOrder','SSLMutex','SSLOptions',
327
+ 'SSLPassPhraseDialog','SSLProtocol','SSLProxyCACertificateFile',
328
+ 'SSLProxyCACertificatePath','SSLProxyCARevocationFile',
329
+ 'SSLProxyCARevocationPath','SSLProxyCipherSuite','SSLProxyEngine',
330
+ 'SSLProxyMachineCertificateFile','SSLProxyMachineCertificatePath',
331
+ 'SSLProxyProtocol','SSLProxyVerify','SSLProxyVerifyDepth',
332
+ 'SSLRandomSeed','SSLRenegBufferSize','SSLRequire','SSLRequireSSL',
333
+ 'SSLSessionCache','SSLSessionCacheTimeout','SSLUserName',
334
+ 'SSLVerifyClient','SSLVerifyDepth',
335
+
336
+ //mod_status.c
337
+ 'ExtendedStatus','SeeRequestTail',
338
+
339
+ //mod_substitute.c
340
+ 'Substitute',
341
+
342
+ //mod_suexec.c
343
+ 'SuexecUserGroup',
344
+
345
+ //mod_unique_id.c
346
+
347
+ //mod_upload_progress
348
+ 'ReportUploads', 'TrackUploads', 'UploadProgressSharedMemorySize',
349
+
350
+ //mod_userdir.c
351
+ 'UserDir',
352
+
353
+ //mod_usertrack.c
354
+ 'CookieDomain','CookieExpires','CookieName','CookieStyle',
355
+ 'CookieTracking',
356
+
357
+ //mod_version.c
358
+
359
+ //mod_vhost_alias.c
360
+ 'VirtualDocumentRoot','VirtualDocumentRootIP',
361
+ 'VirtualScriptAlias','VirtualScriptAliasIP',
362
+
363
+ //mod_view.c
364
+ 'ViewEnable',
365
+
366
+ //mod_win32.c
367
+ 'ScriptInterpreterSource',
368
+
369
+ //mpm_winnt.c
370
+ 'Listen','ListenBacklog','ReceiveBufferSize','SendBufferSize',
371
+ 'ThreadLimit','ThreadsPerChild','Win32DisableAcceptEx',
372
+
373
+ //mpm_common.c
374
+ 'AcceptMutex','AddModule','ClearModuleList','EnableExceptionHook',
375
+ 'Group','LockFile','MaxClients','MaxSpareServers','MaxSpareThreads',
376
+ 'MinSpareServers','MinSpareThreads','ServerLimit','StartServers',
377
+ 'StartThreads','User',
378
+
379
+ //util_ldap.c
380
+ 'LDAPCacheEntries','LDAPCacheTTL','LDAPConnectionTimeout',
381
+ 'LDAPOpCacheEntries','LDAPOpCacheTTL','LDAPSharedCacheFile',
382
+ 'LDAPSharedCacheSize','LDAPTrustedClientCert',
383
+ 'LDAPTrustedGlobalCert','LDAPTrustedMode','LDAPVerifyServerCert',
384
+
385
+ //Unknown Mods ...
386
+ 'AgentLog','BindAddress','bs2000account','CacheForceCompletion',
387
+ 'CacheGCInterval','CacheSize','NoCache','qsc','RefererIgnore',
388
+ 'RefererLog','Resourceconfig','ServerType','SingleListen'
389
+ ),
390
+ /*keywords 2*/
391
+ 2 => array(
392
+ 'all','on','off','standalone','inetd','indexes',
393
+ 'force-response-1.0','downgrade-1.0','nokeepalive',
394
+ 'includes','followsymlinks','none',
395
+ 'x-compress','x-gzip'
396
+ ),
397
+ /*keywords 3*/
398
+ 3 => array(
399
+ //core.c
400
+ 'Directory','DirectoryMatch','Files','FilesMatch','IfDefine',
401
+ 'IfModule','Limit','LimitExcept','Location','LocationMatch',
402
+ 'VirtualHost',
403
+
404
+ //mod_authn_alias.c
405
+ 'AuthnProviderAlias',
406
+
407
+ //mod_proxy.c
408
+ 'Proxy','ProxyMatch',
409
+
410
+ //mod_version.c
411
+ 'IfVersion'
412
+ )
413
+ ),
414
+ 'SYMBOLS' => array(
415
+ '+', '-'
416
+ ),
417
+ 'CASE_SENSITIVE' => array(
418
+ GESHI_COMMENTS => false,
419
+ 1 => false,
420
+ 2 => false,
421
+ 3 => false,
422
+ ),
423
+ 'STYLES' => array(
424
+ 'KEYWORDS' => array(
425
+ 1 => 'color: #00007f;',
426
+ 2 => 'color: #0000ff;',
427
+ 3 => 'color: #000000; font-weight:bold;',
428
+ ),
429
+ 'COMMENTS' => array(
430
+ 1 => 'color: #adadad; font-style: italic;',
431
+ ),
432
+ 'ESCAPE_CHAR' => array(
433
+ 0 => 'color: #000099; font-weight: bold;'
434
+ ),
435
+ 'BRACKETS' => array(
436
+ 0 => 'color: #339933;'
437
+ ),
438
+ 'STRINGS' => array(
439
+ 0 => 'color: #7f007f;'
440
+ ),
441
+ 'NUMBERS' => array(
442
+ 0 => 'color: #ff0000;'
443
+ ),
444
+ 'METHODS' => array(
445
+ ),
446
+ 'SYMBOLS' => array(
447
+ 0 => 'color: #008000;'
448
+ ),
449
+ 'REGEXPS' => array(
450
+ ),
451
+ 'SCRIPT' => array(
452
+ )
453
+ ),
454
+ 'URLS' => array(
455
+ 1 => '',
456
+ 2 => '',
457
+ 3 => ''
458
+ ),
459
+ 'OOLANG' => false,
460
+ 'OBJECT_SPLITTERS' => array(
461
+ ),
462
+ 'REGEXPS' => array(
463
+ ),
464
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
465
+ 'SCRIPT_DELIMITERS' => array(
466
+ ),
467
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
468
+ ),
469
+ 'PARSER_CONTROL' => array(
470
+ 'ENABLE_FLAGS' => array(
471
+ 'BRACKETS' => GESHI_NEVER,
472
+ 'SYMBOLS' => GESHI_NEVER
473
+ ),
474
+ 'KEYWORDS' => array(
475
+ 3 => array(
476
+ 'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
477
+ 'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
478
+ )
479
+ )
480
+ )
481
+ );
482
+
483
+ ?>
lib/geshi/bash.php ADDED
@@ -0,0 +1,440 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*************************************************************************************
3
+ * bash.php
4
+ * --------
5
+ * Author: Andreas Gohr (andi@splitbrain.org)
6
+ * Copyright: (c) 2004 Andreas Gohr, Nigel McNie (http://qbnz.com/highlighter)
7
+ * Release Version: 1.0.8.10
8
+ * Date Started: 2004/08/20
9
+ *
10
+ * BASH language file for GeSHi.
11
+ *
12
+ * CHANGES
13
+ * -------
14
+ * 2008/06/21 (1.0.8)
15
+ * - Added loads of keywords and commands of GNU/Linux
16
+ * - Added support for parameters starting with a dash
17
+ * 2008/05/23 (1.0.7.22)
18
+ * - Added description of extra language features (SF#1970248)
19
+ * 2007/09/05 (1.0.7.21)
20
+ * - PARSER_CONTROL patch using SF #1788408 (BenBE)
21
+ * 2007/06/11 (1.0.7.20)
22
+ * - Added a lot of keywords (BenBE / Jan G)
23
+ * 2004/11/27 (1.0.2)
24
+ * - Added support for multiple object splitters
25
+ * 2004/10/27 (1.0.1)
26
+ * - Added support for URLs
27
+ * 2004/08/20 (1.0.0)
28
+ * - First Release
29
+ *
30
+ * TODO (updated 2004/11/27)
31
+ * -------------------------
32
+ * * Get symbols working
33
+ * * Highlight builtin vars
34
+ *
35
+ *************************************************************************************
36
+ *
37
+ * This file is part of GeSHi.
38
+ *
39
+ * GeSHi is free software; you can redistribute it and/or modify
40
+ * it under the terms of the GNU General Public License as published by
41
+ * the Free Software Foundation; either version 2 of the License, or
42
+ * (at your option) any later version.
43
+ *
44
+ * GeSHi is distributed in the hope that it will be useful,
45
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
46
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
47
+ * GNU General Public License for more details.
48
+ *
49
+ * You should have received a copy of the GNU General Public License
50
+ * along with GeSHi; if not, write to the Free Software
51
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
52
+ *
53
+ ************************************************************************************/
54
+
55
+ $language_data = array (
56
+ 'LANG_NAME' => 'Bash',
57
+ // Bash DOES have single line comments with # markers. But bash also has
58
+ // the $# variable, so comments need special handling (see sf.net
59
+ // 1564839)
60
+ 'COMMENT_SINGLE' => array('#'),
61
+ 'COMMENT_MULTI' => array(),
62
+ 'COMMENT_REGEXP' => array(
63
+ //Variables
64
+ 1 => "/\\$\\{[^\\n\\}]*?\\}/i",
65
+ //BASH-style Heredoc
66
+ 2 => '/<<-?\s*?(\'?)([a-zA-Z0-9]+)\1\\n.*\\n\\2(?![a-zA-Z0-9])/siU',
67
+ //Escaped String Starters
68
+ 3 => "/\\\\['\"]/siU",
69
+ // Single-Line Shell usage: Hide the prompt at the beginning
70
+ /* 4 => "/\A(?!#!)\s*(?>[\w:@\\/\\-\\._~]*[$#]\s?)?(?=[^\n]+\n?\Z)|^(?!#!)(\w+@)?[\w\\-\\.]+(:~?)[\w\\/\\-\\._]*?[$#]\s?/ms" */
71
+ 4 => "/\A(?!#!)(?:(?>[\w:@\\/\\-\\._~]*)[$#]\s?)(?=(?>[^\n]+)\n?\Z)|^(?!#!)(?:\w+@)?(?>[\w\\-\\.]+)(?>:~?[\w\\/\\-\\._]*?)?[$#]\s?/sm"
72
+ ),
73
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
74
+ 'QUOTEMARKS' => array('"'),
75
+ 'HARDQUOTE' => array("'", "'"),
76
+ 'HARDESCAPE' => array("\'"),
77
+ 'ESCAPE_CHAR' => '',
78
+ 'ESCAPE_REGEXP' => array(
79
+ //Simple Single Char Escapes
80
+ 1 => "#\\\\[nfrtv\\$\\\"\n]#i",
81
+ // $var
82
+ 2 => "#\\$[a-z_][a-z0-9_]*#i",
83
+ // ${...}
84
+ 3 => "/\\$\\{[^\\n\\}]*?\\}/i",
85
+ // $(...)
86
+ 4 => "/\\$\\([^\\n\\)]*?\\)/i",
87
+ // `...`
88
+ 5 => "/`[^`]*`/"
89
+ ),
90
+ 'KEYWORDS' => array(
91
+ 1 => array(
92
+ 'case', 'do', 'done', 'elif', 'else', 'esac', 'fi', 'for', 'function',
93
+ 'if', 'in', 'select', 'set', 'then', 'until', 'while', 'time'
94
+ ),
95
+ 2 => array(
96
+ 'aclocal', 'aconnect', 'apachectl', 'apache2ctl', 'aplay', 'apm',
97
+ 'apmsleep', 'apropos', 'apt-cache', 'apt-cdrom', 'apt-config',
98
+ 'apt-file', 'apt-ftparchive', 'apt-get', 'apt-key', 'apt-listbugs',
99
+ 'apt-listchanges', 'apt-mark', 'apt-mirror', 'apt-sortpkgs',
100
+ 'apt-src', 'apticron', 'aptitude', 'aptsh', 'apxs', 'apxs2', 'ar',
101
+ 'arch', 'arecord', 'as', 'as86', 'ash', 'autoconf', 'autoheader',
102
+ 'automake', 'awk',
103
+
104
+ 'apachectl start', 'apachectl stop', 'apachectl restart',
105
+ 'apachectl graceful', 'apachectl graceful-stop',
106
+ 'apachectl configtest', 'apachectl status', 'apachectl fullstatus',
107
+ 'apachectl help', 'apache2ctl start', 'apache2ctl stop',
108
+ 'apache2ctl restart', 'apache2ctl graceful',
109
+ 'apache2ctl graceful-stop', 'apache2ctl configtest',
110
+ 'apache2ctl status', 'apache2ctl fullstatus', 'apache2ctl help',
111
+
112
+ 'apt-cache add', 'apt-cache depends', 'apt-cache dotty',
113
+ 'apt-cache dump', 'apt-cache dumpavail', 'apt-cache gencaches',
114
+ 'apt-cache pkgnames', 'apt-cache policy', 'apt-cache rdepends',
115
+ 'apt-cache search', 'apt-cache show', 'apt-cache showauto',
116
+ 'apt-cache showpkg', 'apt-cache showsrc', 'apt-cache stats',
117
+ 'apt-cache unmet', 'apt-cache xvcg', 'apt-cdrom add',
118
+ 'apt-cdrom ident', 'apt-config dump', 'apt-config shell',
119
+ 'apt-file find', 'apt-file list', 'apt-file purge',
120
+ 'apt-file search', 'apt-file shot', 'apt-file update',
121
+ 'apt-get autoclean', 'apt-get autoremove', 'apt-get build-dep',
122
+ 'apt-get check', 'apt-get clean', 'apt-get dist-upgrade',
123
+ 'apt-get dselect-upgrade', 'apt-get install', 'apt-get markauto',
124
+ 'apt-get purge', 'apt-get remove', 'apt-get source',
125
+ 'apt-get unmarkauto', 'apt-get update', 'apt-get upgrade',
126
+ 'apt-key add', 'apt-key adv', 'apt-key del', 'apt-key export',
127
+ 'apt-key exportall', 'apt-key finger', 'apt-key list',
128
+ 'apt-key net-update', 'apt-key update', 'apt-listbugs apt',
129
+ 'apt-listbugs list', 'apt-listbugs rss', 'apt-src build',
130
+ 'apt-src clean', 'apt-src import', 'apt-src install',
131
+ 'apt-src list', 'apt-src location', 'apt-src name',
132
+ 'apt-src remove', 'apt-src update', 'apt-src upgrade',
133
+ 'apt-src version',
134
+
135
+ 'basename', 'bash', 'bc', 'bison', 'bunzip2', 'bzcat',
136
+ 'bzcmp', 'bzdiff', 'bzegrep', 'bzfgrep', 'bzgrep',
137
+ 'bzip2', 'bzip2recover', 'bzless', 'bzmore',
138
+
139
+ 'c++', 'cal', 'cat', 'chattr', 'cc', 'cdda2wav', 'cdparanoia',
140
+ 'cdrdao', 'cd-read', 'cdrecord', 'chfn', 'chgrp', 'chmod',
141
+ 'chown', 'chroot', 'chsh', 'chvt', 'clear', 'cmp', 'comm', 'co',
142
+ 'col', 'cp', 'cpio', 'cpp', 'csh', 'cut', 'cvs', 'cvs-pserver',
143
+
144
+ 'cvs add', 'cvs admin', 'cvs annotate', 'cvs checkout',
145
+ 'cvs commit', 'cvs diff', 'cvs edit', 'cvs editors', 'cvs export',
146
+ 'cvs history', 'cvs import', 'cvs init', 'cvs log', 'cvs login',
147
+ 'cvs logout', 'cvs ls', 'cvs pserver', 'cvs rannotate',
148
+ 'cvs rdiff', 'cvs release', 'cvs remove', 'cvs rlog', 'cvs rls',
149
+ 'cvs rtag', 'cvs server', 'cvs status', 'cvs tag', 'cvs unedit',
150
+ 'cvs update', 'cvs version', 'cvs watch', 'cvs watchers',
151
+
152
+ 'dash', 'date', 'dc', 'dch', 'dcop', 'dd', 'ddate', 'ddd',
153
+ 'deallocvt', 'debconf', 'defoma', 'depmod', 'df', 'dh',
154
+ 'dialog', 'diff', 'diff3', 'dig', 'dir', 'dircolors', 'directomatic',
155
+ 'dirname', 'dmesg', 'dnsdomainname', 'domainname', 'dpkg',
156
+ 'dselect', 'du', 'dumpkeys',
157
+
158
+ 'ed', 'egrep', 'env', 'expr',
159
+
160
+ 'false', 'fbset', 'ffmpeg', 'fgconsole','fgrep', 'file', 'find',
161
+ 'flex', 'flex++', 'fmt', 'free', 'ftp', 'funzip', 'fuser',
162
+
163
+ 'g++', 'gawk', 'gc','gcc', 'gdb', 'getent', 'getkeycodes',
164
+ 'getopt', 'gettext', 'gettextize', 'gimp', 'gimp-remote',
165
+ 'gimptool', 'gmake', 'gocr', 'grep', 'groups', 'gs', 'gunzip',
166
+ 'gzexe', 'gzip',
167
+
168
+ 'git', 'git add', 'git add--interactive', 'git am', 'git annotate',
169
+ 'git apply', 'git archive', 'git bisect', 'git bisect--helper',
170
+ 'git blame', 'git branch', 'git bundle', 'git cat-file',
171
+ 'git check-attr', 'git checkout', 'git checkout-index',
172
+ 'git check-ref-format', 'git cherry', 'git cherry-pick',
173
+ 'git clean', 'git clone', 'git commit', 'git commit-tree',
174
+ 'git config', 'git count-objects', 'git daemon', 'git describe',
175
+ 'git diff', 'git diff-files', 'git diff-index', 'git difftool',
176
+ 'git difftool--helper', 'git diff-tree', 'git fast-export',
177
+ 'git fast-import', 'git fetch', 'git fetch-pack',
178
+ 'git filter-branch', 'git fmt-merge-msg', 'git for-each-ref',
179
+ 'git format-patch', 'git fsck', 'git fsck-objects', 'git gc',
180
+ 'git get-tar-commit-id', 'git grep', 'git hash-object', 'git help',
181
+ 'git http-backend', 'git http-fetch', 'git http-push',
182
+ 'git imap-send', 'git index-pack', 'git init', 'git init-db',
183
+ 'git instaweb', 'git log', 'git lost-found', 'git ls-files',
184
+ 'git ls-remote', 'git ls-tree', 'git mailinfo', 'git mailsplit',
185
+ 'git merge', 'git merge-base', 'git merge-file', 'git merge-index',
186
+ 'git merge-octopus', 'git merge-one-file', 'git merge-ours',
187
+ 'git merge-recursive', 'git merge-resolve', 'git merge-subtree',
188
+ 'git mergetool', 'git merge-tree', 'git mktag', 'git mktree',
189
+ 'git mv', 'git name-rev', 'git notes', 'git pack-objects',
190
+ 'git pack-redundant', 'git pack-refs', 'git patch-id',
191
+ 'git peek-remote', 'git prune', 'git prune-packed', 'git pull',
192
+ 'git push', 'git quiltimport', 'git read-tree', 'git rebase',
193
+ 'git rebase--interactive', 'git receive-pack', 'git reflog',
194
+ 'git relink', 'git remote', 'git remote-ftp', 'git remote-ftps',
195
+ 'git remote-http', 'git remote-https', 'git remote-testgit',
196
+ 'git repack', 'git replace', 'git repo-config', 'git request-pull',
197
+ 'git rerere', 'git reset', 'git revert', 'git rev-list',
198
+ 'git rev-parse', 'git rm', 'git send-pack', 'git shell',
199
+ 'git shortlog', 'git show', 'git show-branch', 'git show-index',
200
+ 'git show-ref', 'git stage', 'git stash', 'git status',
201
+ 'git stripspace', 'git submodule', 'git symbolic-ref', 'git tag',
202
+ 'git tar-tree', 'git unpack-file', 'git unpack-objects',
203
+ 'git update-index', 'git update-ref', 'git update-server-info',
204
+ 'git upload-archive', 'git upload-pack', 'git var',
205
+ 'git verify-pack', 'git verify-tag', 'git web--browse',
206
+ 'git whatchanged', 'git write-tree',
207
+
208
+ 'gitaction', 'git-add', 'git-add--interactive', 'git-am',
209
+ 'git-annotate', 'git-apply', 'git-archive', 'git-bisect',
210
+ 'git-bisect--helper', 'git-blame', 'git-branch', 'git-bundle',
211
+ 'git-cat-file', 'git-check-attr', 'git-checkout',
212
+ 'git-checkout-index', 'git-check-ref-format', 'git-cherry',
213
+ 'git-cherry-pick', 'git-clean', 'git-clone', 'git-commit',
214
+ 'git-commit-tree', 'git-config', 'git-count-objects', 'git-daemon',
215
+ 'git-describe', 'git-diff', 'git-diff-files', 'git-diff-index',
216
+ 'git-difftool', 'git-difftool--helper', 'git-diff-tree',
217
+ 'gitdpkgname', 'git-fast-export', 'git-fast-import', 'git-fetch',
218
+ 'git-fetch-pack', 'git-fetch--tool', 'git-filter-branch', 'gitfm',
219
+ 'git-fmt-merge-msg', 'git-for-each-ref', 'git-format-patch',
220
+ 'git-fsck', 'git-fsck-objects', 'git-gc', 'git-get-tar-commit-id',
221
+ 'git-grep', 'git-hash-object', 'git-help', 'git-http-fetch',
222
+ 'git-http-push', 'git-imap-send', 'git-index-pack', 'git-init',
223
+ 'git-init-db', 'git-instaweb', 'gitkeys', 'git-log',
224
+ 'git-lost-found', 'git-ls-files', 'git-ls-remote', 'git-ls-tree',
225
+ 'git-mailinfo', 'git-mailsplit', 'git-merge', 'git-merge-base',
226
+ 'git-merge-file', 'git-merge-index', 'git-merge-octopus',
227
+ 'git-merge-one-file', 'git-merge-ours', 'git-merge-recursive',
228
+ 'git-merge-resolve', 'git-merge-subtree', 'git-mergetool',
229
+ 'git-mergetool--lib', 'git-merge-tree', 'gitmkdirs', 'git-mktag',
230
+ 'git-mktree', 'gitmount', 'git-mv', 'git-name-rev',
231
+ 'git-pack-objects', 'git-pack-redundant', 'git-pack-refs',
232
+ 'git-parse-remote', 'git-patch-id', 'git-peek-remote', 'git-prune',
233
+ 'git-prune-packed', 'gitps', 'git-pull', 'git-push',
234
+ 'git-quiltimport', 'git-read-tree', 'git-rebase',
235
+ 'git-rebase--interactive', 'git-receive-pack', 'git-reflog',
236
+ 'gitregrep', 'git-relink', 'git-remote', 'git-repack',
237
+ 'git-repo-config', 'git-request-pull', 'git-rerere', 'git-reset',
238
+ 'git-revert', 'git-rev-list', 'git-rev-parse', 'gitrfgrep',
239
+ 'gitrgrep', 'git-rm', 'git-send-pack', 'git-shell', 'git-shortlog',
240
+ 'git-show', 'git-show-branch', 'git-show-index', 'git-show-ref',
241
+ 'git-sh-setup', 'git-stage', 'git-stash', 'git-status',
242
+ 'git-stripspace', 'git-submodule', 'git-svn', 'git-symbolic-ref',
243
+ 'git-tag', 'git-tar-tree', 'gitunpack', 'git-unpack-file',
244
+ 'git-unpack-objects', 'git-update-index', 'git-update-ref',
245
+ 'git-update-server-info', 'git-upload-archive', 'git-upload-pack',
246
+ 'git-var', 'git-verify-pack', 'git-verify-tag', 'gitview',
247
+ 'git-web--browse', 'git-whatchanged', 'gitwhich', 'gitwipe',
248
+ 'git-write-tree', 'gitxgrep',
249
+
250
+ 'head', 'hexdump', 'hostname',
251
+
252
+ 'id', 'ifconfig', 'ifdown', 'ifup', 'igawk', 'install',
253
+
254
+ 'ip', 'ip addr', 'ip addrlabel', 'ip link', 'ip maddr', 'ip mroute',
255
+ 'ip neigh', 'ip route', 'ip rule', 'ip tunnel', 'ip xfrm',
256
+
257
+ 'join',
258
+
259
+ 'kbd_mode','kbdrate', 'kdialog', 'kfile', 'kill', 'killall',
260
+
261
+ 'lame', 'last', 'lastb', 'ld', 'ld86', 'ldd', 'less', 'lex', 'link',
262
+ 'ln', 'loadkeys', 'loadunimap', 'locate', 'lockfile', 'login',
263
+ 'logname', 'lp', 'lpr', 'ls', 'lsattr', 'lsmod', 'lsmod.old',
264
+ 'lspci', 'ltrace', 'lynx',
265
+
266
+ 'm4', 'make', 'man', 'mapscrn', 'mesg', 'mkdir', 'mkfifo',
267
+ 'mknod', 'mktemp', 'more', 'mount', 'mplayer', 'msgfmt', 'mv',
268
+
269
+ 'namei', 'nano', 'nasm', 'nawk', 'netstat', 'nice',
270
+ 'nisdomainname', 'nl', 'nm', 'nm86', 'nmap', 'nohup', 'nop',
271
+
272
+ 'od', 'openvt',
273
+
274
+ 'passwd', 'patch', 'pcregrep', 'pcretest', 'perl', 'perror',
275
+ 'pgawk', 'pidof', 'ping', 'pr', 'procmail', 'prune', 'ps', 'pstree',
276
+ 'ps2ascii', 'ps2epsi', 'ps2frag', 'ps2pdf', 'ps2ps', 'psbook',
277
+ 'psmerge', 'psnup', 'psresize', 'psselect', 'pstops',
278
+
279
+ 'rbash', 'rcs', 'rcs2log', 'read', 'readlink', 'red', 'resizecons',
280
+ 'rev', 'rm', 'rmdir', 'rsh', 'run-parts',
281
+
282
+ 'sash', 'scp', 'screen', 'sed', 'seq', 'sendmail', 'setfont',
283
+ 'setkeycodes', 'setleds', 'setmetamode', 'setserial', 'setterm',
284
+ 'sh', 'showkey', 'shred', 'size', 'size86', 'skill', 'sleep',
285
+ 'slogin', 'snice', 'sort', 'sox', 'split', 'ssed', 'ssh', 'ssh-add',
286
+ 'ssh-agent', 'ssh-keygen', 'ssh-keyscan', 'stat', 'strace',
287
+ 'strings', 'strip', 'stty', 'su', 'sudo', 'suidperl', 'sum', 'svn',
288
+ 'svnadmin', 'svndumpfilter', 'svnlook', 'svnmerge', 'svnmucc',
289
+ 'svnserve', 'svnshell', 'svnsync', 'svnversion', 'svnwrap', 'sync',
290
+
291
+ 'svn add', 'svn ann', 'svn annotate', 'svn blame', 'svn cat',
292
+ 'svn changelist', 'svn checkout', 'svn ci', 'svn cl', 'svn cleanup',
293
+ 'svn co', 'svn commit', 'svn copy', 'svn cp', 'svn del',
294
+ 'svn delete', 'svn di', 'svn diff', 'svn export', 'svn h',
295
+ 'svn help', 'svn import', 'svn info', 'svn list', 'svn lock',
296
+ 'svn log', 'svn ls', 'svn merge', 'svn mergeinfo', 'svn mkdir',
297
+ 'svn move', 'svn mv', 'svn pd', 'svn pdel', 'svn pe', 'svn pedit',
298
+ 'svn pg', 'svn pget', 'svn pl', 'svn plist', 'svn praise',
299
+ 'svn propdel', 'svn propedit', 'svn propget', 'svn proplist',
300
+ 'svn propset', 'svn ps', 'svn pset', 'svn remove', 'svn ren',
301
+ 'svn rename', 'svn resolve', 'svn resolved', 'svn revert', 'svn rm',
302
+ 'svn st', 'svn stat', 'svn status', 'svn sw', 'svn switch',
303
+ 'svn unlock', 'svn up', 'svn update',
304
+
305
+ 'tac', 'tail', 'tar', 'tee', 'tempfile', 'touch', 'tr', 'tree',
306
+ 'true',
307
+
308
+ 'umount', 'uname', 'unicode_start', 'unicode_stop', 'uniq',
309
+ 'unlink', 'unzip', 'updatedb', 'updmap', 'uptime', 'users',
310
+ 'utmpdump', 'uuidgen',
311
+
312
+ 'valgrind', 'vdir', 'vi', 'vim', 'vmstat',
313
+
314
+ 'w', 'wall', 'watch', 'wc', 'wget', 'whatis', 'whereis',
315
+ 'which', 'whiptail', 'who', 'whoami', 'whois', 'wine', 'wineboot',
316
+ 'winebuild', 'winecfg', 'wineconsole', 'winedbg', 'winedump',
317
+ 'winefile', 'wodim', 'write',
318
+
319
+ 'xargs', 'xhost', 'xmodmap', 'xset',
320
+
321
+ 'yacc', 'yes', 'ypdomainname', 'yum',
322
+
323
+ 'yum check-update', 'yum clean', 'yum deplist', 'yum erase',
324
+ 'yum groupinfo', 'yum groupinstall', 'yum grouplist',
325
+ 'yum groupremove', 'yum groupupdate', 'yum info', 'yum install',
326
+ 'yum list', 'yum localinstall', 'yum localupdate', 'yum makecache',
327
+ 'yum provides', 'yum remove', 'yum resolvedep', 'yum search',
328
+ 'yum shell', 'yum update', 'yum upgrade', 'yum whatprovides',
329
+
330
+ 'zcat', 'zcmp', 'zdiff', 'zdump', 'zegrep', 'zfgrep', 'zforce',
331
+ 'zgrep', 'zip', 'zipgrep', 'zipinfo', 'zless', 'zmore', 'znew',
332
+ 'zsh', 'zsoelim'
333
+ ),
334
+ 3 => array(
335
+ 'alias', 'bg', 'bind', 'break', 'builtin', 'cd', 'command',
336
+ 'compgen', 'complete', 'continue', 'declare', 'dirs', 'disown',
337
+ 'echo', 'enable', 'eval', 'exec', 'exit', 'export', 'fc',
338
+ 'fg', 'getopts', 'hash', 'help', 'history', 'jobs', 'let',
339
+ 'local', 'logout', 'popd', 'printf', 'pushd', 'pwd', 'readonly',
340
+ 'return', 'shift', 'shopt', 'source', 'suspend', 'test', 'times',
341
+ 'trap', 'type', 'typeset', 'ulimit', 'umask', 'unalias', 'unset',
342
+ 'wait'
343
+ )
344
+ ),
345
+ 'SYMBOLS' => array(
346
+ '(', ')', '[', ']', '!', '@', '%', '&', '*', '|', '/', '<', '>', ';;', '`'
347
+ ),
348
+ 'CASE_SENSITIVE' => array(
349
+ GESHI_COMMENTS => false,
350
+ 1 => true,
351
+ 2 => true,
352
+ 3 => true
353
+ ),
354
+ 'STYLES' => array(
355
+ 'KEYWORDS' => array(
356
+ 1 => 'color: #000000; font-weight: bold;',
357
+ 2 => 'color: #c20cb9; font-weight: bold;',
358
+ 3 => 'color: #7a0874; font-weight: bold;'
359
+ ),
360
+ 'COMMENTS' => array(
361
+ 0 => 'color: #666666; font-style: italic;',
362
+ 1 => 'color: #800000;',
363
+ 2 => 'color: #cc0000; font-style: italic;',
364
+ 3 => 'color: #000000; font-weight: bold;',
365
+ 4 => 'color: #666666;'
366
+ ),
367
+ 'ESCAPE_CHAR' => array(
368
+ 1 => 'color: #000099; font-weight: bold;',
369
+ 2 => 'color: #007800;',
370
+ 3 => 'color: #007800;',
371
+ 4 => 'color: #007800;',
372
+ 5 => 'color: #780078;',
373
+ 'HARD' => 'color: #000099; font-weight: bold;'
374
+ ),
375
+ 'BRACKETS' => array(
376
+ 0 => 'color: #7a0874; font-weight: bold;'
377
+ ),
378
+ 'STRINGS' => array(
379
+ 0 => 'color: #ff0000;',
380
+ 'HARD' => 'color: #ff0000;'
381
+ ),
382
+ 'NUMBERS' => array(
383
+ 0 => 'color: #000000;'
384
+ ),
385
+ 'METHODS' => array(
386
+ ),
387
+ 'SYMBOLS' => array(
388
+ 0 => 'color: #000000; font-weight: bold;'
389
+ ),
390
+ 'REGEXPS' => array(
391
+ 0 => 'color: #007800;',
392
+ 1 => 'color: #007800;',
393
+ 2 => 'color: #007800;',
394
+ 4 => 'color: #007800;',
395
+ 5 => 'color: #660033;'
396
+ ),
397
+ 'SCRIPT' => array(
398
+ )
399
+ ),
400
+ 'URLS' => array(
401
+ 1 => '',
402
+ 2 => '',
403
+ 3 => ''
404
+ ),
405
+ 'OOLANG' => false,
406
+ 'OBJECT_SPLITTERS' => array(
407
+ ),
408
+ 'REGEXPS' => array(
409
+ //Variables (will be handled by comment_regexps)
410
+ 0 => "\\$\\{[a-zA-Z_][a-zA-Z0-9_]*?\\}",
411
+ //Variables without braces
412
+ 1 => "\\$[a-zA-Z_][a-zA-Z0-9_]*",
413
+ //Variable assignment
414
+ 2 => "(?<![\.a-zA-Z_\-])([a-zA-Z_][a-zA-Z0-9_]*?)(?==)",
415
+ //Shorthand shell variables
416
+ 4 => "\\$[*#\$\\-\\?!\d]",
417
+ //Parameters of commands
418
+ 5 => "(?<=\s)--?[0-9a-zA-Z\-]+(?=[\s=]|<(?:SEMI|PIPE)>|$)"
419
+ ),
420
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
421
+ 'SCRIPT_DELIMITERS' => array(
422
+ ),
423
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
424
+ ),
425
+ 'TAB_WIDTH' => 4,
426
+ 'PARSER_CONTROL' => array(
427
+ 'COMMENTS' => array(
428
+ 'DISALLOWED_BEFORE' => '$'
429
+ ),
430
+ 'KEYWORDS' => array(
431
+ 'DISALLOWED_BEFORE' => "(?<![\.\-a-zA-Z0-9_\$\#:])",
432
+ 'DISALLOWED_AFTER' => "(?![\.\-a-zA-Z0-9_%=\\/:])",
433
+ 2 => array(
434
+ 'SPACE_AS_WHITESPACE' => false
435
+ )
436
+ )
437
+ )
438
+ );
439
+
440
+ ?>
lib/geshi/css.php ADDED
@@ -0,0 +1,223 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*************************************************************************************
3
+ * css.php
4
+ * -------
5
+ * Author: Nigel McNie (nigel@geshi.org)
6
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
7
+ * Release Version: 1.0.8.10
8
+ * Date Started: 2004/06/18
9
+ *
10
+ * CSS language file for GeSHi.
11
+ *
12
+ * CHANGES
13
+ * -------
14
+ * 2008/05/23 (1.0.7.22)
15
+ * - Added description of extra language features (SF#1970248)
16
+ * 2004/11/27 (1.0.3)
17
+ * - Added support for multiple object splitters
18
+ * 2004/10/27 (1.0.2)
19
+ * - Changed regexps to catch "-" symbols
20
+ * - Added support for URLs
21
+ * 2004/08/05 (1.0.1)
22
+ * - Added support for symbols
23
+ * 2004/07/14 (1.0.0)
24
+ * - First Release
25
+ *
26
+ * TODO (updated 2004/11/27)
27
+ * -------------------------
28
+ * * Improve or drop regexps for class/id/psuedoclass highlighting
29
+ * * Re-look at keywords - possibly to make several CSS language
30
+ * files, all with different versions of CSS in them
31
+ *
32
+ *************************************************************************************
33
+ *
34
+ * This file is part of GeSHi.
35
+ *
36
+ * GeSHi is free software; you can redistribute it and/or modify
37
+ * it under the terms of the GNU General Public License as published by
38
+ * the Free Software Foundation; either version 2 of the License, or
39
+ * (at your option) any later version.
40
+ *
41
+ * GeSHi is distributed in the hope that it will be useful,
42
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
43
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
44
+ * GNU General Public License for more details.
45
+ *
46
+ * You should have received a copy of the GNU General Public License
47
+ * along with GeSHi; if not, write to the Free Software
48
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
49
+ *
50
+ ************************************************************************************/
51
+
52
+ $language_data = array (
53
+ 'LANG_NAME' => 'CSS',
54
+ 'COMMENT_SINGLE' => array(1 => '@'),
55
+ 'COMMENT_MULTI' => array('/*' => '*/'),
56
+ 'COMMENT_REGEXP' => array(
57
+ 2 => "/(?<=\\()\\s*(?:(?:[a-z0-9]+?:\\/\\/)?[a-z0-9_\\-\\.\\/:]+?)?[a-z]+?\\.[a-z]+?(\\?[^\)]+?)?\\s*?(?=\\))/i"
58
+ ),
59
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
60
+ 'QUOTEMARKS' => array('"', "'"),
61
+ 'ESCAPE_CHAR' => '',
62
+ 'ESCAPE_REGEXP' => array(
63
+ //Simple Single Char Escapes
64
+ //1 => "#\\\\[nfrtv\$\"\n\\\\]#i",
65
+ //Hexadecimal Char Specs
66
+ 2 => "#\\\\[\da-fA-F]{1,6}\s?#i",
67
+ //Unicode Char Specs
68
+ //3 => "#\\\\u[\da-fA-F]{1,8}#i",
69
+ ),
70
+ 'KEYWORDS' => array(
71
+ 1 => array(
72
+ 'aqua', 'azimuth', 'background-attachment', 'background-color',
73
+ 'background-image', 'background-position', 'background-repeat',
74
+ 'background', 'black', 'blue', 'border-bottom-color',
75
+ 'border-bottom-style', 'border-bottom-width', 'border-left-color',
76
+ 'border-left-style', 'border-left-width', 'border-right',
77
+ 'border-right-color', 'border-right-style', 'border-right-width',
78
+ 'border-top-color', 'border-top-style',
79
+ 'border-top-width','border-bottom', 'border-collapse',
80
+ 'border-left', 'border-width', 'border-color', 'border-spacing',
81
+ 'border-style', 'border-top', 'border', 'caption-side', 'clear',
82
+ 'clip', 'color', 'content', 'counter-increment', 'counter-reset',
83
+ 'cue-after', 'cue-before', 'cue', 'cursor', 'direction', 'display',
84
+ 'elevation', 'empty-cells', 'float', 'font-family', 'font-size',
85
+ 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant',
86
+ 'font-weight', 'font', 'line-height', 'letter-spacing',
87
+ 'list-style', 'list-style-image', 'list-style-position',
88
+ 'list-style-type', 'margin-bottom', 'margin-left', 'margin-right',
89
+ 'margin-top', 'margin', 'marker-offset', 'marks', 'max-height',
90
+ 'max-width', 'min-height', 'min-width', 'orphans', 'outline',
91
+ 'outline-color', 'outline-style', 'outline-width', 'overflow',
92
+ 'padding-bottom', 'padding-left', 'padding-right', 'padding-top',
93
+ 'padding', 'page', 'page-break-after', 'page-break-before',
94
+ 'page-break-inside', 'pause-after', 'pause-before', 'pause',
95
+ 'pitch', 'pitch-range', 'play-during', 'position', 'quotes',
96
+ 'richness', 'right', 'size', 'speak-header', 'speak-numeral',
97
+ 'speak-punctuation', 'speak', 'speech-rate', 'stress',
98
+ 'table-layout', 'text-align', 'text-decoration', 'text-indent',
99
+ 'text-shadow', 'text-transform', 'top', 'unicode-bidi',
100
+ 'vertical-align', 'visibility', 'voice-family', 'volume',
101
+ 'white-space', 'widows', 'width', 'word-spacing', 'z-index',
102
+ 'bottom', 'left', 'height'
103
+ ),
104
+ 2 => array(
105
+ 'above', 'absolute', 'always', 'armenian', 'aural', 'auto',
106
+ 'avoid', 'baseline', 'behind', 'below', 'bidi-override', 'blink',
107
+ 'block', 'bold', 'bolder', 'both', 'capitalize', 'center-left',
108
+ 'center-right', 'center', 'circle', 'cjk-ideographic',
109
+ 'close-quote', 'collapse', 'condensed', 'continuous', 'crop',
110
+ 'crosshair', 'cross', 'cursive', 'dashed', 'decimal-leading-zero',
111
+ 'decimal', 'default', 'digits', 'disc', 'dotted', 'double',
112
+ 'e-resize', 'embed', 'extra-condensed', 'extra-expanded',
113
+ 'expanded', 'fantasy', 'far-left', 'far-right', 'faster', 'fast',
114
+ 'fixed', 'fuchsia', 'georgian', 'gray', 'green', 'groove',
115
+ 'hebrew', 'help', 'hidden', 'hide', 'higher', 'high',
116
+ 'hiragana-iroha', 'hiragana', 'icon', 'inherit', 'inline-table',
117
+ 'inline', 'inset', 'inside', 'invert', 'italic', 'justify',
118
+ 'katakana-iroha', 'katakana', 'landscape', 'larger', 'large',
119
+ 'left-side', 'leftwards', 'level', 'lighter', 'lime',
120
+ 'line-through', 'list-item', 'loud', 'lower-alpha', 'lower-greek',
121
+ 'lower-roman', 'lowercase', 'ltr', 'lower', 'low', 'maroon',
122
+ 'medium', 'message-box', 'middle', 'mix', 'monospace', 'n-resize',
123
+ 'narrower', 'navy', 'ne-resize', 'no-close-quote',
124
+ 'no-open-quote', 'no-repeat', 'none', 'normal', 'nowrap',
125
+ 'nw-resize', 'oblique', 'olive', 'once', 'open-quote', 'outset',
126
+ 'outside', 'overline', 'pointer', 'portrait', 'purple', 'px',
127
+ 'red', 'relative', 'repeat-x', 'repeat-y', 'repeat', 'rgb',
128
+ 'ridge', 'right-side', 'rightwards', 's-resize', 'sans-serif',
129
+ 'scroll', 'se-resize', 'semi-condensed', 'semi-expanded',
130
+ 'separate', 'serif', 'show', 'silent', 'silver', 'slow', 'slower',
131
+ 'small-caps', 'small-caption', 'smaller', 'soft', 'solid',
132
+ 'spell-out', 'square', 'static', 'status-bar', 'super',
133
+ 'sw-resize', 'table-caption', 'table-cell', 'table-column',
134
+ 'table-column-group', 'table-footer-group', 'table-header-group',
135
+ 'table-row', 'table-row-group', 'teal', 'text', 'text-bottom',
136
+ 'text-top', 'thick', 'thin', 'transparent', 'ultra-condensed',
137
+ 'ultra-expanded', 'underline', 'upper-alpha', 'upper-latin',
138
+ 'upper-roman', 'uppercase', 'url', 'visible', 'w-resize', 'wait',
139
+ 'white', 'wider', 'x-fast', 'x-high', 'x-large', 'x-loud',
140
+ 'x-low', 'x-small', 'x-soft', 'xx-large', 'xx-small', 'yellow',
141
+ 'yes'
142
+ )
143
+ ),
144
+ 'SYMBOLS' => array(
145
+ '(', ')', '{', '}', ':', ';',
146
+ '>', '+', '*', ',', '^', '='
147
+ ),
148
+ 'CASE_SENSITIVE' => array(
149
+ GESHI_COMMENTS => false,
150
+ 1 => true,
151
+ 2 => true
152
+ ),
153
+ 'STYLES' => array(
154
+ 'KEYWORDS' => array(
155
+ 1 => 'color: #000000; font-weight: bold;',
156
+ 2 => 'color: #993333;'
157
+ ),
158
+ 'COMMENTS' => array(
159
+ 1 => 'color: #a1a100;',
160
+ 2 => 'color: #ff0000; font-style: italic;',
161
+ 'MULTI' => 'color: #808080; font-style: italic;'
162
+ ),
163
+ 'ESCAPE_CHAR' => array(
164
+ 0 => 'color: #000099; font-weight: bold;',
165
+ //1 => 'color: #000099; font-weight: bold;',
166
+ 2 => 'color: #000099; font-weight: bold;'
167
+ //3 => 'color: #000099; font-weight: bold;'
168
+ ),
169
+ 'BRACKETS' => array(
170
+ 0 => 'color: #00AA00;'
171
+ ),
172
+ 'STRINGS' => array(
173
+ 0 => 'color: #ff0000;'
174
+ ),
175
+ 'NUMBERS' => array(
176
+ 0 => 'color: #cc66cc;'
177
+ ),
178
+ 'METHODS' => array(
179
+ ),
180
+ 'SYMBOLS' => array(
181
+ 0 => 'color: #00AA00;'
182
+ ),
183
+ 'SCRIPT' => array(
184
+ ),
185
+ 'REGEXPS' => array(
186
+ 0 => 'color: #cc00cc;',
187
+ 1 => 'color: #6666ff;',
188
+ 2 => 'color: #3333ff;',
189
+ 3 => 'color: #933;'
190
+ )
191
+ ),
192
+ 'URLS' => array(
193
+ 1 => '',
194
+ 2 => ''
195
+ ),
196
+ 'OOLANG' => false,
197
+ 'OBJECT_SPLITTERS' => array(
198
+ ),
199
+ 'REGEXPS' => array(
200
+ //DOM Node ID
201
+ 0 => '\#[a-zA-Z0-9\-_]+(?:\\\\:[a-zA-Z0-9\-_]+)*',
202
+ //CSS classname
203
+ 1 => '\.(?!\d)[a-zA-Z0-9\-_]+(?:\\\\:[a-zA-Z0-9\-_]+)*\b(?=[\{\.#\s,:].|<\|)',
204
+ //CSS Pseudo classes
205
+ //note: & is needed for &gt; (i.e. > )
206
+ 2 => '(?<!\\\\):(?!\d)[a-zA-Z0-9\-]+\b(?:\s*(?=[\{\.#a-zA-Z,:+*&](.|\n)|<\|))',
207
+ //Measurements
208
+ 3 => '[+\-]?(\d+|(\d*\.\d+))(em|ex|pt|px|cm|in|%)',
209
+ ),
210
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
211
+ 'SCRIPT_DELIMITERS' => array(
212
+ ),
213
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
214
+ ),
215
+ 'TAB_WIDTH' => 4,
216
+ 'PARSER_CONTROL' => array(
217
+ 'KEYWORDS' => array(
218
+ 'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-&\.])'
219
+ )
220
+ )
221
+ );
222
+
223
+ ?>
lib/geshi/html4strict.php ADDED
@@ -0,0 +1,190 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*************************************************************************************
3
+ * html4strict.php
4
+ * ---------------
5
+ * Author: Nigel McNie (nigel@geshi.org)
6
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
7
+ * Release Version: 1.0.8.10
8
+ * Date Started: 2004/07/10
9
+ *
10
+ * HTML 4.01 strict language file for GeSHi.
11
+ *
12
+ * CHANGES
13
+ * -------
14
+ * 2005/12/28 (1.0.4)
15
+ * - Removed escape character for strings
16
+ * 2004/11/27 (1.0.3)
17
+ * - Added support for multiple object splitters
18
+ * 2004/10/27 (1.0.2)
19
+ * - Added support for URLs
20
+ * 2004/08/05 (1.0.1)
21
+ * - Added INS and DEL
22
+ * - Removed the background colour from tags' styles
23
+ * 2004/07/14 (1.0.0)
24
+ * - First Release
25
+ *
26
+ * TODO (updated 2004/11/27)
27
+ * -------------------------
28
+ * * Check that only HTML4 strict attributes are highlighted
29
+ * * Eliminate empty tags that aren't allowed in HTML4 strict
30
+ * * Split to several files - html4trans, xhtml1 etc
31
+ *
32
+ *************************************************************************************
33
+ *
34
+ * This file is part of GeSHi.
35
+ *
36
+ * GeSHi is free software; you can redistribute it and/or modify
37
+ * it under the terms of the GNU General Public License as published by
38
+ * the Free Software Foundation; either version 2 of the License, or
39
+ * (at your option) any later version.
40
+ *
41
+ * GeSHi is distributed in the hope that it will be useful,
42
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
43
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
44
+ * GNU General Public License for more details.
45
+ *
46
+ * You should have received a copy of the GNU General Public License
47
+ * along with GeSHi; if not, write to the Free Software
48
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
49
+ *
50
+ ************************************************************************************/
51
+
52
+ $language_data = array (
53
+ 'LANG_NAME' => 'HTML',
54
+ 'COMMENT_SINGLE' => array(),
55
+ 'COMMENT_MULTI' => array(),
56
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
57
+ 'QUOTEMARKS' => array("'", '"'),
58
+ 'ESCAPE_CHAR' => '',
59
+ 'KEYWORDS' => array(
60
+ 2 => array(
61
+ 'a', 'abbr', 'acronym', 'address', 'applet',
62
+ 'base', 'basefont', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'b',
63
+ 'caption', 'center', 'cite', 'code', 'colgroup', 'col',
64
+ 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt',
65
+ 'em',
66
+ 'fieldset', 'font', 'form', 'frame', 'frameset',
67
+ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html',
68
+ 'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'i',
69
+ 'kbd',
70
+ 'label', 'legend', 'link', 'li',
71
+ 'map', 'meta',
72
+ 'noframes', 'noscript',
73
+ 'object', 'ol', 'optgroup', 'option',
74
+ 'param', 'pre', 'p',
75
+ 'q',
76
+ 'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 's',
77
+ 'table', 'tbody', 'td', 'textarea', 'text', 'tfoot', 'thead', 'th', 'title', 'tr', 'tt',
78
+ 'ul', 'u',
79
+ 'var',
80
+ ),
81
+ 3 => array(
82
+ 'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis',
83
+ 'background', 'bgcolor', 'border',
84
+ 'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords',
85
+ 'data', 'datetime', 'declare', 'defer', 'dir', 'disabled',
86
+ 'enctype',
87
+ 'face', 'for', 'frame', 'frameborder',
88
+ 'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv',
89
+ 'id', 'ismap',
90
+ 'label', 'lang', 'language', 'link', 'longdesc',
91
+ 'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple',
92
+ 'name', 'nohref', 'noresize', 'noshade', 'nowrap',
93
+ 'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload',
94
+ 'profile', 'prompt',
95
+ 'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules',
96
+ 'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary',
97
+ 'tabindex', 'target', 'text', 'title', 'type',
98
+ 'usemap',
99
+ 'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace',
100
+ 'width'
101
+ )
102
+ ),
103
+ 'SYMBOLS' => array(
104
+ '/', '='
105
+ ),
106
+ 'CASE_SENSITIVE' => array(
107
+ GESHI_COMMENTS => false,
108
+ 2 => false,
109
+ 3 => false,
110
+ ),
111
+ 'STYLES' => array(
112
+ 'KEYWORDS' => array(
113
+ 2 => 'color: #000000; font-weight: bold;',
114
+ 3 => 'color: #000066;'
115
+ ),
116
+ 'COMMENTS' => array(
117
+ ),
118
+ 'ESCAPE_CHAR' => array(
119
+ 0 => 'color: #000099; font-weight: bold;'
120
+ ),
121
+ 'BRACKETS' => array(
122
+ 0 => 'color: #66cc66;'
123
+ ),
124
+ 'STRINGS' => array(
125
+ 0 => 'color: #ff0000;'
126
+ ),
127
+ 'NUMBERS' => array(
128
+ 0 => 'color: #cc66cc;'
129
+ ),
130
+ 'METHODS' => array(
131
+ ),
132
+ 'SYMBOLS' => array(
133
+ 0 => 'color: #66cc66;'
134
+ ),
135
+ 'SCRIPT' => array(
136
+ -2 => 'color: #404040;', // CDATA
137
+ -1 => 'color: #808080; font-style: italic;', // comments
138
+ 0 => 'color: #00bbdd;',
139
+ 1 => 'color: #ddbb00;',
140
+ 2 => 'color: #009900;'
141
+ ),
142
+ 'REGEXPS' => array(
143
+ )
144
+ ),
145
+ 'URLS' => array(
146
+ 2 => 'http://december.com/html/4/element/{FNAMEL}.html',
147
+ 3 => ''
148
+ ),
149
+ 'OOLANG' => false,
150
+ 'OBJECT_SPLITTERS' => array(
151
+ ),
152
+ 'REGEXPS' => array(
153
+ ),
154
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
155
+ 'SCRIPT_DELIMITERS' => array(
156
+ -2 => array(
157
+ '<![CDATA[' => ']]>'
158
+ ),
159
+ -1 => array(
160
+ '<!--' => '-->'
161
+ ),
162
+ 0 => array(
163
+ '<!DOCTYPE' => '>'
164
+ ),
165
+ 1 => array(
166
+ '&' => ';'
167
+ ),
168
+ 2 => array(
169
+ '<' => '>'
170
+ )
171
+ ),
172
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
173
+ -2 => false,
174
+ -1 => false,
175
+ 0 => false,
176
+ 1 => false,
177
+ 2 => true
178
+ ),
179
+ 'TAB_WIDTH' => 4,
180
+ 'PARSER_CONTROL' => array(
181
+ 'KEYWORDS' => array(
182
+ 2 => array(
183
+ 'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
184
+ 'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
185
+ )
186
+ )
187
+ )
188
+ );
189
+
190
+ ?>
lib/geshi/html5.php ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*************************************************************************************
3
+ * html5.php
4
+ * ---------------
5
+ * Author: Nigel McNie (nigel@geshi.org)
6
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
7
+ * Release Version: 1.0.8.10
8
+ * Date Started: 2004/07/10
9
+ *
10
+ * HTML 4.01 strict language file for GeSHi.
11
+ *
12
+ * CHANGES
13
+ * -------
14
+ * 2005/12/28 (1.0.4)
15
+ * - Removed escape character for strings
16
+ * 2004/11/27 (1.0.3)
17
+ * - Added support for multiple object splitters
18
+ * 2004/10/27 (1.0.2)
19
+ * - Added support for URLs
20
+ * 2004/08/05 (1.0.1)
21
+ * - Added INS and DEL
22
+ * - Removed the background colour from tags' styles
23
+ * 2004/07/14 (1.0.0)
24
+ * - First Release
25
+ *
26
+ * TODO (updated 2004/11/27)
27
+ * -------------------------
28
+ * * Check that only HTML4 strict attributes are highlighted
29
+ * * Eliminate empty tags that aren't allowed in HTML4 strict
30
+ * * Split to several files - html4trans, xhtml1 etc
31
+ *
32
+ *************************************************************************************
33
+ *
34
+ * This file is part of GeSHi.
35
+ *
36
+ * GeSHi is free software; you can redistribute it and/or modify
37
+ * it under the terms of the GNU General Public License as published by
38
+ * the Free Software Foundation; either version 2 of the License, or
39
+ * (at your option) any later version.
40
+ *
41
+ * GeSHi is distributed in the hope that it will be useful,
42
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
43
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
44
+ * GNU General Public License for more details.
45
+ *
46
+ * You should have received a copy of the GNU General Public License
47
+ * along with GeSHi; if not, write to the Free Software
48
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
49
+ *
50
+ ************************************************************************************/
51
+
52
+ $language_data = array (
53
+ 'LANG_NAME' => 'HTML',
54
+ 'COMMENT_SINGLE' => array(),
55
+ 'COMMENT_MULTI' => array(),
56
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
57
+ 'QUOTEMARKS' => array("'", '"'),
58
+ 'ESCAPE_CHAR' => '',
59
+ 'KEYWORDS' => array(
60
+ 2 => array(
61
+ 'a', 'abbr', 'address', 'article', 'aside', 'audio'.
62
+
63
+ 'base', 'bdo', 'blockquote', 'body', 'br', 'button', 'b',
64
+
65
+ 'caption', 'cite', 'code', 'colgroup', 'col', 'canvas', 'command', 'datalist', 'details',
66
+
67
+ 'dd', 'del', 'dfn', 'div', 'dl', 'dt',
68
+
69
+ 'em', 'embed',
70
+
71
+ 'fieldset', 'form', 'figcaption', 'figure', 'footer',
72
+
73
+ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html', 'header', 'hgroup',
74
+
75
+ 'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'i',
76
+
77
+ 'kbd', 'keygen',
78
+
79
+ 'label', 'legend', 'link', 'li',
80
+
81
+ 'map', 'meta', 'mark', 'meter',
82
+
83
+ 'noscript', 'nav',
84
+
85
+ 'object', 'ol', 'optgroup', 'option', 'output',
86
+
87
+ 'param', 'pre', 'p', 'progress',
88
+
89
+ 'q',
90
+
91
+ 'rp', 'rt', 'ruby',
92
+
93
+ 'samp', 'script', 'select', 'small', 'span', 'strong', 'style', 'sub', 'sup', 's', 'section', 'source', 'summary',
94
+
95
+ 'table', 'tbody', 'td', 'textarea', 'text', 'tfoot', 'thead', 'th', 'title', 'tr', 'time',
96
+
97
+ 'ul',
98
+
99
+ 'var', 'video',
100
+
101
+ 'wbr',
102
+ ),
103
+ 3 => array(
104
+ 'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis', 'autocomplete', 'autofocus',
105
+ 'background', 'bgcolor', 'border',
106
+ 'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords', 'contenteditable', 'contextmenu',
107
+ 'data', 'datetime', 'declare', 'defer', 'dir', 'disabled', 'draggable', 'dropzone',
108
+ 'enctype',
109
+ 'face', 'for', 'frame', 'frameborder', 'form', 'formaction', 'formenctype', 'formmethod', 'formnovalidate', 'formtarget',
110
+ 'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv', 'hidden',
111
+ 'id', 'ismap',
112
+ 'label', 'lang', 'language', 'link', 'longdesc',
113
+ 'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple', 'min', 'max',
114
+ 'name', 'nohref', 'noresize', 'noshade', 'nowrap', 'novalidate',
115
+ 'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onselect', 'onsubmit', 'onunload', 'onafterprint', 'onbeforeprint', 'onbeforeonload', 'onerror', 'onhaschange', 'onmessage', 'onoffline', 'ononline', 'onpagehide', 'onpageshow', 'onpopstate', 'onredo', 'onresize', 'onstorage', 'onundo', 'oncontextmenu', 'onformchange', 'onforminput', 'oninput', 'oninvalid', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onmousewheel', 'onscroll', 'oncanplay', 'oncanplaythrough', 'ondurationchange', 'onemptied', 'onended', 'onloadeddata', 'onloadedmetadata', 'onloadstart', 'onpause', 'onplay', 'onplaying', 'onprogress', 'onratechange', 'onreadystatechange', 'onseeked', 'onseeking', 'onstalled', 'onsuspend', 'ontimeupdate', 'onvolumechange', 'onwaiting',
116
+ 'profile', 'prompt', 'pattern', 'placeholder',
117
+ 'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules', 'required',
118
+ 'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary', 'spellcheck', 'step',
119
+ 'tabindex', 'target', 'text', 'title', 'type',
120
+ 'usemap',
121
+ 'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace',
122
+ 'width'
123
+ )
124
+ ),
125
+ 'SYMBOLS' => array(
126
+ '/', '='
127
+ ),
128
+ 'CASE_SENSITIVE' => array(
129
+ GESHI_COMMENTS => false,
130
+ 2 => false,
131
+ 3 => false,
132
+ ),
133
+ 'STYLES' => array(
134
+ 'KEYWORDS' => array(
135
+ 2 => 'color: #000000; font-weight: bold;',
136
+ 3 => 'color: #000066;'
137
+ ),
138
+ 'COMMENTS' => array(
139
+ ),
140
+ 'ESCAPE_CHAR' => array(
141
+ 0 => 'color: #000099; font-weight: bold;'
142
+ ),
143
+ 'BRACKETS' => array(
144
+ 0 => 'color: #66cc66;'
145
+ ),
146
+ 'STRINGS' => array(
147
+ 0 => 'color: #ff0000;'
148
+ ),
149
+ 'NUMBERS' => array(
150
+ 0 => 'color: #cc66cc;'
151
+ ),
152
+ 'METHODS' => array(
153
+ ),
154
+ 'SYMBOLS' => array(
155
+ 0 => 'color: #66cc66;'
156
+ ),
157
+ 'SCRIPT' => array(
158
+ -2 => 'color: #404040;', // CDATA
159
+ -1 => 'color: #808080; font-style: italic;', // comments
160
+ 0 => 'color: #00bbdd;',
161
+ 1 => 'color: #ddbb00;',
162
+ 2 => 'color: #009900;'
163
+ ),
164
+ 'REGEXPS' => array(
165
+ )
166
+ ),
167
+ 'URLS' => array(
168
+ 2 => 'http://december.com/html/4/element/{FNAMEL}.html',
169
+ 3 => ''
170
+ ),
171
+ 'OOLANG' => false,
172
+ 'OBJECT_SPLITTERS' => array(
173
+ ),
174
+ 'REGEXPS' => array(
175
+ ),
176
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
177
+ 'SCRIPT_DELIMITERS' => array(
178
+ -2 => array(
179
+ '<![CDATA[' => ']]>'
180
+ ),
181
+ -1 => array(
182
+ '<!--' => '-->'
183
+ ),
184
+ 0 => array(
185
+ '<!DOCTYPE' => '>'
186
+ ),
187
+ 1 => array(
188
+ '&' => ';'
189
+ ),
190
+ 2 => array(
191
+ '<' => '>'
192
+ )
193
+ ),
194
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
195
+ -2 => false,
196
+ -1 => false,
197
+ 0 => false,
198
+ 1 => false,
199
+ 2 => true
200
+ ),
201
+ 'TAB_WIDTH' => 4,
202
+ 'PARSER_CONTROL' => array(
203
+ 'KEYWORDS' => array(
204
+ 2 => array(
205
+ 'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
206
+ 'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
207
+ )
208
+ )
209
+ )
210
+ );
211
+
212
+ ?>
lib/geshi/java.php ADDED
@@ -0,0 +1,983 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*************************************************************************************
3
+ * java.php
4
+ * --------
5
+ * Author: Nigel McNie (nigel@geshi.org)
6
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
7
+ * Release Version: 1.0.8.10
8
+ * Date Started: 2004/07/10
9
+ *
10
+ * Java language file for GeSHi.
11
+ *
12
+ * CHANGES
13
+ * -------
14
+ * 2008/05/25 (1.0.7.22)
15
+ * - Added highlighting of import and package directives as non-OOP
16
+ * 2005/12/28 (1.0.4)
17
+ * - Added instanceof keyword
18
+ * 2004/11/27 (1.0.3)
19
+ * - Added support for multiple object splitters
20
+ * 2004/08/05 (1.0.2)
21
+ * - Added URL support
22
+ * - Added keyword "this", as bugs in GeSHi class ironed out
23
+ * 2004/08/05 (1.0.1)
24
+ * - Added support for symbols
25
+ * - Added extra missed keywords
26
+ * 2004/07/14 (1.0.0)
27
+ * - First Release
28
+ *
29
+ * TODO (updated 2004/11/27)
30
+ * -------------------------
31
+ * * Compact the class names like the first few have been
32
+ * and eliminate repeats
33
+ *
34
+ *************************************************************************************
35
+ *
36
+ * This file is part of GeSHi.
37
+ *
38
+ * GeSHi is free software; you can redistribute it and/or modify
39
+ * it under the terms of the GNU General Public License as published by
40
+ * the Free Software Foundation; either version 2 of the License, or
41
+ * (at your option) any later version.
42
+ *
43
+ * GeSHi is distributed in the hope that it will be useful,
44
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
45
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
46
+ * GNU General Public License for more details.
47
+ *
48
+ * You should have received a copy of the GNU General Public License
49
+ * along with GeSHi; if not, write to the Free Software
50
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
51
+ *
52
+ ************************************************************************************/
53
+
54
+ $language_data = array (
55
+ 'LANG_NAME' => 'Java',
56
+ 'COMMENT_SINGLE' => array(1 => '//'),
57
+ 'COMMENT_MULTI' => array('/*' => '*/'),
58
+ 'COMMENT_REGEXP' => array(
59
+ //Import and Package directives (Basic Support only)
60
+ 2 => '/(?:(?<=import[\\n\\s])|(?<=package[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*([a-zA-Z0-9_]+|\*)(?=[\n\s;])/i',
61
+ // javadoc comments
62
+ 3 => '#/\*\*(?![\*\/]).*\*/#sU'
63
+ ),
64
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
65
+ 'QUOTEMARKS' => array("'", '"'),
66
+ 'ESCAPE_CHAR' => '\\',
67
+ 'KEYWORDS' => array(
68
+ 1 => array(
69
+ 'for', 'foreach', 'if', 'else', 'while', 'do',
70
+ 'switch', 'case', 'return', 'public',
71
+ 'private', 'protected', 'extends', 'break', 'class',
72
+ 'new', 'try', 'catch', 'throws', 'finally', 'implements',
73
+ 'interface', 'throw', 'final', 'native', 'synchronized', 'this',
74
+ 'abstract', 'transient', 'instanceof', 'assert', 'continue',
75
+ 'default', 'enum', 'package', 'static', 'strictfp', 'super',
76
+ 'volatile', 'const', 'goto', 'import'
77
+ ),
78
+ 2 => array(
79
+ 'null', 'false', 'true'
80
+ ),
81
+ 3 => array(
82
+ 'AbstractAction', 'AbstractBorder', 'AbstractButton',
83
+ 'AbstractCellEditor', 'AbstractCollection',
84
+ 'AbstractColorChooserPanel', 'AbstractDocument',
85
+ 'AbstractDocument.AttributeContext',
86
+ 'AbstractDocument.Content',
87
+ 'AbstractDocument.ElementEdit',
88
+ 'AbstractLayoutCache',
89
+ 'AbstractLayoutCache.NodeDimensions', 'AbstractList',
90
+ 'AbstractListModel', 'AbstractMap',
91
+ 'AbstractMethodError', 'AbstractSequentialList',
92
+ 'AbstractSet', 'AbstractTableModel',
93
+ 'AbstractUndoableEdit', 'AbstractWriter',
94
+ 'AccessControlContext', 'AccessControlException',
95
+ 'AccessController', 'AccessException', 'Accessible',
96
+ 'AccessibleAction', 'AccessibleBundle',
97
+ 'AccessibleComponent', 'AccessibleContext',
98
+ 'AccessibleHyperlink', 'AccessibleHypertext',
99
+ 'AccessibleIcon', 'AccessibleObject',
100
+ 'AccessibleRelation', 'AccessibleRelationSet',
101
+ 'AccessibleResourceBundle', 'AccessibleRole',
102
+ 'AccessibleSelection', 'AccessibleState',
103
+ 'AccessibleStateSet', 'AccessibleTable',
104
+ 'AccessibleTableModelChange', 'AccessibleText',
105
+ 'AccessibleValue', 'Acl', 'AclEntry',
106
+ 'AclNotFoundException', 'Action', 'ActionEvent',
107
+ 'ActionListener', 'ActionMap', 'ActionMapUIResource',
108
+ 'Activatable', 'ActivateFailedException',
109
+ 'ActivationDesc', 'ActivationException',
110
+ 'ActivationGroup', 'ActivationGroupDesc',
111
+ 'ActivationGroupDesc.CommandEnvironment',
112
+ 'ActivationGroupID', 'ActivationID',
113
+ 'ActivationInstantiator', 'ActivationMonitor',
114
+ 'ActivationSystem', 'Activator', 'ActiveEvent',
115
+ 'Adjustable', 'AdjustmentEvent',
116
+ 'AdjustmentListener', 'Adler32', 'AffineTransform',
117
+ 'AffineTransformOp', 'AlgorithmParameterGenerator',
118
+ 'AlgorithmParameterGeneratorSpi',
119
+ 'AlgorithmParameters', 'AlgorithmParameterSpec',
120
+ 'AlgorithmParametersSpi', 'AllPermission',
121
+ 'AlphaComposite', 'AlreadyBound',
122
+ 'AlreadyBoundException', 'AlreadyBoundHelper',
123
+ 'AlreadyBoundHolder', 'AncestorEvent',
124
+ 'AncestorListener', 'Annotation', 'Any', 'AnyHolder',
125
+ 'AnySeqHelper', 'AnySeqHolder', 'Applet',
126
+ 'AppletContext', 'AppletInitializer', 'AppletStub',
127
+ 'ApplicationException', 'Arc2D', 'Arc2D.Double',
128
+ 'Arc2D.Float', 'Area', 'AreaAveragingScaleFilter',
129
+ 'ARG_IN', 'ARG_INOUT', 'ARG_OUT',
130
+ 'ArithmeticException', 'Array',
131
+ 'ArrayIndexOutOfBoundsException', 'ArrayList',
132
+ 'Arrays', 'ArrayStoreException', 'AsyncBoxView',
133
+ 'Attribute', 'AttributedCharacterIterator',
134
+ 'AttributedCharacterIterator.Attribute',
135
+ 'AttributedString', 'AttributeInUseException',
136
+ 'AttributeList', 'AttributeModificationException',
137
+ 'Attributes', 'Attributes.Name', 'AttributeSet',
138
+ 'AttributeSet.CharacterAttribute',
139
+ 'AttributeSet.ColorAttribute',
140
+ 'AttributeSet.FontAttribute',
141
+ 'AttributeSet.ParagraphAttribute', 'AudioClip',
142
+ 'AudioFileFormat', 'AudioFileFormat.Type',
143
+ 'AudioFileReader', 'AudioFileWriter', 'AudioFormat',
144
+ 'AudioFormat.Encoding', 'AudioInputStream',
145
+ 'AudioPermission', 'AudioSystem',
146
+ 'AuthenticationException',
147
+ 'AuthenticationNotSupportedException',
148
+ 'Authenticator', 'Autoscroll', 'AWTError',
149
+ 'AWTEvent', 'AWTEventListener',
150
+ 'AWTEventMulticaster', 'AWTException',
151
+ 'AWTPermission', 'BadKind', 'BadLocationException',
152
+ 'BAD_CONTEXT', 'BAD_INV_ORDER', 'BAD_OPERATION',
153
+ 'BAD_PARAM', 'BAD_POLICY', 'BAD_POLICY_TYPE',
154
+ 'BAD_POLICY_VALUE', 'BAD_TYPECODE', 'BandCombineOp',
155
+ 'BandedSampleModel', 'BasicArrowButton',
156
+ 'BasicAttribute', 'BasicAttributes', 'BasicBorders',
157
+ 'BasicBorders.ButtonBorder',
158
+ 'BasicBorders.FieldBorder',
159
+ 'BasicBorders.MarginBorder',
160
+ 'BasicBorders.MenuBarBorder',
161
+ 'BasicBorders.RadioButtonBorder',
162
+ 'BasicBorders.SplitPaneBorder',
163
+ 'BasicBorders.ToggleButtonBorder',
164
+ 'BasicButtonListener', 'BasicButtonUI',
165
+ 'BasicCheckBoxMenuItemUI', 'BasicCheckBoxUI',
166
+ 'BasicColorChooserUI', 'BasicComboBoxEditor',
167
+ 'BasicComboBoxEditor.UIResource',
168
+ 'BasicComboBoxRenderer',
169
+ 'BasicComboBoxRenderer.UIResource',
170
+ 'BasicComboBoxUI', 'BasicComboPopup',
171
+ 'BasicDesktopIconUI', 'BasicDesktopPaneUI',
172
+ 'BasicDirectoryModel', 'BasicEditorPaneUI',
173
+ 'BasicFileChooserUI', 'BasicGraphicsUtils',
174
+ 'BasicHTML', 'BasicIconFactory',
175
+ 'BasicInternalFrameTitlePane',
176
+ 'BasicInternalFrameUI', 'BasicLabelUI',
177
+ 'BasicListUI', 'BasicLookAndFeel', 'BasicMenuBarUI',
178
+ 'BasicMenuItemUI', 'BasicMenuUI',
179
+ 'BasicOptionPaneUI',
180
+ 'BasicOptionPaneUI.ButtonAreaLayout', 'BasicPanelUI',
181
+ 'BasicPasswordFieldUI', 'BasicPermission',
182
+ 'BasicPopupMenuSeparatorUI', 'BasicPopupMenuUI',
183
+ 'BasicProgressBarUI', 'BasicRadioButtonMenuItemUI',
184
+ 'BasicRadioButtonUI', 'BasicRootPaneUI',
185
+ 'BasicScrollBarUI', 'BasicScrollPaneUI',
186
+ 'BasicSeparatorUI', 'BasicSliderUI',
187
+ 'BasicSplitPaneDivider', 'BasicSplitPaneUI',
188
+ 'BasicStroke', 'BasicTabbedPaneUI',
189
+ 'BasicTableHeaderUI', 'BasicTableUI',
190
+ 'BasicTextAreaUI', 'BasicTextFieldUI',
191
+ 'BasicTextPaneUI', 'BasicTextUI',
192
+ 'BasicTextUI.BasicCaret',
193
+ 'BasicTextUI.BasicHighlighter',
194
+ 'BasicToggleButtonUI', 'BasicToolBarSeparatorUI',
195
+ 'BasicToolBarUI', 'BasicToolTipUI', 'BasicTreeUI',
196
+ 'BasicViewportUI', 'BatchUpdateException',
197
+ 'BeanContext', 'BeanContextChild',
198
+ 'BeanContextChildComponentProxy',
199
+ 'BeanContextChildSupport',
200
+ 'BeanContextContainerProxy', 'BeanContextEvent',
201
+ 'BeanContextMembershipEvent',
202
+ 'BeanContextMembershipListener', 'BeanContextProxy',
203
+ 'BeanContextServiceAvailableEvent',
204
+ 'BeanContextServiceProvider',
205
+ 'BeanContextServiceProviderBeanInfo',
206
+ 'BeanContextServiceRevokedEvent',
207
+ 'BeanContextServiceRevokedListener',
208
+ 'BeanContextServices', 'BeanContextServicesListener',
209
+ 'BeanContextServicesSupport',
210
+ 'BeanContextServicesSupport.BCSSServiceProvider',
211
+ 'BeanContextSupport',
212
+ 'BeanContextSupport.BCSIterator', 'BeanDescriptor',
213
+ 'BeanInfo', 'Beans', 'BevelBorder', 'BigDecimal',
214
+ 'BigInteger', 'BinaryRefAddr', 'BindException',
215
+ 'Binding', 'BindingHelper', 'BindingHolder',
216
+ 'BindingIterator', 'BindingIteratorHelper',
217
+ 'BindingIteratorHolder', 'BindingIteratorOperations',
218
+ 'BindingListHelper', 'BindingListHolder',
219
+ 'BindingType', 'BindingTypeHelper',
220
+ 'BindingTypeHolder', 'BitSet', 'Blob', 'BlockView',
221
+ 'Book', 'Boolean', 'BooleanControl',
222
+ 'BooleanControl.Type', 'BooleanHolder',
223
+ 'BooleanSeqHelper', 'BooleanSeqHolder', 'Border',
224
+ 'BorderFactory', 'BorderLayout', 'BorderUIResource',
225
+ 'BorderUIResource.BevelBorderUIResource',
226
+ 'BorderUIResource.CompoundBorderUIResource',
227
+ 'BorderUIResource.EmptyBorderUIResource',
228
+ 'BorderUIResource.EtchedBorderUIResource',
229
+ 'BorderUIResource.LineBorderUIResource',
230
+ 'BorderUIResource.MatteBorderUIResource',
231
+ 'BorderUIResource.TitledBorderUIResource',
232
+ 'BoundedRangeModel', 'Bounds', 'Box', 'Box.Filler',
233
+ 'BoxedValueHelper', 'BoxLayout', 'BoxView',
234
+ 'BreakIterator', 'BufferedImage',
235
+ 'BufferedImageFilter', 'BufferedImageOp',
236
+ 'BufferedInputStream', 'BufferedOutputStream',
237
+ 'BufferedReader', 'BufferedWriter', 'Button',
238
+ 'ButtonGroup', 'ButtonModel', 'ButtonUI', 'Byte',
239
+ 'ByteArrayInputStream', 'ByteArrayOutputStream',
240
+ 'ByteHolder', 'ByteLookupTable', 'Calendar',
241
+ 'CallableStatement', 'CannotProceed',
242
+ 'CannotProceedException', 'CannotProceedHelper',
243
+ 'CannotProceedHolder', 'CannotRedoException',
244
+ 'CannotUndoException', 'Canvas', 'CardLayout',
245
+ 'Caret', 'CaretEvent', 'CaretListener', 'CellEditor',
246
+ 'CellEditorListener', 'CellRendererPane',
247
+ 'Certificate', 'Certificate.CertificateRep',
248
+ 'CertificateEncodingException',
249
+ 'CertificateException',
250
+ 'CertificateExpiredException', 'CertificateFactory',
251
+ 'CertificateFactorySpi',
252
+ 'CertificateNotYetValidException',
253
+ 'CertificateParsingException',
254
+ 'ChangedCharSetException', 'ChangeEvent',
255
+ 'ChangeListener', 'Character', 'Character.Subset',
256
+ 'Character.UnicodeBlock', 'CharacterIterator',
257
+ 'CharArrayReader', 'CharArrayWriter',
258
+ 'CharConversionException', 'CharHolder',
259
+ 'CharSeqHelper', 'CharSeqHolder', 'Checkbox',
260
+ 'CheckboxGroup', 'CheckboxMenuItem',
261
+ 'CheckedInputStream', 'CheckedOutputStream',
262
+ 'Checksum', 'Choice', 'ChoiceFormat', 'Class',
263
+ 'ClassCastException', 'ClassCircularityError',
264
+ 'ClassDesc', 'ClassFormatError', 'ClassLoader',
265
+ 'ClassNotFoundException', 'Clip', 'Clipboard',
266
+ 'ClipboardOwner', 'Clob', 'Cloneable',
267
+ 'CloneNotSupportedException', 'CMMException',
268
+ 'CodeSource', 'CollationElementIterator',
269
+ 'CollationKey', 'Collator', 'Collection',
270
+ 'Collections', 'Color',
271
+ 'ColorChooserComponentFactory', 'ColorChooserUI',
272
+ 'ColorConvertOp', 'ColorModel',
273
+ 'ColorSelectionModel', 'ColorSpace',
274
+ 'ColorUIResource', 'ComboBoxEditor', 'ComboBoxModel',
275
+ 'ComboBoxUI', 'ComboPopup', 'CommunicationException',
276
+ 'COMM_FAILURE', 'Comparable', 'Comparator',
277
+ 'Compiler', 'CompletionStatus',
278
+ 'CompletionStatusHelper', 'Component',
279
+ 'ComponentAdapter', 'ComponentColorModel',
280
+ 'ComponentEvent', 'ComponentInputMap',
281
+ 'ComponentInputMapUIResource', 'ComponentListener',
282
+ 'ComponentOrientation', 'ComponentSampleModel',
283
+ 'ComponentUI', 'ComponentView', 'Composite',
284
+ 'CompositeContext', 'CompositeName', 'CompositeView',
285
+ 'CompoundBorder', 'CompoundControl',
286
+ 'CompoundControl.Type', 'CompoundEdit',
287
+ 'CompoundName', 'ConcurrentModificationException',
288
+ 'ConfigurationException', 'ConnectException',
289
+ 'ConnectIOException', 'Connection', 'Constructor', 'Container',
290
+ 'ContainerAdapter', 'ContainerEvent',
291
+ 'ContainerListener', 'ContentHandler',
292
+ 'ContentHandlerFactory', 'ContentModel', 'Context',
293
+ 'ContextList', 'ContextNotEmptyException',
294
+ 'ContextualRenderedImageFactory', 'Control',
295
+ 'Control.Type', 'ControlFactory',
296
+ 'ControllerEventListener', 'ConvolveOp', 'CRC32',
297
+ 'CRL', 'CRLException', 'CropImageFilter', 'CSS',
298
+ 'CSS.Attribute', 'CTX_RESTRICT_SCOPE',
299
+ 'CubicCurve2D', 'CubicCurve2D.Double',
300
+ 'CubicCurve2D.Float', 'Current', 'CurrentHelper',
301
+ 'CurrentHolder', 'CurrentOperations', 'Cursor',
302
+ 'Customizer', 'CustomMarshal', 'CustomValue',
303
+ 'DatabaseMetaData', 'DataBuffer', 'DataBufferByte',
304
+ 'DataBufferInt', 'DataBufferShort',
305
+ 'DataBufferUShort', 'DataFlavor',
306
+ 'DataFormatException', 'DatagramPacket',
307
+ 'DatagramSocket', 'DatagramSocketImpl',
308
+ 'DatagramSocketImplFactory', 'DataInput',
309
+ 'DataInputStream', 'DataLine', 'DataLine.Info',
310
+ 'DataOutput', 'DataOutputStream',
311
+ 'DataTruncation', 'DATA_CONVERSION', 'Date',
312
+ 'DateFormat', 'DateFormatSymbols', 'DebugGraphics',
313
+ 'DecimalFormat', 'DecimalFormatSymbols',
314
+ 'DefaultBoundedRangeModel', 'DefaultButtonModel',
315
+ 'DefaultCaret', 'DefaultCellEditor',
316
+ 'DefaultColorSelectionModel', 'DefaultComboBoxModel',
317
+ 'DefaultDesktopManager', 'DefaultEditorKit',
318
+ 'DefaultEditorKit.BeepAction',
319
+ 'DefaultEditorKit.CopyAction',
320
+ 'DefaultEditorKit.CutAction',
321
+ 'DefaultEditorKit.DefaultKeyTypedAction',
322
+ 'DefaultEditorKit.InsertBreakAction',
323
+ 'DefaultEditorKit.InsertContentAction',
324
+ 'DefaultEditorKit.InsertTabAction',
325
+ 'DefaultEditorKit.PasteAction,',
326
+ 'DefaultFocusManager', 'DefaultHighlighter',
327
+ 'DefaultHighlighter.DefaultHighlightPainter',
328
+ 'DefaultListCellRenderer',
329
+ 'DefaultListCellRenderer.UIResource',
330
+ 'DefaultListModel', 'DefaultListSelectionModel',
331
+ 'DefaultMenuLayout', 'DefaultMetalTheme',
332
+ 'DefaultMutableTreeNode',
333
+ 'DefaultSingleSelectionModel',
334
+ 'DefaultStyledDocument',
335
+ 'DefaultStyledDocument.AttributeUndoableEdit',
336
+ 'DefaultStyledDocument.ElementSpec',
337
+ 'DefaultTableCellRenderer',
338
+ 'DefaultTableCellRenderer.UIResource',
339
+ 'DefaultTableColumnModel', 'DefaultTableModel',
340
+ 'DefaultTextUI', 'DefaultTreeCellEditor',
341
+ 'DefaultTreeCellRenderer', 'DefaultTreeModel',
342
+ 'DefaultTreeSelectionModel', 'DefinitionKind',
343
+ 'DefinitionKindHelper', 'Deflater',
344
+ 'DeflaterOutputStream', 'Delegate', 'DesignMode',
345
+ 'DesktopIconUI', 'DesktopManager', 'DesktopPaneUI',
346
+ 'DGC', 'Dialog', 'Dictionary', 'DigestException',
347
+ 'DigestInputStream', 'DigestOutputStream',
348
+ 'Dimension', 'Dimension2D', 'DimensionUIResource',
349
+ 'DirContext', 'DirectColorModel', 'DirectoryManager',
350
+ 'DirObjectFactory', 'DirStateFactory',
351
+ 'DirStateFactory.Result', 'DnDConstants', 'Document',
352
+ 'DocumentEvent', 'DocumentEvent.ElementChange',
353
+ 'DocumentEvent.EventType', 'DocumentListener',
354
+ 'DocumentParser', 'DomainCombiner', 'DomainManager',
355
+ 'DomainManagerOperations', 'Double', 'DoubleHolder',
356
+ 'DoubleSeqHelper', 'DoubleSeqHolder',
357
+ 'DragGestureEvent', 'DragGestureListener',
358
+ 'DragGestureRecognizer', 'DragSource',
359
+ 'DragSourceContext', 'DragSourceDragEvent',
360
+ 'DragSourceDropEvent', 'DragSourceEvent',
361
+ 'DragSourceListener', 'Driver', 'DriverManager',
362
+ 'DriverPropertyInfo', 'DropTarget',
363
+ 'DropTarget.DropTargetAutoScroller',
364
+ 'DropTargetContext', 'DropTargetDragEvent',
365
+ 'DropTargetDropEvent', 'DropTargetEvent',
366
+ 'DropTargetListener', 'DSAKey',
367
+ 'DSAKeyPairGenerator', 'DSAParameterSpec',
368
+ 'DSAParams', 'DSAPrivateKey', 'DSAPrivateKeySpec',
369
+ 'DSAPublicKey', 'DSAPublicKeySpec', 'DTD',
370
+ 'DTDConstants', 'DynamicImplementation', 'DynAny',
371
+ 'DynArray', 'DynEnum', 'DynFixed', 'DynSequence',
372
+ 'DynStruct', 'DynUnion', 'DynValue', 'EditorKit',
373
+ 'Element', 'ElementIterator', 'Ellipse2D',
374
+ 'Ellipse2D.Double', 'Ellipse2D.Float', 'EmptyBorder',
375
+ 'EmptyStackException', 'EncodedKeySpec', 'Entity',
376
+ 'EnumControl', 'EnumControl.Type', 'Enumeration',
377
+ 'Environment', 'EOFException', 'Error',
378
+ 'EtchedBorder', 'Event', 'EventContext',
379
+ 'EventDirContext', 'EventListener',
380
+ 'EventListenerList', 'EventObject', 'EventQueue',
381
+ 'EventSetDescriptor', 'Exception',
382
+ 'ExceptionInInitializerError', 'ExceptionList',
383
+ 'ExpandVetoException', 'ExportException',
384
+ 'ExtendedRequest', 'ExtendedResponse',
385
+ 'Externalizable', 'FeatureDescriptor', 'Field',
386
+ 'FieldNameHelper', 'FieldPosition', 'FieldView',
387
+ 'File', 'FileChooserUI', 'FileDescriptor',
388
+ 'FileDialog', 'FileFilter',
389
+ 'FileInputStream', 'FilenameFilter', 'FileNameMap',
390
+ 'FileNotFoundException', 'FileOutputStream',
391
+ 'FilePermission', 'FileReader', 'FileSystemView',
392
+ 'FileView', 'FileWriter', 'FilteredImageSource',
393
+ 'FilterInputStream', 'FilterOutputStream',
394
+ 'FilterReader', 'FilterWriter',
395
+ 'FixedHeightLayoutCache', 'FixedHolder',
396
+ 'FlatteningPathIterator', 'FlavorMap', 'Float',
397
+ 'FloatControl', 'FloatControl.Type', 'FloatHolder',
398
+ 'FloatSeqHelper', 'FloatSeqHolder', 'FlowLayout',
399
+ 'FlowView', 'FlowView.FlowStrategy', 'FocusAdapter',
400
+ 'FocusEvent', 'FocusListener', 'FocusManager',
401
+ 'Font', 'FontFormatException', 'FontMetrics',
402
+ 'FontRenderContext', 'FontUIResource', 'Format',
403
+ 'FormatConversionProvider', 'FormView', 'Frame',
404
+ 'FREE_MEM', 'GapContent', 'GeneralPath',
405
+ 'GeneralSecurityException', 'GlyphJustificationInfo',
406
+ 'GlyphMetrics', 'GlyphVector', 'GlyphView',
407
+ 'GlyphView.GlyphPainter', 'GradientPaint',
408
+ 'GraphicAttribute', 'Graphics', 'Graphics2D',
409
+ 'GraphicsConfigTemplate', 'GraphicsConfiguration',
410
+ 'GraphicsDevice', 'GraphicsEnvironment',
411
+ 'GrayFilter', 'GregorianCalendar',
412
+ 'GridBagConstraints', 'GridBagLayout', 'GridLayout',
413
+ 'Group', 'Guard', 'GuardedObject', 'GZIPInputStream',
414
+ 'GZIPOutputStream', 'HasControls', 'HashMap',
415
+ 'HashSet', 'Hashtable', 'HierarchyBoundsAdapter',
416
+ 'HierarchyBoundsListener', 'HierarchyEvent',
417
+ 'HierarchyListener', 'Highlighter',
418
+ 'Highlighter.Highlight',
419
+ 'Highlighter.HighlightPainter', 'HTML',
420
+ 'HTML.Attribute', 'HTML.Tag', 'HTML.UnknownTag',
421
+ 'HTMLDocument', 'HTMLDocument.Iterator',
422
+ 'HTMLEditorKit', 'HTMLEditorKit.HTMLFactory',
423
+ 'HTMLEditorKit.HTMLTextAction',
424
+ 'HTMLEditorKit.InsertHTMLTextAction',
425
+ 'HTMLEditorKit.LinkController',
426
+ 'HTMLEditorKit.Parser',
427
+ 'HTMLEditorKit.ParserCallback',
428
+ 'HTMLFrameHyperlinkEvent', 'HTMLWriter',
429
+ 'HttpURLConnection', 'HyperlinkEvent',
430
+ 'HyperlinkEvent.EventType', 'HyperlinkListener',
431
+ 'ICC_ColorSpace', 'ICC_Profile', 'ICC_ProfileGray',
432
+ 'ICC_ProfileRGB', 'Icon', 'IconUIResource',
433
+ 'IconView', 'IdentifierHelper', 'Identity',
434
+ 'IdentityScope', 'IDLEntity', 'IDLType',
435
+ 'IDLTypeHelper', 'IDLTypeOperations',
436
+ 'IllegalAccessError', 'IllegalAccessException',
437
+ 'IllegalArgumentException',
438
+ 'IllegalComponentStateException',
439
+ 'IllegalMonitorStateException',
440
+ 'IllegalPathStateException', 'IllegalStateException',
441
+ 'IllegalThreadStateException', 'Image',
442
+ 'ImageConsumer', 'ImageFilter',
443
+ 'ImageGraphicAttribute', 'ImageIcon',
444
+ 'ImageObserver', 'ImageProducer',
445
+ 'ImagingOpException', 'IMP_LIMIT',
446
+ 'IncompatibleClassChangeError',
447
+ 'InconsistentTypeCode', 'IndexColorModel',
448
+ 'IndexedPropertyDescriptor',
449
+ 'IndexOutOfBoundsException', 'IndirectionException',
450
+ 'InetAddress', 'Inflater', 'InflaterInputStream',
451
+ 'InheritableThreadLocal', 'InitialContext',
452
+ 'InitialContextFactory',
453
+ 'InitialContextFactoryBuilder', 'InitialDirContext',
454
+ 'INITIALIZE', 'Initializer', 'InitialLdapContext',
455
+ 'InlineView', 'InputContext', 'InputEvent',
456
+ 'InputMap', 'InputMapUIResource', 'InputMethod',
457
+ 'InputMethodContext', 'InputMethodDescriptor',
458
+ 'InputMethodEvent', 'InputMethodHighlight',
459
+ 'InputMethodListener', 'InputMethodRequests',
460
+ 'InputStream',
461
+ 'InputStreamReader', 'InputSubset', 'InputVerifier',
462
+ 'Insets', 'InsetsUIResource', 'InstantiationError',
463
+ 'InstantiationException', 'Instrument',
464
+ 'InsufficientResourcesException', 'Integer',
465
+ 'INTERNAL', 'InternalError', 'InternalFrameAdapter',
466
+ 'InternalFrameEvent', 'InternalFrameListener',
467
+ 'InternalFrameUI', 'InterruptedException',
468
+ 'InterruptedIOException',
469
+ 'InterruptedNamingException', 'INTF_REPOS',
470
+ 'IntHolder', 'IntrospectionException',
471
+ 'Introspector', 'Invalid',
472
+ 'InvalidAlgorithmParameterException',
473
+ 'InvalidAttributeIdentifierException',
474
+ 'InvalidAttributesException',
475
+ 'InvalidAttributeValueException',
476
+ 'InvalidClassException',
477
+ 'InvalidDnDOperationException',
478
+ 'InvalidKeyException', 'InvalidKeySpecException',
479
+ 'InvalidMidiDataException', 'InvalidName',
480
+ 'InvalidNameException',
481
+ 'InvalidNameHelper', 'InvalidNameHolder',
482
+ 'InvalidObjectException',
483
+ 'InvalidParameterException',
484
+ 'InvalidParameterSpecException',
485
+ 'InvalidSearchControlsException',
486
+ 'InvalidSearchFilterException', 'InvalidSeq',
487
+ 'InvalidTransactionException', 'InvalidValue',
488
+ 'INVALID_TRANSACTION', 'InvocationEvent',
489
+ 'InvocationHandler', 'InvocationTargetException',
490
+ 'InvokeHandler', 'INV_FLAG', 'INV_IDENT',
491
+ 'INV_OBJREF', 'INV_POLICY', 'IOException',
492
+ 'IRObject', 'IRObjectOperations', 'IstringHelper',
493
+ 'ItemEvent', 'ItemListener', 'ItemSelectable',
494
+ 'Iterator', 'JApplet', 'JarEntry', 'JarException',
495
+ 'JarFile', 'JarInputStream', 'JarOutputStream',
496
+ 'JarURLConnection', 'JButton', 'JCheckBox',
497
+ 'JCheckBoxMenuItem', 'JColorChooser', 'JComboBox',
498
+ 'JComboBox.KeySelectionManager', 'JComponent',
499
+ 'JDesktopPane', 'JDialog', 'JEditorPane',
500
+ 'JFileChooser', 'JFrame', 'JInternalFrame',
501
+ 'JInternalFrame.JDesktopIcon', 'JLabel',
502
+ 'JLayeredPane', 'JList', 'JMenu', 'JMenuBar',
503
+ 'JMenuItem', 'JobAttributes',
504
+ 'JobAttributes.DefaultSelectionType',
505
+ 'JobAttributes.DestinationType',
506
+ 'JobAttributes.DialogType',
507
+ 'JobAttributes.MultipleDocumentHandlingType',
508
+ 'JobAttributes.SidesType', 'JOptionPane', 'JPanel',
509
+ 'JPasswordField', 'JPopupMenu',
510
+ 'JPopupMenu.Separator', 'JProgressBar',
511
+ 'JRadioButton', 'JRadioButtonMenuItem', 'JRootPane',
512
+ 'JScrollBar', 'JScrollPane', 'JSeparator', 'JSlider',
513
+ 'JSplitPane', 'JTabbedPane', 'JTable',
514
+ 'JTableHeader', 'JTextArea', 'JTextComponent',
515
+ 'JTextComponent.KeyBinding', 'JTextField',
516
+ 'JTextPane', 'JToggleButton',
517
+ 'JToggleButton.ToggleButtonModel', 'JToolBar',
518
+ 'JToolBar.Separator', 'JToolTip', 'JTree',
519
+ 'JTree.DynamicUtilTreeNode',
520
+ 'JTree.EmptySelectionModel', 'JViewport', 'JWindow',
521
+ 'Kernel', 'Key', 'KeyAdapter', 'KeyEvent',
522
+ 'KeyException', 'KeyFactory', 'KeyFactorySpi',
523
+ 'KeyListener', 'KeyManagementException', 'Keymap',
524
+ 'KeyPair', 'KeyPairGenerator', 'KeyPairGeneratorSpi',
525
+ 'KeySpec', 'KeyStore', 'KeyStoreException',
526
+ 'KeyStoreSpi', 'KeyStroke', 'Label', 'LabelUI',
527
+ 'LabelView', 'LastOwnerException',
528
+ 'LayeredHighlighter',
529
+ 'LayeredHighlighter.LayerPainter', 'LayoutManager',
530
+ 'LayoutManager2', 'LayoutQueue', 'LdapContext',
531
+ 'LdapReferralException', 'Lease',
532
+ 'LimitExceededException', 'Line', 'Line.Info',
533
+ 'Line2D', 'Line2D.Double', 'Line2D.Float',
534
+ 'LineBorder', 'LineBreakMeasurer', 'LineEvent',
535
+ 'LineEvent.Type', 'LineListener', 'LineMetrics',
536
+ 'LineNumberInputStream', 'LineNumberReader',
537
+ 'LineUnavailableException', 'LinkageError',
538
+ 'LinkedList', 'LinkException', 'LinkLoopException',
539
+ 'LinkRef', 'List', 'ListCellRenderer',
540
+ 'ListDataEvent', 'ListDataListener', 'ListIterator',
541
+ 'ListModel', 'ListResourceBundle',
542
+ 'ListSelectionEvent', 'ListSelectionListener',
543
+ 'ListSelectionModel', 'ListUI', 'ListView',
544
+ 'LoaderHandler', 'Locale', 'LocateRegistry',
545
+ 'LogStream', 'Long', 'LongHolder',
546
+ 'LongLongSeqHelper', 'LongLongSeqHolder',
547
+ 'LongSeqHelper', 'LongSeqHolder', 'LookAndFeel',
548
+ 'LookupOp', 'LookupTable', 'MalformedLinkException',
549
+ 'MalformedURLException', 'Manifest', 'Map',
550
+ 'Map.Entry', 'MARSHAL', 'MarshalException',
551
+ 'MarshalledObject', 'Math', 'MatteBorder',
552
+ 'MediaTracker', 'Member', 'MemoryImageSource',
553
+ 'Menu', 'MenuBar', 'MenuBarUI', 'MenuComponent',
554
+ 'MenuContainer', 'MenuDragMouseEvent',
555
+ 'MenuDragMouseListener', 'MenuElement', 'MenuEvent',
556
+ 'MenuItem', 'MenuItemUI', 'MenuKeyEvent',
557
+ 'MenuKeyListener', 'MenuListener',
558
+ 'MenuSelectionManager', 'MenuShortcut',
559
+ 'MessageDigest', 'MessageDigestSpi', 'MessageFormat',
560
+ 'MetaEventListener', 'MetalBorders',
561
+ 'MetalBorders.ButtonBorder',
562
+ 'MetalBorders.Flush3DBorder',
563
+ 'MetalBorders.InternalFrameBorder',
564
+ 'MetalBorders.MenuBarBorder',
565
+ 'MetalBorders.MenuItemBorder',
566
+ 'MetalBorders.OptionDialogBorder',
567
+ 'MetalBorders.PaletteBorder',
568
+ 'MetalBorders.PopupMenuBorder',
569
+ 'MetalBorders.RolloverButtonBorder',
570
+ 'MetalBorders.ScrollPaneBorder',
571
+ 'MetalBorders.TableHeaderBorder',
572
+ 'MetalBorders.TextFieldBorder',
573
+ 'MetalBorders.ToggleButtonBorder',
574
+ 'MetalBorders.ToolBarBorder', 'MetalButtonUI',
575
+ 'MetalCheckBoxIcon', 'MetalCheckBoxUI',
576
+ 'MetalComboBoxButton', 'MetalComboBoxEditor',
577
+ 'MetalComboBoxEditor.UIResource',
578
+ 'MetalComboBoxIcon', 'MetalComboBoxUI',
579
+ 'MetalDesktopIconUI', 'MetalFileChooserUI',
580
+ 'MetalIconFactory', 'MetalIconFactory.FileIcon16',
581
+ 'MetalIconFactory.FolderIcon16',
582
+ 'MetalIconFactory.PaletteCloseIcon',
583
+ 'MetalIconFactory.TreeControlIcon',
584
+ 'MetalIconFactory.TreeFolderIcon',
585
+ 'MetalIconFactory.TreeLeafIcon',
586
+ 'MetalInternalFrameTitlePane',
587
+ 'MetalInternalFrameUI', 'MetalLabelUI',
588
+ 'MetalLookAndFeel', 'MetalPopupMenuSeparatorUI',
589
+ 'MetalProgressBarUI', 'MetalRadioButtonUI',
590
+ 'MetalScrollBarUI', 'MetalScrollButton',
591
+ 'MetalScrollPaneUI', 'MetalSeparatorUI',
592
+ 'MetalSliderUI', 'MetalSplitPaneUI',
593
+ 'MetalTabbedPaneUI', 'MetalTextFieldUI',
594
+ 'MetalTheme', 'MetalToggleButtonUI',
595
+ 'MetalToolBarUI', 'MetalToolTipUI', 'MetalTreeUI',
596
+ 'MetaMessage', 'Method', 'MethodDescriptor',
597
+ 'MidiChannel', 'MidiDevice', 'MidiDevice.Info',
598
+ 'MidiDeviceProvider', 'MidiEvent', 'MidiFileFormat',
599
+ 'MidiFileReader', 'MidiFileWriter', 'MidiMessage',
600
+ 'MidiSystem', 'MidiUnavailableException',
601
+ 'MimeTypeParseException', 'MinimalHTMLWriter',
602
+ 'MissingResourceException', 'Mixer', 'Mixer.Info',
603
+ 'MixerProvider', 'ModificationItem', 'Modifier',
604
+ 'MouseAdapter', 'MouseDragGestureRecognizer',
605
+ 'MouseEvent', 'MouseInputAdapter',
606
+ 'MouseInputListener', 'MouseListener',
607
+ 'MouseMotionAdapter', 'MouseMotionListener',
608
+ 'MultiButtonUI', 'MulticastSocket',
609
+ 'MultiColorChooserUI', 'MultiComboBoxUI',
610
+ 'MultiDesktopIconUI', 'MultiDesktopPaneUI',
611
+ 'MultiFileChooserUI', 'MultiInternalFrameUI',
612
+ 'MultiLabelUI', 'MultiListUI', 'MultiLookAndFeel',
613
+ 'MultiMenuBarUI', 'MultiMenuItemUI',
614
+ 'MultiOptionPaneUI', 'MultiPanelUI',
615
+ 'MultiPixelPackedSampleModel', 'MultipleMaster',
616
+ 'MultiPopupMenuUI', 'MultiProgressBarUI',
617
+ 'MultiScrollBarUI', 'MultiScrollPaneUI',
618
+ 'MultiSeparatorUI', 'MultiSliderUI',
619
+ 'MultiSplitPaneUI', 'MultiTabbedPaneUI',
620
+ 'MultiTableHeaderUI', 'MultiTableUI', 'MultiTextUI',
621
+ 'MultiToolBarUI', 'MultiToolTipUI', 'MultiTreeUI',
622
+ 'MultiViewportUI', 'MutableAttributeSet',
623
+ 'MutableComboBoxModel', 'MutableTreeNode', 'Name',
624
+ 'NameAlreadyBoundException', 'NameClassPair',
625
+ 'NameComponent', 'NameComponentHelper',
626
+ 'NameComponentHolder', 'NamedValue', 'NameHelper',
627
+ 'NameHolder', 'NameNotFoundException', 'NameParser',
628
+ 'NamespaceChangeListener', 'NameValuePair',
629
+ 'NameValuePairHelper', 'Naming', 'NamingContext',
630
+ 'NamingContextHelper', 'NamingContextHolder',
631
+ 'NamingContextOperations', 'NamingEnumeration',
632
+ 'NamingEvent', 'NamingException',
633
+ 'NamingExceptionEvent', 'NamingListener',
634
+ 'NamingManager', 'NamingSecurityException',
635
+ 'NegativeArraySizeException', 'NetPermission',
636
+ 'NoClassDefFoundError', 'NoInitialContextException',
637
+ 'NoninvertibleTransformException',
638
+ 'NoPermissionException', 'NoRouteToHostException',
639
+ 'NoSuchAlgorithmException',
640
+ 'NoSuchAttributeException', 'NoSuchElementException',
641
+ 'NoSuchFieldError', 'NoSuchFieldException',
642
+ 'NoSuchMethodError', 'NoSuchMethodException',
643
+ 'NoSuchObjectException', 'NoSuchProviderException',
644
+ 'NotActiveException', 'NotBoundException',
645
+ 'NotContextException', 'NotEmpty', 'NotEmptyHelper',
646
+ 'NotEmptyHolder', 'NotFound', 'NotFoundHelper',
647
+ 'NotFoundHolder', 'NotFoundReason',
648
+ 'NotFoundReasonHelper', 'NotFoundReasonHolder',
649
+ 'NotOwnerException', 'NotSerializableException',
650
+ 'NO_IMPLEMENT', 'NO_MEMORY', 'NO_PERMISSION',
651
+ 'NO_RESOURCES', 'NO_RESPONSE',
652
+ 'NullPointerException', 'Number', 'NumberFormat',
653
+ 'NumberFormatException', 'NVList', 'Object',
654
+ 'ObjectChangeListener', 'ObjectFactory',
655
+ 'ObjectFactoryBuilder', 'ObjectHelper',
656
+ 'ObjectHolder', 'ObjectImpl',
657
+ 'ObjectInput', 'ObjectInputStream',
658
+ 'ObjectInputStream.GetField',
659
+ 'ObjectInputValidation', 'ObjectOutput',
660
+ 'ObjectOutputStream', 'ObjectOutputStream.PutField',
661
+ 'ObjectStreamClass', 'ObjectStreamConstants',
662
+ 'ObjectStreamException', 'ObjectStreamField',
663
+ 'ObjectView', 'OBJECT_NOT_EXIST', 'ObjID',
664
+ 'OBJ_ADAPTER', 'Observable', 'Observer',
665
+ 'OctetSeqHelper', 'OctetSeqHolder', 'OMGVMCID',
666
+ 'OpenType', 'Operation',
667
+ 'OperationNotSupportedException', 'Option',
668
+ 'OptionalDataException', 'OptionPaneUI', 'ORB',
669
+ 'OutOfMemoryError', 'OutputStream',
670
+ 'OutputStreamWriter', 'OverlayLayout', 'Owner',
671
+ 'Package', 'PackedColorModel', 'Pageable',
672
+ 'PageAttributes', 'PageAttributes.ColorType',
673
+ 'PageAttributes.MediaType',
674
+ 'PageAttributes.OrientationRequestedType',
675
+ 'PageAttributes.OriginType',
676
+ 'PageAttributes.PrintQualityType', 'PageFormat',
677
+ 'Paint', 'PaintContext', 'PaintEvent', 'Panel',
678
+ 'PanelUI', 'Paper', 'ParagraphView',
679
+ 'ParameterBlock', 'ParameterDescriptor',
680
+ 'ParseException', 'ParsePosition', 'Parser',
681
+ 'ParserDelegator', 'PartialResultException',
682
+ 'PasswordAuthentication', 'PasswordView', 'Patch',
683
+ 'PathIterator', 'Permission',
684
+ 'PermissionCollection', 'Permissions',
685
+ 'PERSIST_STORE', 'PhantomReference',
686
+ 'PipedInputStream', 'PipedOutputStream',
687
+ 'PipedReader', 'PipedWriter', 'PixelGrabber',
688
+ 'PixelInterleavedSampleModel', 'PKCS8EncodedKeySpec',
689
+ 'PlainDocument', 'PlainView', 'Point', 'Point2D',
690
+ 'Point2D.Double', 'Point2D.Float', 'Policy',
691
+ 'PolicyError', 'PolicyHelper',
692
+ 'PolicyHolder', 'PolicyListHelper',
693
+ 'PolicyListHolder', 'PolicyOperations',
694
+ 'PolicyTypeHelper', 'Polygon', 'PopupMenu',
695
+ 'PopupMenuEvent', 'PopupMenuListener', 'PopupMenuUI',
696
+ 'Port', 'Port.Info', 'PortableRemoteObject',
697
+ 'PortableRemoteObjectDelegate', 'Position',
698
+ 'Position.Bias', 'PreparedStatement', 'Principal',
699
+ 'PrincipalHolder', 'Printable',
700
+ 'PrinterAbortException', 'PrinterException',
701
+ 'PrinterGraphics', 'PrinterIOException',
702
+ 'PrinterJob', 'PrintGraphics', 'PrintJob',
703
+ 'PrintStream', 'PrintWriter', 'PrivateKey',
704
+ 'PRIVATE_MEMBER', 'PrivilegedAction',
705
+ 'PrivilegedActionException',
706
+ 'PrivilegedExceptionAction', 'Process',
707
+ 'ProfileDataException', 'ProgressBarUI',
708
+ 'ProgressMonitor', 'ProgressMonitorInputStream',
709
+ 'Properties', 'PropertyChangeEvent',
710
+ 'PropertyChangeListener', 'PropertyChangeSupport',
711
+ 'PropertyDescriptor', 'PropertyEditor',
712
+ 'PropertyEditorManager', 'PropertyEditorSupport',
713
+ 'PropertyPermission', 'PropertyResourceBundle',
714
+ 'PropertyVetoException', 'ProtectionDomain',
715
+ 'ProtocolException', 'Provider', 'ProviderException',
716
+ 'Proxy', 'PublicKey', 'PUBLIC_MEMBER',
717
+ 'PushbackInputStream', 'PushbackReader',
718
+ 'QuadCurve2D', 'QuadCurve2D.Double',
719
+ 'QuadCurve2D.Float', 'Random', 'RandomAccessFile',
720
+ 'Raster', 'RasterFormatException', 'RasterOp',
721
+ 'Reader', 'Receiver', 'Rectangle', 'Rectangle2D',
722
+ 'Rectangle2D.Double', 'Rectangle2D.Float',
723
+ 'RectangularShape', 'Ref', 'RefAddr', 'Reference',
724
+ 'Referenceable', 'ReferenceQueue',
725
+ 'ReferralException', 'ReflectPermission', 'Registry',
726
+ 'RegistryHandler', 'RemarshalException', 'Remote',
727
+ 'RemoteCall', 'RemoteException', 'RemoteObject',
728
+ 'RemoteRef', 'RemoteServer', 'RemoteStub',
729
+ 'RenderableImage', 'RenderableImageOp',
730
+ 'RenderableImageProducer', 'RenderContext',
731
+ 'RenderedImage', 'RenderedImageFactory', 'Renderer',
732
+ 'RenderingHints', 'RenderingHints.Key',
733
+ 'RepaintManager', 'ReplicateScaleFilter',
734
+ 'Repository', 'RepositoryIdHelper', 'Request',
735
+ 'RescaleOp', 'Resolver', 'ResolveResult',
736
+ 'ResourceBundle', 'ResponseHandler', 'ResultSet',
737
+ 'ResultSetMetaData', 'ReverbType', 'RGBImageFilter',
738
+ 'RMIClassLoader', 'RMIClientSocketFactory',
739
+ 'RMIFailureHandler', 'RMISecurityException',
740
+ 'RMISecurityManager', 'RMIServerSocketFactory',
741
+ 'RMISocketFactory', 'Robot', 'RootPaneContainer',
742
+ 'RootPaneUI', 'RoundRectangle2D',
743
+ 'RoundRectangle2D.Double', 'RoundRectangle2D.Float',
744
+ 'RowMapper', 'RSAKey', 'RSAKeyGenParameterSpec',
745
+ 'RSAPrivateCrtKey', 'RSAPrivateCrtKeySpec',
746
+ 'RSAPrivateKey', 'RSAPrivateKeySpec', 'RSAPublicKey',
747
+ 'RSAPublicKeySpec', 'RTFEditorKit',
748
+ 'RuleBasedCollator', 'Runnable', 'RunTime',
749
+ 'Runtime', 'RuntimeException', 'RunTimeOperations',
750
+ 'RuntimePermission', 'SampleModel',
751
+ 'SchemaViolationException', 'Scrollable',
752
+ 'Scrollbar', 'ScrollBarUI', 'ScrollPane',
753
+ 'ScrollPaneConstants', 'ScrollPaneLayout',
754
+ 'ScrollPaneLayout.UIResource', 'ScrollPaneUI',
755
+ 'SearchControls', 'SearchResult',
756
+ 'SecureClassLoader', 'SecureRandom',
757
+ 'SecureRandomSpi', 'Security', 'SecurityException',
758
+ 'SecurityManager', 'SecurityPermission', 'Segment',
759
+ 'SeparatorUI', 'Sequence', 'SequenceInputStream',
760
+ 'Sequencer', 'Sequencer.SyncMode', 'Serializable',
761
+ 'SerializablePermission', 'ServantObject',
762
+ 'ServerCloneException', 'ServerError',
763
+ 'ServerException', 'ServerNotActiveException',
764
+ 'ServerRef', 'ServerRequest',
765
+ 'ServerRuntimeException', 'ServerSocket',
766
+ 'ServiceDetail', 'ServiceDetailHelper',
767
+ 'ServiceInformation', 'ServiceInformationHelper',
768
+ 'ServiceInformationHolder',
769
+ 'ServiceUnavailableException', 'Set',
770
+ 'SetOverrideType', 'SetOverrideTypeHelper', 'Shape',
771
+ 'ShapeGraphicAttribute', 'Short', 'ShortHolder',
772
+ 'ShortLookupTable', 'ShortMessage', 'ShortSeqHelper',
773
+ 'ShortSeqHolder', 'Signature', 'SignatureException',
774
+ 'SignatureSpi', 'SignedObject', 'Signer',
775
+ 'SimpleAttributeSet', 'SimpleBeanInfo',
776
+ 'SimpleDateFormat', 'SimpleTimeZone',
777
+ 'SinglePixelPackedSampleModel',
778
+ 'SingleSelectionModel', 'SizeLimitExceededException',
779
+ 'SizeRequirements', 'SizeSequence', 'Skeleton',
780
+ 'SkeletonMismatchException',
781
+ 'SkeletonNotFoundException', 'SliderUI', 'Socket',
782
+ 'SocketException', 'SocketImpl', 'SocketImplFactory',
783
+ 'SocketOptions', 'SocketPermission',
784
+ 'SocketSecurityException', 'SoftBevelBorder',
785
+ 'SoftReference', 'SortedMap', 'SortedSet',
786
+ 'Soundbank', 'SoundbankReader', 'SoundbankResource',
787
+ 'SourceDataLine', 'SplitPaneUI', 'SQLData',
788
+ 'SQLException', 'SQLInput', 'SQLOutput',
789
+ 'SQLPermission', 'SQLWarning', 'Stack',
790
+ 'StackOverflowError', 'StateEdit', 'StateEditable',
791
+ 'StateFactory', 'Statement', 'Streamable',
792
+ 'StreamableValue', 'StreamCorruptedException',
793
+ 'StreamTokenizer', 'StrictMath', 'String',
794
+ 'StringBuffer', 'StringBufferInputStream',
795
+ 'StringCharacterIterator', 'StringContent',
796
+ 'StringHolder', 'StringIndexOutOfBoundsException',
797
+ 'StringReader', 'StringRefAddr', 'StringSelection',
798
+ 'StringTokenizer', 'StringValueHelper',
799
+ 'StringWriter', 'Stroke', 'Struct', 'StructMember',
800
+ 'StructMemberHelper', 'Stub', 'StubDelegate',
801
+ 'StubNotFoundException', 'Style', 'StyleConstants',
802
+ 'StyleConstants.CharacterConstants',
803
+ 'StyleConstants.ColorConstants',
804
+ 'StyleConstants.FontConstants',
805
+ 'StyleConstants.ParagraphConstants', 'StyleContext',
806
+ 'StyledDocument', 'StyledEditorKit',
807
+ 'StyledEditorKit.AlignmentAction',
808
+ 'StyledEditorKit.BoldAction',
809
+ 'StyledEditorKit.FontFamilyAction',
810
+ 'StyledEditorKit.FontSizeAction',
811
+ 'StyledEditorKit.ForegroundAction',
812
+ 'StyledEditorKit.ItalicAction',
813
+ 'StyledEditorKit.StyledTextAction',
814
+ 'StyledEditorKit.UnderlineAction', 'StyleSheet',
815
+ 'StyleSheet.BoxPainter', 'StyleSheet.ListPainter',
816
+ 'SwingConstants', 'SwingPropertyChangeSupport',
817
+ 'SwingUtilities', 'SyncFailedException',
818
+ 'Synthesizer', 'SysexMessage', 'System',
819
+ 'SystemColor', 'SystemException', 'SystemFlavorMap',
820
+ 'TabableView', 'TabbedPaneUI', 'TabExpander',
821
+ 'TableCellEditor', 'TableCellRenderer',
822
+ 'TableColumn', 'TableColumnModel',
823
+ 'TableColumnModelEvent', 'TableColumnModelListener',
824
+ 'TableHeaderUI', 'TableModel', 'TableModelEvent',
825
+ 'TableModelListener', 'TableUI', 'TableView',
826
+ 'TabSet', 'TabStop', 'TagElement', 'TargetDataLine',
827
+ 'TCKind', 'TextAction', 'TextArea', 'TextAttribute',
828
+ 'TextComponent', 'TextEvent', 'TextField',
829
+ 'TextHitInfo', 'TextLayout',
830
+ 'TextLayout.CaretPolicy', 'TextListener',
831
+ 'TextMeasurer', 'TextUI', 'TexturePaint', 'Thread',
832
+ 'ThreadDeath', 'ThreadGroup', 'ThreadLocal',
833
+ 'Throwable', 'Tie', 'TileObserver', 'Time',
834
+ 'TimeLimitExceededException', 'Timer',
835
+ 'TimerTask', 'Timestamp', 'TimeZone', 'TitledBorder',
836
+ 'ToolBarUI', 'Toolkit', 'ToolTipManager',
837
+ 'ToolTipUI', 'TooManyListenersException', 'Track',
838
+ 'TransactionRequiredException',
839
+ 'TransactionRolledbackException',
840
+ 'TRANSACTION_REQUIRED', 'TRANSACTION_ROLLEDBACK',
841
+ 'Transferable', 'TransformAttribute', 'TRANSIENT',
842
+ 'Transmitter', 'Transparency', 'TreeCellEditor',
843
+ 'TreeCellRenderer', 'TreeExpansionEvent',
844
+ 'TreeExpansionListener', 'TreeMap', 'TreeModel',
845
+ 'TreeModelEvent', 'TreeModelListener', 'TreeNode',
846
+ 'TreePath', 'TreeSelectionEvent',
847
+ 'TreeSelectionListener', 'TreeSelectionModel',
848
+ 'TreeSet', 'TreeUI', 'TreeWillExpandListener',
849
+ 'TypeCode', 'TypeCodeHolder', 'TypeMismatch',
850
+ 'Types', 'UID', 'UIDefaults',
851
+ 'UIDefaults.ActiveValue', 'UIDefaults.LazyInputMap',
852
+ 'UIDefaults.LazyValue', 'UIDefaults.ProxyLazyValue',
853
+ 'UIManager', 'UIManager.LookAndFeelInfo',
854
+ 'UIResource', 'ULongLongSeqHelper',
855
+ 'ULongLongSeqHolder', 'ULongSeqHelper',
856
+ 'ULongSeqHolder', 'UndeclaredThrowableException',
857
+ 'UndoableEdit', 'UndoableEditEvent',
858
+ 'UndoableEditListener', 'UndoableEditSupport',
859
+ 'UndoManager', 'UnexpectedException',
860
+ 'UnicastRemoteObject', 'UnionMember',
861
+ 'UnionMemberHelper', 'UNKNOWN', 'UnknownError',
862
+ 'UnknownException', 'UnknownGroupException',
863
+ 'UnknownHostException',
864
+ 'UnknownObjectException', 'UnknownServiceException',
865
+ 'UnknownUserException', 'UnmarshalException',
866
+ 'UnrecoverableKeyException', 'Unreferenced',
867
+ 'UnresolvedPermission', 'UnsatisfiedLinkError',
868
+ 'UnsolicitedNotification',
869
+ 'UnsolicitedNotificationEvent',
870
+ 'UnsolicitedNotificationListener',
871
+ 'UnsupportedAudioFileException',
872
+ 'UnsupportedClassVersionError',
873
+ 'UnsupportedEncodingException',
874
+ 'UnsupportedFlavorException',
875
+ 'UnsupportedLookAndFeelException',
876
+ 'UnsupportedOperationException',
877
+ 'UNSUPPORTED_POLICY', 'UNSUPPORTED_POLICY_VALUE',
878
+ 'URL', 'URLClassLoader', 'URLConnection',
879
+ 'URLDecoder', 'URLEncoder', 'URLStreamHandler',
880
+ 'URLStreamHandlerFactory', 'UserException',
881
+ 'UShortSeqHelper', 'UShortSeqHolder',
882
+ 'UTFDataFormatException', 'Util', 'UtilDelegate',
883
+ 'Utilities', 'ValueBase', 'ValueBaseHelper',
884
+ 'ValueBaseHolder', 'ValueFactory', 'ValueHandler',
885
+ 'ValueMember', 'ValueMemberHelper',
886
+ 'VariableHeightLayoutCache', 'Vector', 'VerifyError',
887
+ 'VersionSpecHelper', 'VetoableChangeListener',
888
+ 'VetoableChangeSupport', 'View', 'ViewFactory',
889
+ 'ViewportLayout', 'ViewportUI',
890
+ 'VirtualMachineError', 'Visibility',
891
+ 'VisibilityHelper', 'VMID', 'VM_ABSTRACT',
892
+ 'VM_CUSTOM', 'VM_NONE', 'VM_TRUNCATABLE',
893
+ 'VoiceStatus', 'Void', 'WCharSeqHelper',
894
+ 'WCharSeqHolder', 'WeakHashMap', 'WeakReference',
895
+ 'Window', 'WindowAdapter', 'WindowConstants',
896
+ 'WindowEvent', 'WindowListener', 'WrappedPlainView',
897
+ 'WritableRaster', 'WritableRenderedImage',
898
+ 'WriteAbortedException', 'Writer',
899
+ 'WrongTransaction', 'WStringValueHelper',
900
+ 'X509Certificate', 'X509CRL', 'X509CRLEntry',
901
+ 'X509EncodedKeySpec', 'X509Extension', 'ZipEntry',
902
+ 'ZipException', 'ZipFile', 'ZipInputStream',
903
+ 'ZipOutputStream', 'ZoneView',
904
+ '_BindingIteratorImplBase', '_BindingIteratorStub',
905
+ '_IDLTypeStub', '_NamingContextImplBase',
906
+ '_NamingContextStub', '_PolicyStub', '_Remote_Stub'
907
+ ),
908
+ 4 => array(
909
+ 'void', 'double', 'int', 'boolean', 'byte', 'short', 'long', 'char', 'float'
910
+ )
911
+ ),
912
+ 'SYMBOLS' => array(
913
+ '(', ')', '[', ']', '{', '}',
914
+ '+', '-', '*', '/', '%',
915
+ '!', '&', '|', '^',
916
+ '<', '>', '=',
917
+ '?', ':', ';',
918
+ ),
919
+ 'CASE_SENSITIVE' => array(
920
+ GESHI_COMMENTS => false,
921
+ 1 => false,
922
+ 2 => false,
923
+ 3 => true,
924
+ 4 => true
925
+ ),
926
+ 'STYLES' => array(
927
+ 'KEYWORDS' => array(
928
+ 1 => 'color: #000000; font-weight: bold;',
929
+ 2 => 'color: #000066; font-weight: bold;',
930
+ 3 => 'color: #003399;',
931
+ 4 => 'color: #000066; font-weight: bold;'
932
+ ),
933
+ 'COMMENTS' => array(
934
+ 1 => 'color: #666666; font-style: italic;',
935
+ 2 => 'color: #006699;',
936
+ 3 => 'color: #008000; font-style: italic; font-weight: bold;',
937
+ 3 => 'color: #008000; font-style: italic; font-weight: bold;',
938
+ 'MULTI' => 'color: #666666; font-style: italic;'
939
+ ),
940
+ 'ESCAPE_CHAR' => array(
941
+ 0 => 'color: #000099; font-weight: bold;'
942
+ ),
943
+ 'BRACKETS' => array(
944
+ 0 => 'color: #009900;'
945
+ ),
946
+ 'STRINGS' => array(
947
+ 0 => 'color: #0000ff;'
948
+ ),
949
+ 'NUMBERS' => array(
950
+ 0 => 'color: #cc66cc;'
951
+ ),
952
+ 'METHODS' => array(
953
+ 1 => 'color: #006633;',
954
+ 2 => 'color: #006633;'
955
+ ),
956
+ 'SYMBOLS' => array(
957
+ 0 => 'color: #339933;'
958
+ ),
959
+ 'SCRIPT' => array(
960
+ ),
961
+ 'REGEXPS' => array(
962
+ )
963
+ ),
964
+ 'URLS' => array(
965
+ 1 => '',
966
+ 2 => '',
967
+ 3 => 'http://www.google.com/search?hl=en&amp;q=allinurl%3A{FNAMEL}+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky',
968
+ 4 => ''
969
+ ),
970
+ 'OOLANG' => true,
971
+ 'OBJECT_SPLITTERS' => array(
972
+ 1 => '.'
973
+ ),
974
+ 'REGEXPS' => array(
975
+ ),
976
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
977
+ 'SCRIPT_DELIMITERS' => array(
978
+ ),
979
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
980
+ )
981
+ );
982
+
983
+ ?>
lib/geshi/javascript.php ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*************************************************************************************
3
+ * javascript.php
4
+ * --------------
5
+ * Author: Ben Keen (ben.keen@gmail.com)
6
+ * Copyright: (c) 2004 Ben Keen (ben.keen@gmail.com), Nigel McNie (http://qbnz.com/highlighter)
7
+ * Release Version: 1.0.8.10
8
+ * Date Started: 2004/06/20
9
+ *
10
+ * JavaScript language file for GeSHi.
11
+ *
12
+ * CHANGES
13
+ * -------
14
+ * 2008/05/23 (1.0.7.22)
15
+ * - Added description of extra language features (SF#1970248)
16
+ * 2004/11/27 (1.0.1)
17
+ * - Added support for multiple object splitters
18
+ * 2004/10/27 (1.0.0)
19
+ * - First Release
20
+ *
21
+ * TODO (updated 2004/11/27)
22
+ * -------------------------
23
+ *
24
+ *************************************************************************************
25
+ *
26
+ * This file is part of GeSHi.
27
+ *
28
+ * GeSHi is free software; you can redistribute it and/or modify
29
+ * it under the terms of the GNU General Public License as published by
30
+ * the Free Software Foundation; either version 2 of the License, or
31
+ * (at your option) any later version.
32
+ *
33
+ * GeSHi is distributed in the hope that it will be useful,
34
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
35
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
36
+ * GNU General Public License for more details.
37
+ *
38
+ * You should have received a copy of the GNU General Public License
39
+ * along with GeSHi; if not, write to the Free Software
40
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
41
+ *
42
+ ************************************************************************************/
43
+
44
+ $language_data = array (
45
+ 'LANG_NAME' => 'Javascript',
46
+ 'COMMENT_SINGLE' => array(1 => '//'),
47
+ 'COMMENT_MULTI' => array('/*' => '*/'),
48
+ 'COMMENT_REGEXP' => array(
49
+ //Regular Expressions
50
+ 2 => "/(?<=[\\s^])(s|tr|y)\\/(?!\*)(?!\s)(?:\\\\.|(?!\n)[^\\/\\\\])+(?<!\s)\\/(?!\s)(?:\\\\.|(?!\n)[^\\/\\\\])*(?<!\s)\\/[msixpogcde]*(?=[\\s$\\.\\;])|(?<=[\\s^(=])(m|q[qrwx]?)?\\/(?!\*)(?!\s)(?:\\\\.|(?!\n)[^\\/\\\\])+(?<!\s)\\/[msixpogc]*(?=[\\s$\\.\\,\\;\\)])/iU"
51
+ ),
52
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
53
+ 'QUOTEMARKS' => array("'", '"'),
54
+ 'ESCAPE_CHAR' => '\\',
55
+ 'KEYWORDS' => array(
56
+ 1 => array(
57
+ 'as', 'break', 'case', 'catch', 'continue', 'decodeURI', 'delete', 'do',
58
+ 'else', 'encodeURI', 'eval', 'finally', 'for', 'if', 'in', 'is', 'item',
59
+ 'instanceof', 'return', 'switch', 'this', 'throw', 'try', 'typeof', 'void',
60
+ 'while', 'write', 'with'
61
+ ),
62
+ 2 => array(
63
+ 'class', 'const', 'default', 'debugger', 'export', 'extends', 'false',
64
+ 'function', 'import', 'namespace', 'new', 'null', 'package', 'private',
65
+ 'protected', 'public', 'super', 'true', 'use', 'var'
66
+ ),
67
+ 3 => array(
68
+ // common functions for Window object
69
+ 'alert', 'back', 'blur', 'close', 'confirm', 'focus', 'forward', 'home',
70
+ 'name', 'navigate', 'onblur', 'onerror', 'onfocus', 'onload', 'onmove',
71
+ 'onresize', 'onunload', 'open', 'print', 'prompt', 'scroll', 'status',
72
+ 'stop',
73
+ )
74
+ ),
75
+ 'SYMBOLS' => array(
76
+ '(', ')', '[', ']', '{', '}',
77
+ '+', '-', '*', '/', '%',
78
+ '!', '@', '&', '|', '^',
79
+ '<', '>', '=',
80
+ ',', ';', '?', ':'
81
+ ),
82
+ 'CASE_SENSITIVE' => array(
83
+ GESHI_COMMENTS => false,
84
+ 1 => false,
85
+ 2 => false,
86
+ 3 => false
87
+ ),
88
+ 'STYLES' => array(
89
+ 'KEYWORDS' => array(
90
+ 1 => 'color: #000066; font-weight: bold;',
91
+ 2 => 'color: #003366; font-weight: bold;',
92
+ 3 => 'color: #000066;'
93
+ ),
94
+ 'COMMENTS' => array(
95
+ 1 => 'color: #006600; font-style: italic;',
96
+ 2 => 'color: #009966; font-style: italic;',
97
+ 'MULTI' => 'color: #006600; font-style: italic;'
98
+ ),
99
+ 'ESCAPE_CHAR' => array(
100
+ 0 => 'color: #000099; font-weight: bold;'
101
+ ),
102
+ 'BRACKETS' => array(
103
+ 0 => 'color: #009900;'
104
+ ),
105
+ 'STRINGS' => array(
106
+ 0 => 'color: #3366CC;'
107
+ ),
108
+ 'NUMBERS' => array(
109
+ 0 => 'color: #CC0000;'
110
+ ),
111
+ 'METHODS' => array(
112
+ 1 => 'color: #660066;'
113
+ ),
114
+ 'SYMBOLS' => array(
115
+ 0 => 'color: #339933;'
116
+ ),
117
+ 'REGEXPS' => array(
118
+ ),
119
+ 'SCRIPT' => array(
120
+ 0 => '',
121
+ 1 => '',
122
+ 2 => '',
123
+ 3 => ''
124
+ )
125
+ ),
126
+ 'URLS' => array(
127
+ 1 => '',
128
+ 2 => '',
129
+ 3 => ''
130
+ ),
131
+ 'OOLANG' => true,
132
+ 'OBJECT_SPLITTERS' => array(
133
+ 1 => '.'
134
+ ),
135
+ 'REGEXPS' => array(
136
+ ),
137
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
138
+ 'SCRIPT_DELIMITERS' => array(
139
+ 0 => array(
140
+ '<script type="text/javascript">' => '</script>'
141
+ ),
142
+ 1 => array(
143
+ '<script language="javascript">' => '</script>'
144
+ )
145
+ ),
146
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
147
+ 0 => true,
148
+ 1 => true
149
+ )
150
+ );
151
+
152
+ ?>
lib/geshi/perl.php ADDED
@@ -0,0 +1,213 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*************************************************************************************
3
+ * perl.php
4
+ * --------
5
+ * Author: Andreas Gohr (andi@splitbrain.org), Ben Keen (ben.keen@gmail.com)
6
+ * Copyright: (c) 2004 Andreas Gohr, Ben Keen (http://www.benjaminkeen.org/), Nigel McNie (http://qbnz.com/highlighter/)
7
+ * Release Version: 1.0.8.10
8
+ * Date Started: 2004/08/20
9
+ *
10
+ * Perl language file for GeSHi.
11
+ *
12
+ * CHANGES
13
+ * -------
14
+ * 2008/06/22 (1.0.8)
15
+ * - Added support for system calls in backticks (Corley Kinnane)
16
+ * 2008/05/23 (1.0.7.22)
17
+ * - Added description of extra language features (SF#1970248)
18
+ * - Added comment_regexp for predefined variables
19
+ * 2008/02/15 (1.003)
20
+ * - Fixed SF#1891630 with placebo patch
21
+ * 2006/01/05 (1.0.2)
22
+ * - Used hardescape feature for ' strings (Cliff Stanford)
23
+ * 2004/11/27 (1.0.1)
24
+ * - Added support for multiple object splitters
25
+ * 2004/08/20 (1.0.0)
26
+ * - First Release
27
+ *
28
+ * TODO (updated 2004/11/27)
29
+ * -------------------------
30
+ * * LABEL:
31
+ * * string comparison operators
32
+ *
33
+ *************************************************************************************
34
+ *
35
+ * This file is part of GeSHi.
36
+ *
37
+ * GeSHi is free software; you can redistribute it and/or modify
38
+ * it under the terms of the GNU General Public License as published by
39
+ * the Free Software Foundation; either version 2 of the License, or
40
+ * (at your option) any later version.
41
+ *
42
+ * GeSHi is distributed in the hope that it will be useful,
43
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
44
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
45
+ * GNU General Public License for more details.
46
+ *
47
+ * You should have received a copy of the GNU General Public License
48
+ * along with GeSHi; if not, write to the Free Software
49
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
50
+ *
51
+ ************************************************************************************/
52
+
53
+ $language_data = array (
54
+ 'LANG_NAME' => 'Perl',
55
+ 'COMMENT_SINGLE' => array(1 => '#'),
56
+ 'COMMENT_MULTI' => array(
57
+ '=back' => '=cut',
58
+ '=head' => '=cut',
59
+ '=item' => '=cut',
60
+ '=over' => '=cut',
61
+ '=begin' => '=cut',
62
+ '=end' => '=cut',
63
+ '=for' => '=cut',
64
+ '=encoding' => '=cut',
65
+ '=pod' => '=cut'
66
+ ),
67
+ 'COMMENT_REGEXP' => array(
68
+ //Regular expressions
69
+ 2 => "/(?<=[\\s^])(s|tr|y)\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/(?:\\\\.|(?!\n)[^\\/\\\\])*\\/[msixpogcde]*(?=[\\s$\\.\\;])|(?<=[\\s^(=])(m|q[qrwx]?)?\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[msixpogc]*(?=[\\s$\\.\\,\\;\\)])/iU",
70
+ //Regular expression match variables
71
+ 3 => '/\$\d+/',
72
+ //Heredoc
73
+ 4 => '/<<\s*?([\'"]?)([a-zA-Z0-9]+)\1;[^\n]*?\\n.*\\n\\2(?![a-zA-Z0-9])/siU',
74
+ //Predefined variables
75
+ 5 => '/\$(\^[a-zA-Z]?|[\*\$`\'&_\.,+\-~:;\\\\\/"\|%=\?!@#<>\(\)\[\]])(?!\w)|@[_+\-]|%[!]|\$(?=\{)/',
76
+ ),
77
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
78
+ 'QUOTEMARKS' => array('"','`'),
79
+ 'HARDQUOTE' => array("'", "'"), // An optional 2-element array defining the beginning and end of a hard-quoted string
80
+ 'HARDESCAPE' => array('\\\'',),
81
+ // Things that must still be escaped inside a hard-quoted string
82
+ // If HARDQUOTE is defined, HARDESCAPE must be defined
83
+ // This will not work unless the first character of each element is either in the
84
+ // QUOTEMARKS array or is the ESCAPE_CHAR
85
+ 'ESCAPE_CHAR' => '\\',
86
+ 'KEYWORDS' => array(
87
+ 1 => array(
88
+ 'case', 'do', 'else', 'elsif', 'for', 'if', 'then', 'until', 'while', 'foreach', 'my',
89
+ 'xor', 'or', 'and', 'unless', 'next', 'last', 'redo', 'not', 'our',
90
+ 'reset', 'continue', 'cmp', 'ne', 'eq', 'lt', 'gt', 'le', 'ge',
91
+ ),
92
+ 2 => array(
93
+ 'use', 'sub', 'new', '__END__', '__DATA__', '__DIE__', '__WARN__', 'BEGIN',
94
+ 'STDIN', 'STDOUT', 'STDERR', 'ARGV', 'ARGVOUT'
95
+ ),
96
+ 3 => array(
97
+ 'abs', 'accept', 'alarm', 'atan2', 'bind', 'binmode', 'bless',
98
+ 'caller', 'chdir', 'chmod', 'chomp', 'chop', 'chown', 'chr',
99
+ 'chroot', 'close', 'closedir', 'connect', 'cos',
100
+ 'crypt', 'dbmclose', 'dbmopen', 'defined', 'delete', 'die',
101
+ 'dump', 'each', 'endgrent', 'endhostent', 'endnetent', 'endprotoent',
102
+ 'endpwent', 'endservent', 'eof', 'eval', 'exec', 'exists', 'exit',
103
+ 'exp', 'fcntl', 'fileno', 'flock', 'fork', 'format', 'formline',
104
+ 'getc', 'getgrent', 'getgrgid', 'getgrnam', 'gethostbyaddr',
105
+ 'gethostbyname', 'gethostent', 'getlogin', 'getnetbyaddr', 'getnetbyname',
106
+ 'getnetent', 'getpeername', 'getpgrp', 'getppid', 'getpriority',
107
+ 'getprotobyname', 'getprotobynumber', 'getprotoent', 'getpwent',
108
+ 'getpwnam', 'getpwuid', 'getservbyname', 'getservbyport', 'getservent',
109
+ 'getsockname', 'getsockopt', 'glob', 'gmtime', 'goto', 'grep',
110
+ 'hex', 'import', 'index', 'int', 'ioctl', 'join', 'keys', 'kill',
111
+ 'lc', 'lcfirst', 'length', 'link', 'listen', 'local',
112
+ 'localtime', 'log', 'lstat', 'm', 'map', 'mkdir', 'msgctl', 'msgget',
113
+ 'msgrcv', 'msgsnd', 'no', 'oct', 'open', 'opendir',
114
+ 'ord', 'pack', 'package', 'pipe', 'pop', 'pos', 'print',
115
+ 'printf', 'prototype', 'push', 'qq', 'qr', 'quotemeta', 'qw',
116
+ 'qx', 'q', 'rand', 'read', 'readdir', 'readline', 'readlink', 'readpipe',
117
+ 'recv', 'ref', 'rename', 'require', 'return',
118
+ 'reverse', 'rewinddir', 'rindex', 'rmdir', 's', 'scalar', 'seek',
119
+ 'seekdir', 'select', 'semctl', 'semget', 'semop', 'send', 'setgrent',
120
+ 'sethostent', 'setnetent', 'setpgrp', 'setpriority', 'setprotoent',
121
+ 'setpwent', 'setservent', 'setsockopt', 'shift', 'shmctl', 'shmget',
122
+ 'shmread', 'shmwrite', 'shutdown', 'sin', 'sleep', 'socket', 'socketpair',
123
+ 'sort', 'splice', 'split', 'sprintf', 'sqrt', 'srand', 'stat',
124
+ 'study', 'substr', 'symlink', 'syscall', 'sysopen', 'sysread',
125
+ 'sysseek', 'system', 'syswrite', 'tell', 'telldir', 'tie', 'tied',
126
+ 'time', 'times', 'tr', 'truncate', 'uc', 'ucfirst', 'umask', 'undef',
127
+ 'unlink', 'unpack', 'unshift', 'untie', 'utime', 'values',
128
+ 'vec', 'wait', 'waitpid', 'wantarray', 'warn', 'write', 'y'
129
+ )
130
+ ),
131
+ 'SYMBOLS' => array(
132
+ '<', '>', '=',
133
+ '!', '@', '~', '&', '|', '^',
134
+ '+','-', '*', '/', '%',
135
+ ',', ';', '?', '.', ':'
136
+ ),
137
+ 'CASE_SENSITIVE' => array(
138
+ GESHI_COMMENTS => false,
139
+ 1 => true,
140
+ 2 => true,
141
+ 3 => true,
142
+ ),
143
+ 'STYLES' => array(
144
+ 'KEYWORDS' => array(
145
+ 1 => 'color: #b1b100;',
146
+ 2 => 'color: #000000; font-weight: bold;',
147
+ 3 => 'color: #000066;'
148
+ ),
149
+ 'COMMENTS' => array(
150
+ 1 => 'color: #666666; font-style: italic;',
151
+ 2 => 'color: #009966; font-style: italic;',
152
+ 3 => 'color: #0000ff;',
153
+ 4 => 'color: #cc0000; font-style: italic;',
154
+ 5 => 'color: #0000ff;',
155
+ 'MULTI' => 'color: #666666; font-style: italic;'
156
+ ),
157
+ 'ESCAPE_CHAR' => array(
158
+ 0 => 'color: #000099; font-weight: bold;',
159
+ 'HARD' => 'color: #000099; font-weight: bold;'
160
+ ),
161
+ 'BRACKETS' => array(
162
+ 0 => 'color: #009900;'
163
+ ),
164
+ 'STRINGS' => array(
165
+ 0 => 'color: #ff0000;',
166
+ 'HARD' => 'color: #ff0000;'
167
+ ),
168
+ 'NUMBERS' => array(
169
+ 0 => 'color: #cc66cc;'
170
+ ),
171
+ 'METHODS' => array(
172
+ 1 => 'color: #006600;',
173
+ 2 => 'color: #006600;'
174
+ ),
175
+ 'SYMBOLS' => array(
176
+ 0 => 'color: #339933;'
177
+ ),
178
+ 'REGEXPS' => array(
179
+ 0 => 'color: #0000ff;',
180
+ 4 => 'color: #009999;',
181
+ ),
182
+ 'SCRIPT' => array(
183
+ )
184
+ ),
185
+ 'URLS' => array(
186
+ 1 => '',
187
+ 2 => '',
188
+ 3 => 'http://perldoc.perl.org/functions/{FNAMEL}.html'
189
+ ),
190
+ 'OOLANG' => true,
191
+ 'OBJECT_SPLITTERS' => array(
192
+ 1 => '-&gt;',
193
+ 2 => '::'
194
+ ),
195
+ 'REGEXPS' => array(
196
+ //Variable
197
+ 0 => '(?:\$[\$#]?|\\\\(?:[@%*]?|\\\\*\$|&amp;)|%[$]?|@[$]?|\*[$]?|&amp;[$]?)[a-zA-Z_][a-zA-Z0-9_]*',
198
+ //File Descriptor
199
+ 4 => '&lt;[a-zA-Z_][a-zA-Z0-9_]*&gt;',
200
+ ),
201
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
202
+ 'SCRIPT_DELIMITERS' => array(
203
+ ),
204
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
205
+ ),
206
+ 'PARSER_CONTROL' => array(
207
+ 'COMMENTS' => array(
208
+ 'DISALLOWED_BEFORE' => '$'
209
+ )
210
+ )
211
+ );
212
+
213
+ ?>
lib/geshi/php-brief.php ADDED
@@ -0,0 +1,222 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*************************************************************************************
3
+ * php-brief.php
4
+ * -------------
5
+ * Author: Nigel McNie (nigel@geshi.org)
6
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
7
+ * Release Version: 1.0.8.10
8
+ * Date Started: 2004/06/02
9
+ *
10
+ * PHP (brief version) language file for GeSHi.
11
+ *
12
+ * CHANGES
13
+ * -------
14
+ * 2008/05/23 (1.0.7.22)
15
+ * - Added description of extra language features (SF#1970248)
16
+ * 2004/11/27 (1.0.3)
17
+ * - Added support for multiple object splitters
18
+ * - Fixed &new problem
19
+ * 2004/10/27 (1.0.2)
20
+ * - Added support for URLs
21
+ * 2004/08/05 (1.0.1)
22
+ * - Added support for symbols
23
+ * 2004/07/14 (1.0.0)
24
+ * - First Release
25
+ *
26
+ * TODO (updated 2004/07/14)
27
+ * -------------------------
28
+ * * Remove more functions that are hardly used
29
+ *
30
+ *************************************************************************************
31
+ *
32
+ * This file is part of GeSHi.
33
+ *
34
+ * GeSHi is free software; you can redistribute it and/or modify
35
+ * it under the terms of the GNU General Public License as published by
36
+ * the Free Software Foundation; either version 2 of the License, or
37
+ * (at your option) any later version.
38
+ *
39
+ * GeSHi is distributed in the hope that it will be useful,
40
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
41
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
42
+ * GNU General Public License for more details.
43
+ *
44
+ * You should have received a copy of the GNU General Public License
45
+ * along with GeSHi; if not, write to the Free Software
46
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
47
+ *
48
+ ************************************************************************************/
49
+
50
+ $language_data = array (
51
+ 'LANG_NAME' => 'PHP (brief)',
52
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
53
+ 'COMMENT_MULTI' => array('/*' => '*/'),
54
+ //Heredoc and Nowdoc syntax
55
+ 'COMMENT_REGEXP' => array(3 => '/<<<\s*?(\'?)([a-zA-Z0-9]+)\1[^\n]*?\\n.*\\n\\2(?![a-zA-Z0-9])/siU'),
56
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
57
+ 'QUOTEMARKS' => array("'", '"'),
58
+ 'ESCAPE_CHAR' => '\\',
59
+ 'HARDQUOTE' => array("'", "'"),
60
+ 'HARDESCAPE' => array("\'"),
61
+ 'NUMBERS' =>
62
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX |
63
+ GESHI_NUMBER_FLT_SCI_ZERO,
64
+ 'KEYWORDS' => array(
65
+ 1 => array(
66
+ 'include', 'require', 'include_once', 'require_once',
67
+ 'for', 'as', 'foreach', 'if', 'elseif', 'else', 'while', 'do', 'endwhile', 'endif', 'switch', 'case', 'endswitch',
68
+ 'return', 'break'
69
+ ),
70
+ 2 => array(
71
+ 'null', '__LINE__', '__FILE__',
72
+ 'false', '&lt;?php',
73
+ 'true', 'var', 'default',
74
+ 'function', 'class', 'new', '&amp;new', 'public', 'private', 'interface', 'extends',
75
+ 'const', 'self'
76
+ ),
77
+ 3 => array(
78
+ 'func_num_args', 'func_get_arg', 'func_get_args', 'strlen', 'strcmp', 'strncmp', 'strcasecmp', 'strncasecmp', 'each', 'error_reporting', 'define', 'defined',
79
+ 'trigger_error', 'user_error', 'set_error_handler', 'restore_error_handler', 'get_declared_classes', 'get_loaded_extensions',
80
+ 'extension_loaded', 'get_extension_funcs', 'debug_backtrace',
81
+ 'constant', 'bin2hex', 'sleep', 'usleep', 'time', 'mktime', 'gmmktime', 'strftime', 'gmstrftime', 'strtotime', 'date', 'gmdate', 'getdate', 'localtime', 'checkdate', 'flush', 'wordwrap', 'htmlspecialchars', 'htmlentities', 'html_entity_decode', 'md5', 'md5_file', 'crc32', 'getimagesize', 'image_type_to_mime_type', 'phpinfo', 'phpversion', 'phpcredits', 'strnatcmp', 'strnatcasecmp', 'substr_count', 'strspn', 'strcspn', 'strtok', 'strtoupper', 'strtolower', 'strpos', 'strrpos', 'strrev', 'hebrev', 'hebrevc', 'nl2br', 'basename', 'dirname', 'pathinfo', 'stripslashes', 'stripcslashes', 'strstr', 'stristr', 'strrchr', 'str_shuffle', 'str_word_count', 'strcoll', 'substr', 'substr_replace', 'quotemeta', 'ucfirst', 'ucwords', 'strtr', 'addslashes', 'addcslashes', 'rtrim', 'str_replace', 'str_repeat', 'count_chars', 'chunk_split', 'trim', 'ltrim', 'strip_tags', 'similar_text', 'explode', 'implode', 'setlocale', 'localeconv',
82
+ 'parse_str', 'str_pad', 'chop', 'strchr', 'sprintf', 'printf', 'vprintf', 'vsprintf', 'sscanf', 'fscanf', 'parse_url', 'urlencode', 'urldecode', 'rawurlencode', 'rawurldecode', 'readlink', 'linkinfo', 'link', 'unlink', 'exec', 'system', 'escapeshellcmd', 'escapeshellarg', 'passthru', 'shell_exec', 'proc_open', 'proc_close', 'rand', 'srand', 'getrandmax', 'mt_rand', 'mt_srand', 'mt_getrandmax', 'base64_decode', 'base64_encode', 'abs', 'ceil', 'floor', 'round', 'is_finite', 'is_nan', 'is_infinite', 'bindec', 'hexdec', 'octdec', 'decbin', 'decoct', 'dechex', 'base_convert', 'number_format', 'fmod', 'ip2long', 'long2ip', 'getenv', 'putenv', 'getopt', 'microtime', 'gettimeofday', 'getrusage', 'uniqid', 'quoted_printable_decode', 'set_time_limit', 'get_cfg_var', 'magic_quotes_runtime', 'set_magic_quotes_runtime', 'get_magic_quotes_gpc', 'get_magic_quotes_runtime',
83
+ 'import_request_variables', 'error_log', 'serialize', 'unserialize', 'memory_get_usage', 'var_dump', 'var_export', 'debug_zval_dump', 'print_r','highlight_file', 'show_source', 'highlight_string', 'ini_get', 'ini_get_all', 'ini_set', 'ini_alter', 'ini_restore', 'get_include_path', 'set_include_path', 'restore_include_path', 'setcookie', 'header', 'headers_sent', 'connection_aborted', 'connection_status', 'ignore_user_abort', 'parse_ini_file', 'is_uploaded_file', 'move_uploaded_file', 'intval', 'floatval', 'doubleval', 'strval', 'gettype', 'settype', 'is_null', 'is_resource', 'is_bool', 'is_long', 'is_float', 'is_int', 'is_integer', 'is_double', 'is_real', 'is_numeric', 'is_string', 'is_array', 'is_object', 'is_scalar',
84
+ 'ereg', 'ereg_replace', 'eregi', 'eregi_replace', 'split', 'spliti', 'join', 'sql_regcase', 'dl', 'pclose', 'popen', 'readfile', 'rewind', 'rmdir', 'umask', 'fclose', 'feof', 'fgetc', 'fgets', 'fgetss', 'fread', 'fopen', 'fpassthru', 'ftruncate', 'fstat', 'fseek', 'ftell', 'fflush', 'fwrite', 'fputs', 'mkdir', 'rename', 'copy', 'tempnam', 'tmpfile', 'file', 'file_get_contents', 'stream_select', 'stream_context_create', 'stream_context_set_params', 'stream_context_set_option', 'stream_context_get_options', 'stream_filter_prepend', 'stream_filter_append', 'fgetcsv', 'flock', 'get_meta_tags', 'stream_set_write_buffer', 'set_file_buffer', 'set_socket_blocking', 'stream_set_blocking', 'socket_set_blocking', 'stream_get_meta_data', 'stream_register_wrapper', 'stream_wrapper_register', 'stream_set_timeout', 'socket_set_timeout', 'socket_get_status', 'realpath', 'fnmatch', 'fsockopen', 'pfsockopen', 'pack', 'unpack', 'get_browser', 'crypt', 'opendir', 'closedir', 'chdir', 'getcwd', 'rewinddir', 'readdir', 'dir', 'glob', 'fileatime', 'filectime', 'filegroup', 'fileinode', 'filemtime', 'fileowner', 'fileperms', 'filesize', 'filetype', 'file_exists', 'is_writable', 'is_writeable', 'is_readable', 'is_executable', 'is_file', 'is_dir', 'is_link', 'stat', 'lstat', 'chown',
85
+ 'touch', 'clearstatcache', 'mail', 'ob_start', 'ob_flush', 'ob_clean', 'ob_end_flush', 'ob_end_clean', 'ob_get_flush', 'ob_get_clean', 'ob_get_length', 'ob_get_level', 'ob_get_status', 'ob_get_contents', 'ob_implicit_flush', 'ob_list_handlers', 'ksort', 'krsort', 'natsort', 'natcasesort', 'asort', 'arsort', 'sort', 'rsort', 'usort', 'uasort', 'uksort', 'shuffle', 'array_walk', 'count', 'end', 'prev', 'next', 'reset', 'current', 'key', 'min', 'max', 'in_array', 'array_search', 'extract', 'compact', 'array_fill', 'range', 'array_multisort', 'array_push', 'array_pop', 'array_shift', 'array_unshift', 'array_splice', 'array_slice', 'array_merge', 'array_merge_recursive', 'array_keys', 'array_values', 'array_count_values', 'array_reverse', 'array_reduce', 'array_pad', 'array_flip', 'array_change_key_case', 'array_rand', 'array_unique', 'array_intersect', 'array_intersect_assoc', 'array_diff', 'array_diff_assoc', 'array_sum', 'array_filter', 'array_map', 'array_chunk', 'array_key_exists', 'pos', 'sizeof', 'key_exists', 'assert', 'assert_options', 'version_compare', 'ftok', 'str_rot13', 'aggregate',
86
+ 'session_name', 'session_module_name', 'session_save_path', 'session_id', 'session_regenerate_id', 'session_decode', 'session_register', 'session_unregister', 'session_is_registered', 'session_encode',
87
+ 'session_start', 'session_destroy', 'session_unset', 'session_set_save_handler', 'session_cache_limiter', 'session_cache_expire', 'session_set_cookie_params', 'session_get_cookie_params', 'session_write_close', 'preg_match', 'preg_match_all', 'preg_replace', 'preg_replace_callback', 'preg_split', 'preg_quote', 'preg_grep', 'overload', 'ctype_alnum', 'ctype_alpha', 'ctype_cntrl', 'ctype_digit', 'ctype_lower', 'ctype_graph', 'ctype_print', 'ctype_punct', 'ctype_space', 'ctype_upper', 'ctype_xdigit', 'virtual', 'apache_request_headers', 'apache_note', 'apache_lookup_uri', 'apache_child_terminate', 'apache_setenv', 'apache_response_headers', 'apache_get_version', 'getallheaders', 'mysql_connect', 'mysql_pconnect', 'mysql_close', 'mysql_select_db', 'mysql_create_db', 'mysql_drop_db', 'mysql_query', 'mysql_unbuffered_query', 'mysql_db_query', 'mysql_list_dbs', 'mysql_list_tables', 'mysql_list_fields', 'mysql_list_processes', 'mysql_error', 'mysql_errno', 'mysql_affected_rows', 'mysql_insert_id', 'mysql_result', 'mysql_num_rows', 'mysql_num_fields', 'mysql_fetch_row', 'mysql_fetch_array', 'mysql_fetch_assoc', 'mysql_fetch_object', 'mysql_data_seek', 'mysql_fetch_lengths', 'mysql_fetch_field', 'mysql_field_seek', 'mysql_free_result', 'mysql_field_name', 'mysql_field_table', 'mysql_field_len', 'mysql_field_type', 'mysql_field_flags', 'mysql_escape_string', 'mysql_real_escape_string', 'mysql_stat',
88
+ 'mysql_thread_id', 'mysql_client_encoding', 'mysql_get_client_info', 'mysql_get_host_info', 'mysql_get_proto_info', 'mysql_get_server_info', 'mysql_info', 'mysql', 'mysql_fieldname', 'mysql_fieldtable', 'mysql_fieldlen', 'mysql_fieldtype', 'mysql_fieldflags', 'mysql_selectdb', 'mysql_createdb', 'mysql_dropdb', 'mysql_freeresult', 'mysql_numfields', 'mysql_numrows', 'mysql_listdbs', 'mysql_listtables', 'mysql_listfields', 'mysql_db_name', 'mysql_dbname', 'mysql_tablename', 'mysql_table_name', 'pg_connect', 'pg_pconnect', 'pg_close', 'pg_connection_status', 'pg_connection_busy', 'pg_connection_reset', 'pg_host', 'pg_dbname', 'pg_port', 'pg_tty', 'pg_options', 'pg_ping', 'pg_query', 'pg_send_query', 'pg_cancel_query', 'pg_fetch_result', 'pg_fetch_row', 'pg_fetch_assoc', 'pg_fetch_array', 'pg_fetch_object', 'pg_fetch_all', 'pg_affected_rows', 'pg_get_result', 'pg_result_seek', 'pg_result_status', 'pg_free_result', 'pg_last_oid', 'pg_num_rows', 'pg_num_fields', 'pg_field_name', 'pg_field_num', 'pg_field_size', 'pg_field_type', 'pg_field_prtlen', 'pg_field_is_null', 'pg_get_notify', 'pg_get_pid', 'pg_result_error', 'pg_last_error', 'pg_last_notice', 'pg_put_line', 'pg_end_copy', 'pg_copy_to', 'pg_copy_from',
89
+ 'pg_trace', 'pg_untrace', 'pg_lo_create', 'pg_lo_unlink', 'pg_lo_open', 'pg_lo_close', 'pg_lo_read', 'pg_lo_write', 'pg_lo_read_all', 'pg_lo_import', 'pg_lo_export', 'pg_lo_seek', 'pg_lo_tell', 'pg_escape_string', 'pg_escape_bytea', 'pg_unescape_bytea', 'pg_client_encoding', 'pg_set_client_encoding', 'pg_meta_data', 'pg_convert', 'pg_insert', 'pg_update', 'pg_delete', 'pg_select', 'pg_exec', 'pg_getlastoid', 'pg_cmdtuples', 'pg_errormessage', 'pg_numrows', 'pg_numfields', 'pg_fieldname', 'pg_fieldsize', 'pg_fieldtype', 'pg_fieldnum', 'pg_fieldprtlen', 'pg_fieldisnull', 'pg_freeresult', 'pg_result', 'pg_loreadall', 'pg_locreate', 'pg_lounlink', 'pg_loopen', 'pg_loclose', 'pg_loread', 'pg_lowrite', 'pg_loimport', 'pg_loexport',
90
+ 'echo', 'print', 'global', 'static', 'exit', 'array', 'empty', 'eval', 'isset', 'unset', 'die'
91
+ )
92
+ ),
93
+ 'SYMBOLS' => array(
94
+ 1 => array(
95
+ '<%', '<%=', '%>', '<?', '<?=', '?>'
96
+ ),
97
+ 0 => array(
98
+ '(', ')', '[', ']', '{', '}',
99
+ '!', '@', '%', '&', '|', '/',
100
+ '<', '>',
101
+ '=', '-', '+', '*',
102
+ '.', ':', ',', ';'
103
+ )
104
+ ),
105
+ 'CASE_SENSITIVE' => array(
106
+ GESHI_COMMENTS => false,
107
+ 1 => false,
108
+ 2 => false,
109
+ 3 => false
110
+ ),
111
+ 'STYLES' => array(
112
+ 'KEYWORDS' => array(
113
+ 1 => 'color: #b1b100;',
114
+ 2 => 'color: #000000; font-weight: bold;',
115
+ 3 => 'color: #990000;'
116
+ ),
117
+ 'COMMENTS' => array(
118
+ 1 => 'color: #666666; font-style: italic;',
119
+ 2 => 'color: #666666; font-style: italic;',
120
+ 3 => 'color: #0000cc; font-style: italic;',
121
+ 'MULTI' => 'color: #666666; font-style: italic;'
122
+ ),
123
+ 'ESCAPE_CHAR' => array(
124
+ 0 => 'color: #000099; font-weight: bold;',
125
+ 'HARD' => 'color: #000099; font-weight: bold;'
126
+ ),
127
+ 'BRACKETS' => array(
128
+ 0 => 'color: #009900;'
129
+ ),
130
+ 'STRINGS' => array(
131
+ 0 => 'color: #0000ff;',
132
+ 'HARD' => 'color: #0000ff;'
133
+ ),
134
+ 'NUMBERS' => array(
135
+ 0 => 'color: #cc66cc;',
136
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
137
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
138
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
139
+ ),
140
+ 'METHODS' => array(
141
+ 1 => 'color: #004000;',
142
+ 2 => 'color: #004000;'
143
+ ),
144
+ 'SYMBOLS' => array(
145
+ 0 => 'color: #339933;',
146
+ 1 => 'color: #000000; font-weight: bold;'
147
+ ),
148
+ 'REGEXPS' => array(
149
+ 0 => 'color: #0000ff;'
150
+ ),
151
+ 'SCRIPT' => array(
152
+ 0 => '',
153
+ 1 => '',
154
+ 2 => '',
155
+ 3 => '',
156
+ 4 => '',
157
+ 5 => ''
158
+ )
159
+ ),
160
+ 'URLS' => array(
161
+ 1 => '',
162
+ 2 => '',
163
+ 3 => 'http://www.php.net/{FNAMEL}'
164
+ ),
165
+ 'OOLANG' => true,
166
+ 'OBJECT_SPLITTERS' => array(
167
+ 1 => '-&gt;',
168
+ 2 => '::'
169
+ ),
170
+ 'REGEXPS' => array(
171
+ //Variables
172
+ 0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*"
173
+ ),
174
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
175
+ 'SCRIPT_DELIMITERS' => array(
176
+ 0 => array(
177
+ '<?php' => '?>'
178
+ ),
179
+ 1 => array(
180
+ '<?' => '?>'
181
+ ),
182
+ 2 => array(
183
+ '<%' => '%>'
184
+ ),
185
+ 3 => array(
186
+ '<script language="php">' => '</script>'
187
+ ),
188
+ 4 => "/(?P<start><\\?(?>php\b)?)(?:".
189
+ "(?>[^\"'?\\/<]+)|".
190
+ "\\?(?!>)|".
191
+ "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
192
+ "(?>\"(?>[^\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
193
+ "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
194
+ "\\/\\/(?>.*?$)|".
195
+ "\\/(?=[^*\\/])|".
196
+ "<(?!<<)|".
197
+ "<<<(?P<phpdoc>\w+)\s.*?\s\k<phpdoc>".
198
+ ")*(?P<end>\\?>|\Z)/sm",
199
+ 5 => "/(?P<start><%)(?:".
200
+ "(?>[^\"'%\\/<]+)|".
201
+ "%(?!>)|".
202
+ "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
203
+ "(?>\"(?>[^\\\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
204
+ "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
205
+ "\\/\\/(?>.*?$)|".
206
+ "\\/(?=[^*\\/])|".
207
+ "<(?!<<)|".
208
+ "<<<(?P<phpdoc>\w+)\s.*?\s\k<phpdoc>".
209
+ ")*(?P<end>%>)/sm"
210
+ ),
211
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
212
+ 0 => true,
213
+ 1 => true,
214
+ 2 => true,
215
+ 3 => true,
216
+ 4 => true,
217
+ 5 => true
218
+ ),
219
+ 'TAB_WIDTH' => 4
220
+ );
221
+
222
+ ?>
lib/geshi/php.php ADDED
@@ -0,0 +1,1114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*************************************************************************************
3
+ * php.php
4
+ * --------
5
+ * Author: Nigel McNie (nigel@geshi.org)
6
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
7
+ * Release Version: 1.0.8.10
8
+ * Date Started: 2004/06/20
9
+ *
10
+ * PHP language file for GeSHi.
11
+ *
12
+ * CHANGES
13
+ * -------
14
+ * 2008/05/23 (1.0.7.22)
15
+ * - Added description of extra language features (SF#1970248)
16
+ * 2004/11/25 (1.0.3)
17
+ * - Added support for multiple object splitters
18
+ * - Fixed &new problem
19
+ * 2004/10/27 (1.0.2)
20
+ * - Added URL support
21
+ * - Added extra constants
22
+ * 2004/08/05 (1.0.1)
23
+ * - Added support for symbols
24
+ * 2004/07/14 (1.0.0)
25
+ * - First Release
26
+ *
27
+ * TODO (updated 2004/07/14)
28
+ * -------------------------
29
+ * * Make sure the last few function I may have missed
30
+ * (like eval()) are included for highlighting
31
+ * * Split to several files - php4, php5 etc
32
+ *
33
+ *************************************************************************************
34
+ *
35
+ * This file is part of GeSHi.
36
+ *
37
+ * GeSHi is free software; you can redistribute it and/or modify
38
+ * it under the terms of the GNU General Public License as published by
39
+ * the Free Software Foundation; either version 2 of the License, or
40
+ * (at your option) any later version.
41
+ *
42
+ * GeSHi is distributed in the hope that it will be useful,
43
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
44
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
45
+ * GNU General Public License for more details.
46
+ *
47
+ * You should have received a copy of the GNU General Public License
48
+ * along with GeSHi; if not, write to the Free Software
49
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
50
+ *
51
+ ************************************************************************************/
52
+
53
+ $language_data = array(
54
+ 'LANG_NAME' => 'PHP',
55
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
56
+ 'COMMENT_MULTI' => array('/*' => '*/'),
57
+ 'COMMENT_REGEXP' => array(
58
+ //Heredoc and Nowdoc syntax
59
+ 3 => '/<<<\s*?(\'?)([a-zA-Z0-9]+?)\1[^\n]*?\\n.*\\n\\2(?![a-zA-Z0-9])/siU',
60
+ // phpdoc comments
61
+ 4 => '#/\*\*(?![\*\/]).*\*/#sU',
62
+ // Advanced # handling
63
+ 2 => "/#.*?(?:(?=\?\>)|^)/smi"
64
+ ),
65
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
66
+ 'QUOTEMARKS' => array('"'),
67
+ 'ESCAPE_CHAR' => '',
68
+ 'ESCAPE_REGEXP' => array(
69
+ //Simple Single Char Escapes
70
+ 1 => "#\\\\[nfrtv\$\"\n\\\\]#i",
71
+ //Hexadecimal Char Specs
72
+ 2 => "#\\\\x[\da-fA-F]{1,2}#i",
73
+ //Octal Char Specs
74
+ 3 => "#\\\\[0-7]{1,3}#",
75
+ //String Parsing of Variable Names
76
+ 4 => "#\\$[a-z0-9_]+(?:\\[[a-z0-9_]+\\]|->[a-z0-9_]+)?|(?:\\{\\$|\\$\\{)[a-z0-9_]+(?:\\[('?)[a-z0-9_]*\\1\\]|->[a-z0-9_]+)*\\}#i",
77
+ //Experimental extension supporting cascaded {${$var}} syntax
78
+ 5 => "#\$[a-z0-9_]+(?:\[[a-z0-9_]+\]|->[a-z0-9_]+)?|(?:\{\$|\$\{)[a-z0-9_]+(?:\[('?)[a-z0-9_]*\\1\]|->[a-z0-9_]+)*\}|\{\$(?R)\}#i",
79
+ //Format String support in ""-Strings
80
+ 6 => "#%(?:%|(?:\d+\\\\\\\$)?\\+?(?:\x20|0|'.)?-?(?:\d+|\\*)?(?:\.\d+)?[bcdefFosuxX])#"
81
+ ),
82
+ 'HARDQUOTE' => array("'", "'"),
83
+ 'HARDESCAPE' => array("'", "\\"),
84
+ 'HARDCHAR' => "\\",
85
+ 'NUMBERS' =>
86
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX |
87
+ GESHI_NUMBER_FLT_SCI_ZERO,
88
+ 'KEYWORDS' => array(
89
+ 1 => array(
90
+ 'as','break','case','continue','default','do','else','elseif',
91
+ 'endfor','endforeach','endif','endswitch','endwhile','for',
92
+ 'foreach','if','include','include_once','require','require_once',
93
+ 'return','switch','throw','while',
94
+
95
+ 'echo','print'
96
+ ),
97
+ 2 => array(
98
+ '&amp;new','&lt;/script&gt;','&lt;?php','&lt;script language',
99
+ 'class','const','declare','extends','function','global','interface',
100
+ 'namespace','new','private','protected','public','self','use','var'
101
+ ),
102
+ 3 => array(
103
+ 'abs','acos','acosh','addcslashes','addslashes','aggregate',
104
+ 'aggregate_methods','aggregate_methods_by_list',
105
+ 'aggregate_methods_by_regexp','aggregate_properties',
106
+ 'aggregate_properties_by_list','aggregate_properties_by_regexp',
107
+ 'aggregation_info','apache_child_terminate','apache_get_modules',
108
+ 'apache_get_version','apache_getenv','apache_lookup_uri',
109
+ 'apache_note','apache_request_headers','apache_response_headers',
110
+ 'apache_setenv','array','array_change_key_case','array_chunk',
111
+ 'array_combine','array_count_values','array_diff',
112
+ 'array_diff_assoc','array_diff_key','array_diff_uassoc',
113
+ 'array_diff_ukey','array_fill','array_fill_keys','array_filter',
114
+ 'array_flip','array_intersect','array_intersect_assoc',
115
+ 'array_intersect_key','array_intersect_uassoc',
116
+ 'array_intersect_ukey','array_key_exists','array_keys','array_map',
117
+ 'array_merge','array_merge_recursive','array_multisort','array_pad',
118
+ 'array_pop','array_product','array_push','array_rand',
119
+ 'array_reduce','array_reverse','array_search','array_shift',
120
+ 'array_slice','array_splice','array_sum','array_udiff',
121
+ 'array_udiff_assoc','array_udiff_uassoc','array_uintersect',
122
+ 'array_uintersect_assoc','array_uintersect_uassoc','array_unique',
123
+ 'array_unshift','array_values','array_walk','array_walk_recursive',
124
+ 'arsort','asin','asinh','asort','assert','assert_options','atan',
125
+ 'atan2','atanh','base_convert','base64_decode','base64_encode',
126
+ 'basename','bcadd','bccomp','bcdiv','bcmod','bcmul',
127
+ 'bcompiler_load','bcompiler_load_exe','bcompiler_parse_class',
128
+ 'bcompiler_read','bcompiler_write_class','bcompiler_write_constant',
129
+ 'bcompiler_write_exe_footer','bcompiler_write_file',
130
+ 'bcompiler_write_footer','bcompiler_write_function',
131
+ 'bcompiler_write_functions_from_file','bcompiler_write_header',
132
+ 'bcompiler_write_included_filename','bcpow','bcpowmod','bcscale',
133
+ 'bcsqrt','bcsub','bin2hex','bindec','bindtextdomain',
134
+ 'bind_textdomain_codeset','bitset_empty','bitset_equal',
135
+ 'bitset_excl','bitset_fill','bitset_from_array','bitset_from_hash',
136
+ 'bitset_from_string','bitset_in','bitset_incl',
137
+ 'bitset_intersection','bitset_invert','bitset_is_empty',
138
+ 'bitset_subset','bitset_to_array','bitset_to_hash',
139
+ 'bitset_to_string','bitset_union','blenc_encrypt','bzclose',
140
+ 'bzcompress','bzdecompress','bzerrno','bzerror','bzerrstr',
141
+ 'bzflush','bzopen','bzread','bzwrite','cal_days_in_month',
142
+ 'cal_from_jd','cal_info','cal_to_jd','call_user_func',
143
+ 'call_user_func_array','call_user_method','call_user_method_array',
144
+ 'ceil','chdir','checkdate','checkdnsrr','chgrp','chmod','chop',
145
+ 'chown','chr','chunk_split','class_exists','class_implements',
146
+ 'class_parents','classkit_aggregate_methods',
147
+ 'classkit_doc_comments','classkit_import','classkit_method_add',
148
+ 'classkit_method_copy','classkit_method_redefine',
149
+ 'classkit_method_remove','classkit_method_rename','clearstatcache',
150
+ 'closedir','closelog','com_create_guid','com_event_sink',
151
+ 'com_get_active_object','com_load_typelib','com_message_pump',
152
+ 'com_print_typeinfo','compact','confirm_phpdoc_compiled',
153
+ 'connection_aborted','connection_status','constant',
154
+ 'convert_cyr_string','convert_uudecode','convert_uuencode','copy',
155
+ 'cos','cosh','count','count_chars','cpdf_add_annotation',
156
+ 'cpdf_add_outline','cpdf_arc','cpdf_begin_text','cpdf_circle',
157
+ 'cpdf_clip','cpdf_close','cpdf_closepath',
158
+ 'cpdf_closepath_fill_stroke','cpdf_closepath_stroke',
159
+ 'cpdf_continue_text','cpdf_curveto','cpdf_end_text','cpdf_fill',
160
+ 'cpdf_fill_stroke','cpdf_finalize','cpdf_finalize_page',
161
+ 'cpdf_global_set_document_limits','cpdf_import_jpeg','cpdf_lineto',
162
+ 'cpdf_moveto','cpdf_newpath','cpdf_open','cpdf_output_buffer',
163
+ 'cpdf_page_init','cpdf_rect','cpdf_restore','cpdf_rlineto',
164
+ 'cpdf_rmoveto','cpdf_rotate','cpdf_rotate_text','cpdf_save',
165
+ 'cpdf_save_to_file','cpdf_scale','cpdf_set_action_url',
166
+ 'cpdf_set_char_spacing','cpdf_set_creator','cpdf_set_current_page',
167
+ 'cpdf_set_font','cpdf_set_font_directories',
168
+ 'cpdf_set_font_map_file','cpdf_set_horiz_scaling',
169
+ 'cpdf_set_keywords','cpdf_set_leading','cpdf_set_page_animation',
170
+ 'cpdf_set_subject','cpdf_set_text_matrix','cpdf_set_text_pos',
171
+ 'cpdf_set_text_rendering','cpdf_set_text_rise','cpdf_set_title',
172
+ 'cpdf_set_viewer_preferences','cpdf_set_word_spacing',
173
+ 'cpdf_setdash','cpdf_setflat','cpdf_setgray','cpdf_setgray_fill',
174
+ 'cpdf_setgray_stroke','cpdf_setlinecap','cpdf_setlinejoin',
175
+ 'cpdf_setlinewidth','cpdf_setmiterlimit','cpdf_setrgbcolor',
176
+ 'cpdf_setrgbcolor_fill','cpdf_setrgbcolor_stroke','cpdf_show',
177
+ 'cpdf_show_xy','cpdf_stringwidth','cpdf_stroke','cpdf_text',
178
+ 'cpdf_translate','crack_check','crack_closedict',
179
+ 'crack_getlastmessage','crack_opendict','crc32','create_function',
180
+ 'crypt','ctype_alnum','ctype_alpha','ctype_cntrl','ctype_digit',
181
+ 'ctype_graph','ctype_lower','ctype_print','ctype_punct',
182
+ 'ctype_space','ctype_upper','ctype_xdigit','curl_close',
183
+ 'curl_copy_handle','curl_errno','curl_error','curl_exec',
184
+ 'curl_getinfo','curl_init','curl_multi_add_handle',
185
+ 'curl_multi_close','curl_multi_exec','curl_multi_getcontent',
186
+ 'curl_multi_info_read','curl_multi_init','curl_multi_remove_handle',
187
+ 'curl_multi_select','curl_setopt','curl_setopt_array',
188
+ 'curl_version','current','cvsclient_connect','cvsclient_log',
189
+ 'cvsclient_login','cvsclient_retrieve','date','date_create',
190
+ 'date_date_set','date_default_timezone_get',
191
+ 'date_default_timezone_set','date_format','date_isodate_set',
192
+ 'date_modify','date_offset_get','date_parse','date_sun_info',
193
+ 'date_sunrise','date_sunset','date_time_set','date_timezone_get',
194
+ 'date_timezone_set','db_id_list','dba_close','dba_delete',
195
+ 'dba_exists','dba_fetch','dba_firstkey','dba_handlers','dba_insert',
196
+ 'dba_key_split','dba_list','dba_nextkey','dba_open','dba_optimize',
197
+ 'dba_popen','dba_replace','dba_sync','dbase_add_record',
198
+ 'dbase_close','dbase_create','dbase_delete_record',
199
+ 'dbase_get_header_info','dbase_get_record',
200
+ 'dbase_get_record_with_names','dbase_numfields','dbase_numrecords',
201
+ 'dbase_open','dbase_pack','dbase_replace_record',
202
+ 'dbg_get_all_contexts','dbg_get_all_module_names',
203
+ 'dbg_get_all_source_lines','dbg_get_context_name',
204
+ 'dbg_get_module_name','dbg_get_profiler_results',
205
+ 'dbg_get_source_context','dblist','dbmclose','dbmdelete',
206
+ 'dbmexists','dbmfetch','dbmfirstkey','dbminsert','dbmnextkey',
207
+ 'dbmopen','dbmreplace','dbx_close','dbx_compare','dbx_connect',
208
+ 'dbx_error','dbx_escape_string','dbx_fetch_row','dbx_query',
209
+ 'dbx_sort','dcgettext','dcngettext','deaggregate','debug_backtrace',
210
+ 'debug_zval_dump','debugbreak','decbin','dechex','decoct','define',
211
+ 'defined','define_syslog_variables','deg2rad','dgettext','die',
212
+ 'dio_close','dio_open','dio_read','dio_seek','dio_stat','dio_write',
213
+ 'dir','dirname','disk_free_space','disk_total_space',
214
+ 'diskfreespace','dl','dngettext','docblock_token_name',
215
+ 'docblock_tokenize','dom_import_simplexml','domxml_add_root',
216
+ 'domxml_attributes','domxml_children','domxml_doc_add_root',
217
+ 'domxml_doc_document_element','domxml_doc_get_element_by_id',
218
+ 'domxml_doc_get_elements_by_tagname','domxml_doc_get_root',
219
+ 'domxml_doc_set_root','domxml_doc_validate','domxml_doc_xinclude',
220
+ 'domxml_dump_mem','domxml_dump_mem_file','domxml_dump_node',
221
+ 'domxml_dumpmem','domxml_elem_get_attribute',
222
+ 'domxml_elem_set_attribute','domxml_get_attribute','domxml_getattr',
223
+ 'domxml_html_dump_mem','domxml_new_child','domxml_new_doc',
224
+ 'domxml_new_xmldoc','domxml_node','domxml_node_add_namespace',
225
+ 'domxml_node_attributes','domxml_node_children',
226
+ 'domxml_node_get_content','domxml_node_has_attributes',
227
+ 'domxml_node_new_child','domxml_node_set_content',
228
+ 'domxml_node_set_namespace','domxml_node_unlink_node',
229
+ 'domxml_open_file','domxml_open_mem','domxml_parser',
230
+ 'domxml_parser_add_chunk','domxml_parser_cdata_section',
231
+ 'domxml_parser_characters','domxml_parser_comment',
232
+ 'domxml_parser_end','domxml_parser_end_document',
233
+ 'domxml_parser_end_element','domxml_parser_entity_reference',
234
+ 'domxml_parser_get_document','domxml_parser_namespace_decl',
235
+ 'domxml_parser_processing_instruction',
236
+ 'domxml_parser_start_document','domxml_parser_start_element',
237
+ 'domxml_root','domxml_set_attribute','domxml_setattr',
238
+ 'domxml_substitute_entities_default','domxml_unlink_node',
239
+ 'domxml_version','domxml_xmltree','doubleval','each','easter_date',
240
+ 'easter_days','empty','end','ereg','ereg_replace','eregi',
241
+ 'eregi_replace','error_get_last','error_log','error_reporting',
242
+ 'escapeshellarg','escapeshellcmd','eval','event_deschedule',
243
+ 'event_dispatch','event_free','event_handle_signal',
244
+ 'event_have_events','event_init','event_new','event_pending',
245
+ 'event_priority_set','event_schedule','event_set','event_timeout',
246
+ 'exec','exif_imagetype','exif_read_data','exif_tagname',
247
+ 'exif_thumbnail','exit','exp','explode','expm1','extension_loaded',
248
+ 'extract','ezmlm_hash','fbird_add_user','fbird_affected_rows',
249
+ 'fbird_backup','fbird_blob_add','fbird_blob_cancel',
250
+ 'fbird_blob_close','fbird_blob_create','fbird_blob_echo',
251
+ 'fbird_blob_get','fbird_blob_import','fbird_blob_info',
252
+ 'fbird_blob_open','fbird_close','fbird_commit','fbird_commit_ret',
253
+ 'fbird_connect','fbird_db_info','fbird_delete_user','fbird_drop_db',
254
+ 'fbird_errcode','fbird_errmsg','fbird_execute','fbird_fetch_assoc',
255
+ 'fbird_fetch_object','fbird_fetch_row','fbird_field_info',
256
+ 'fbird_free_event_handler','fbird_free_query','fbird_free_result',
257
+ 'fbird_gen_id','fbird_maintain_db','fbird_modify_user',
258
+ 'fbird_name_result','fbird_num_fields','fbird_num_params',
259
+ 'fbird_param_info','fbird_pconnect','fbird_prepare','fbird_query',
260
+ 'fbird_restore','fbird_rollback','fbird_rollback_ret',
261
+ 'fbird_server_info','fbird_service_attach','fbird_service_detach',
262
+ 'fbird_set_event_handler','fbird_trans','fbird_wait_event','fclose',
263
+ 'fdf_add_doc_javascript','fdf_add_template','fdf_close',
264
+ 'fdf_create','fdf_enum_values','fdf_errno','fdf_error','fdf_get_ap',
265
+ 'fdf_get_attachment','fdf_get_encoding','fdf_get_file',
266
+ 'fdf_get_flags','fdf_get_opt','fdf_get_status','fdf_get_value',
267
+ 'fdf_get_version','fdf_header','fdf_next_field_name','fdf_open',
268
+ 'fdf_open_string','fdf_remove_item','fdf_save','fdf_save_string',
269
+ 'fdf_set_ap','fdf_set_encoding','fdf_set_file','fdf_set_flags',
270
+ 'fdf_set_javascript_action','fdf_set_on_import_javascript',
271
+ 'fdf_set_opt','fdf_set_status','fdf_set_submit_form_action',
272
+ 'fdf_set_target_frame','fdf_set_value','fdf_set_version','feof',
273
+ 'fflush','fgetc','fgetcsv','fgets','fgetss','file','file_exists',
274
+ 'file_get_contents','file_put_contents','fileatime','filectime',
275
+ 'filegroup','fileinode','filemtime','fileowner','fileperms',
276
+ 'filepro','filepro_fieldcount','filepro_fieldname',
277
+ 'filepro_fieldtype','filepro_fieldwidth','filepro_retrieve',
278
+ 'filepro_rowcount','filesize','filetype','filter_has_var',
279
+ 'filter_id','filter_input','filter_input_array','filter_list',
280
+ 'filter_var','filter_var_array','finfo_buffer','finfo_close',
281
+ 'finfo_file','finfo_open','finfo_set_flags','floatval','flock',
282
+ 'floor','flush','fmod','fnmatch','fopen','fpassthru','fprintf',
283
+ 'fputcsv','fputs','fread','frenchtojd','fribidi_charset_info',
284
+ 'fribidi_get_charsets','fribidi_log2vis','fscanf','fseek',
285
+ 'fsockopen','fstat','ftell','ftok','ftp_alloc','ftp_cdup',
286
+ 'ftp_chdir','ftp_chmod','ftp_close','ftp_connect','ftp_delete',
287
+ 'ftp_exec','ftp_fget','ftp_fput','ftp_get','ftp_get_option',
288
+ 'ftp_login','ftp_mdtm','ftp_mkdir','ftp_nb_continue','ftp_nb_fget',
289
+ 'ftp_nb_fput','ftp_nb_get','ftp_nb_put','ftp_nlist','ftp_pasv',
290
+ 'ftp_put','ftp_pwd','ftp_quit','ftp_raw','ftp_rawlist','ftp_rename',
291
+ 'ftp_rmdir','ftp_set_option','ftp_site','ftp_size',
292
+ 'ftp_ssl_connect','ftp_systype','ftruncate','function_exists',
293
+ 'func_get_arg','func_get_args','func_num_args','fwrite','gd_info',
294
+ 'getallheaders','getcwd','getdate','getenv','gethostbyaddr',
295
+ 'gethostbyname','gethostbynamel','getimagesize','getlastmod',
296
+ 'getmxrr','getmygid','getmyinode','getmypid','getmyuid','getopt',
297
+ 'getprotobyname','getprotobynumber','getrandmax','getrusage',
298
+ 'getservbyname','getservbyport','gettext','gettimeofday','gettype',
299
+ 'get_browser','get_cfg_var','get_class','get_class_methods',
300
+ 'get_class_vars','get_current_user','get_declared_classes',
301
+ 'get_defined_constants','get_defined_functions','get_defined_vars',
302
+ 'get_extension_funcs','get_headers','get_html_translation_table',
303
+ 'get_included_files','get_include_path','get_loaded_extensions',
304
+ 'get_magic_quotes_gpc','get_magic_quotes_runtime','get_meta_tags',
305
+ 'get_object_vars','get_parent_class','get_required_files',
306
+ 'get_resource_type','glob','gmdate','gmmktime','gmp_abs','gmp_add',
307
+ 'gmp_and','gmp_clrbit','gmp_cmp','gmp_com','gmp_div','gmp_div_q',
308
+ 'gmp_div_qr','gmp_div_r','gmp_divexact','gmp_fact','gmp_gcd',
309
+ 'gmp_gcdext','gmp_hamdist','gmp_init','gmp_intval','gmp_invert',
310
+ 'gmp_jacobi','gmp_legendre','gmp_mod','gmp_mul','gmp_neg',
311
+ 'gmp_nextprime','gmp_or','gmp_perfect_square','gmp_popcount',
312
+ 'gmp_pow','gmp_powm','gmp_prob_prime','gmp_random','gmp_scan0',
313
+ 'gmp_scan1','gmp_setbit','gmp_sign','gmp_sqrt','gmp_sqrtrem',
314
+ 'gmp_strval','gmp_sub','gmp_xor','gmstrftime','gopher_parsedir',
315
+ 'gregoriantojd','gzclose','gzcompress','gzdeflate','gzencode',
316
+ 'gzeof','gzfile','gzgetc','gzgets','gzgetss','gzinflate','gzopen',
317
+ 'gzpassthru','gzputs','gzread','gzrewind','gzseek','gztell',
318
+ 'gzuncompress','gzwrite','hash','hash_algos','hash_file',
319
+ 'hash_final','hash_hmac','hash_hmac_file','hash_init','hash_update',
320
+ 'hash_update_file','hash_update_stream','header','headers_list',
321
+ 'headers_sent','hebrev','hebrevc','hexdec','highlight_file',
322
+ 'highlight_string','html_doc','html_doc_file','html_entity_decode',
323
+ 'htmlentities','htmlspecialchars','htmlspecialchars_decode',
324
+ 'http_build_cookie','http_build_query','http_build_str',
325
+ 'http_build_url','http_cache_etag','http_cache_last_modified',
326
+ 'http_chunked_decode','http_date','http_deflate','http_get',
327
+ 'http_get_request_body','http_get_request_body_stream',
328
+ 'http_get_request_headers','http_head','http_inflate',
329
+ 'http_match_etag','http_match_modified','http_match_request_header',
330
+ 'http_negotiate_charset','http_negotiate_content_type',
331
+ 'http_negotiate_language','http_parse_cookie','http_parse_headers',
332
+ 'http_parse_message','http_parse_params',
333
+ 'http_persistent_handles_clean','http_persistent_handles_count',
334
+ 'http_persistent_handles_ident','http_post_data','http_post_fields',
335
+ 'http_put_data','http_put_file','http_put_stream','http_redirect',
336
+ 'http_request','http_request_body_encode',
337
+ 'http_request_method_exists','http_request_method_name',
338
+ 'http_request_method_register','http_request_method_unregister',
339
+ 'http_send_content_disposition','http_send_content_type',
340
+ 'http_send_data','http_send_file','http_send_last_modified',
341
+ 'http_send_status','http_send_stream','http_support',
342
+ 'http_throttle','hypot','i18n_convert','i18n_discover_encoding',
343
+ 'i18n_http_input','i18n_http_output','i18n_internal_encoding',
344
+ 'i18n_ja_jp_hantozen','i18n_mime_header_decode',
345
+ 'i18n_mime_header_encode','ibase_add_user','ibase_affected_rows',
346
+ 'ibase_backup','ibase_blob_add','ibase_blob_cancel',
347
+ 'ibase_blob_close','ibase_blob_create','ibase_blob_echo',
348
+ 'ibase_blob_get','ibase_blob_import','ibase_blob_info',
349
+ 'ibase_blob_open','ibase_close','ibase_commit','ibase_commit_ret',
350
+ 'ibase_connect','ibase_db_info','ibase_delete_user','ibase_drop_db',
351
+ 'ibase_errcode','ibase_errmsg','ibase_execute','ibase_fetch_assoc',
352
+ 'ibase_fetch_object','ibase_fetch_row','ibase_field_info',
353
+ 'ibase_free_event_handler','ibase_free_query','ibase_free_result',
354
+ 'ibase_gen_id','ibase_maintain_db','ibase_modify_user',
355
+ 'ibase_name_result','ibase_num_fields','ibase_num_params',
356
+ 'ibase_param_info','ibase_pconnect','ibase_prepare','ibase_query',
357
+ 'ibase_restore','ibase_rollback','ibase_rollback_ret',
358
+ 'ibase_server_info','ibase_service_attach','ibase_service_detach',
359
+ 'ibase_set_event_handler','ibase_trans','ibase_wait_event','iconv',
360
+ 'iconv_get_encoding','iconv_mime_decode',
361
+ 'iconv_mime_decode_headers','iconv_mime_encode',
362
+ 'iconv_set_encoding','iconv_strlen','iconv_strpos','iconv_strrpos',
363
+ 'iconv_substr','id3_get_frame_long_name','id3_get_frame_short_name',
364
+ 'id3_get_genre_id','id3_get_genre_list','id3_get_genre_name',
365
+ 'id3_get_tag','id3_get_version','id3_remove_tag','id3_set_tag',
366
+ 'idate','ignore_user_abort','image_type_to_extension',
367
+ 'image_type_to_mime_type','image2wbmp','imagealphablending',
368
+ 'imageantialias','imagearc','imagechar','imagecharup',
369
+ 'imagecolorallocate','imagecolorallocatealpha','imagecolorat',
370
+ 'imagecolorclosest','imagecolorclosestalpha','imagecolordeallocate',
371
+ 'imagecolorexact','imagecolorexactalpha','imagecolormatch',
372
+ 'imagecolorresolve','imagecolorresolvealpha','imagecolorset',
373
+ 'imagecolorsforindex','imagecolorstotal','imagecolortransparent',
374
+ 'imageconvolution','imagecopy','imagecopymerge',
375
+ 'imagecopymergegray','imagecopyresampled','imagecopyresized',
376
+ 'imagecreate','imagecreatefromgd','imagecreatefromgd2',
377
+ 'imagecreatefromgd2part','imagecreatefromgif','imagecreatefromjpeg',
378
+ 'imagecreatefrompng','imagecreatefromstring','imagecreatefromwbmp',
379
+ 'imagecreatefromxbm','imagecreatetruecolor','imagedashedline',
380
+ 'imagedestroy','imageellipse','imagefill','imagefilledarc',
381
+ 'imagefilledellipse','imagefilledpolygon','imagefilledrectangle',
382
+ 'imagefilltoborder','imagefilter','imagefontheight',
383
+ 'imagefontwidth','imageftbbox','imagefttext','imagegammacorrect',
384
+ 'imagegd','imagegd2','imagegif','imagegrabscreen','imagegrabwindow',
385
+ 'imageinterlace','imageistruecolor','imagejpeg','imagelayereffect',
386
+ 'imageline','imageloadfont','imagepalettecopy','imagepng',
387
+ 'imagepolygon','imagepsbbox','imagepsencodefont',
388
+ 'imagepsextendfont','imagepsfreefont','imagepsloadfont',
389
+ 'imagepsslantfont','imagepstext','imagerectangle','imagerotate',
390
+ 'imagesavealpha','imagesetbrush','imagesetpixel','imagesetstyle',
391
+ 'imagesetthickness','imagesettile','imagestring','imagestringup',
392
+ 'imagesx','imagesy','imagetruecolortopalette','imagettfbbox',
393
+ 'imagettftext','imagetypes','imagewbmp','imagexbm','imap_8bit',
394
+ 'imap_alerts','imap_append','imap_base64','imap_binary','imap_body',
395
+ 'imap_bodystruct','imap_check','imap_clearflag_full','imap_close',
396
+ 'imap_create','imap_createmailbox','imap_delete',
397
+ 'imap_deletemailbox','imap_errors','imap_expunge',
398
+ 'imap_fetch_overview','imap_fetchbody','imap_fetchheader',
399
+ 'imap_fetchstructure','imap_fetchtext','imap_get_quota',
400
+ 'imap_get_quotaroot','imap_getacl','imap_getmailboxes',
401
+ 'imap_getsubscribed','imap_header','imap_headerinfo','imap_headers',
402
+ 'imap_last_error','imap_list','imap_listmailbox',
403
+ 'imap_listsubscribed','imap_lsub','imap_mail','imap_mail_compose',
404
+ 'imap_mail_copy','imap_mail_move','imap_mailboxmsginfo',
405
+ 'imap_mime_header_decode','imap_msgno','imap_num_msg',
406
+ 'imap_num_recent','imap_open','imap_ping','imap_qprint',
407
+ 'imap_rename','imap_renamemailbox','imap_reopen',
408
+ 'imap_rfc822_parse_adrlist','imap_rfc822_parse_headers',
409
+ 'imap_rfc822_write_address','imap_savebody','imap_scan',
410
+ 'imap_scanmailbox','imap_search','imap_set_quota','imap_setacl',
411
+ 'imap_setflag_full','imap_sort','imap_status','imap_subscribe',
412
+ 'imap_thread','imap_timeout','imap_uid','imap_undelete',
413
+ 'imap_unsubscribe','imap_utf7_decode','imap_utf7_encode',
414
+ 'imap_utf8','implode','import_request_variables','in_array',
415
+ 'ini_alter','ini_get','ini_get_all','ini_restore','ini_set',
416
+ 'intval','ip2long','iptcembed','iptcparse','isset','is_a',
417
+ 'is_array','is_bool','is_callable','is_dir','is_double',
418
+ 'is_executable','is_file','is_finite','is_float','is_infinite',
419
+ 'is_int','is_integer','is_link','is_long','is_nan','is_null',
420
+ 'is_numeric','is_object','is_readable','is_real','is_resource',
421
+ 'is_scalar','is_soap_fault','is_string','is_subclass_of',
422
+ 'is_uploaded_file','is_writable','is_writeable','iterator_apply',
423
+ 'iterator_count','iterator_to_array','java_last_exception_clear',
424
+ 'java_last_exception_get','jddayofweek','jdmonthname','jdtofrench',
425
+ 'jdtogregorian','jdtojewish','jdtojulian','jdtounix','jewishtojd',
426
+ 'join','jpeg2wbmp','json_decode','json_encode','juliantojd','key',
427
+ 'key_exists','krsort','ksort','lcg_value','ldap_add','ldap_bind',
428
+ 'ldap_close','ldap_compare','ldap_connect','ldap_count_entries',
429
+ 'ldap_delete','ldap_dn2ufn','ldap_err2str','ldap_errno',
430
+ 'ldap_error','ldap_explode_dn','ldap_first_attribute',
431
+ 'ldap_first_entry','ldap_first_reference','ldap_free_result',
432
+ 'ldap_get_attributes','ldap_get_dn','ldap_get_entries',
433
+ 'ldap_get_option','ldap_get_values','ldap_get_values_len',
434
+ 'ldap_list','ldap_mod_add','ldap_mod_del','ldap_mod_replace',
435
+ 'ldap_modify','ldap_next_attribute','ldap_next_entry',
436
+ 'ldap_next_reference','ldap_parse_reference','ldap_parse_result',
437
+ 'ldap_read','ldap_rename','ldap_search','ldap_set_option',
438
+ 'ldap_sort','ldap_start_tls','ldap_unbind','levenshtein',
439
+ 'libxml_clear_errors','libxml_get_errors','libxml_get_last_error',
440
+ 'libxml_set_streams_context','libxml_use_internal_errors','link',
441
+ 'linkinfo','list','localeconv','localtime','log','log1p','log10',
442
+ 'long2ip','lstat','ltrim','lzf_compress','lzf_decompress',
443
+ 'lzf_optimized_for','magic_quotes_runtime','mail','max','mbereg',
444
+ 'mberegi','mberegi_replace','mbereg_match','mbereg_replace',
445
+ 'mbereg_search','mbereg_search_getpos','mbereg_search_getregs',
446
+ 'mbereg_search_init','mbereg_search_pos','mbereg_search_regs',
447
+ 'mbereg_search_setpos','mbregex_encoding','mbsplit','mbstrcut',
448
+ 'mbstrlen','mbstrpos','mbstrrpos','mbsubstr','mb_check_encoding',
449
+ 'mb_convert_case','mb_convert_encoding','mb_convert_kana',
450
+ 'mb_convert_variables','mb_decode_mimeheader',
451
+ 'mb_decode_numericentity','mb_detect_encoding','mb_detect_order',
452
+ 'mb_encode_mimeheader','mb_encode_numericentity','mb_ereg',
453
+ 'mb_eregi','mb_eregi_replace','mb_ereg_match','mb_ereg_replace',
454
+ 'mb_ereg_search','mb_ereg_search_getpos','mb_ereg_search_getregs',
455
+ 'mb_ereg_search_init','mb_ereg_search_pos','mb_ereg_search_regs',
456
+ 'mb_ereg_search_setpos','mb_get_info','mb_http_input',
457
+ 'mb_http_output','mb_internal_encoding','mb_language',
458
+ 'mb_list_encodings','mb_output_handler','mb_parse_str',
459
+ 'mb_preferred_mime_name','mb_regex_encoding','mb_regex_set_options',
460
+ 'mb_send_mail','mb_split','mb_strcut','mb_strimwidth','mb_stripos',
461
+ 'mb_stristr','mb_strlen','mb_strpos','mb_strrchr','mb_strrichr',
462
+ 'mb_strripos','mb_strrpos','mb_strstr','mb_strtolower',
463
+ 'mb_strtoupper','mb_strwidth','mb_substitute_character','mb_substr',
464
+ 'mb_substr_count','mcrypt_cbc','mcrypt_cfb','mcrypt_create_iv',
465
+ 'mcrypt_decrypt','mcrypt_ecb','mcrypt_enc_get_algorithms_name',
466
+ 'mcrypt_enc_get_block_size','mcrypt_enc_get_iv_size',
467
+ 'mcrypt_enc_get_key_size','mcrypt_enc_get_modes_name',
468
+ 'mcrypt_enc_get_supported_key_sizes',
469
+ 'mcrypt_enc_is_block_algorithm',
470
+ 'mcrypt_enc_is_block_algorithm_mode','mcrypt_enc_is_block_mode',
471
+ 'mcrypt_enc_self_test','mcrypt_encrypt','mcrypt_generic',
472
+ 'mcrypt_generic_deinit','mcrypt_generic_end','mcrypt_generic_init',
473
+ 'mcrypt_get_block_size','mcrypt_get_cipher_name',
474
+ 'mcrypt_get_iv_size','mcrypt_get_key_size','mcrypt_list_algorithms',
475
+ 'mcrypt_list_modes','mcrypt_module_close',
476
+ 'mcrypt_module_get_algo_block_size',
477
+ 'mcrypt_module_get_algo_key_size',
478
+ 'mcrypt_module_get_supported_key_sizes',
479
+ 'mcrypt_module_is_block_algorithm',
480
+ 'mcrypt_module_is_block_algorithm_mode',
481
+ 'mcrypt_module_is_block_mode','mcrypt_module_open',
482
+ 'mcrypt_module_self_test','mcrypt_ofb','md5','md5_file',
483
+ 'mdecrypt_generic','memcache_add','memcache_add_server',
484
+ 'memcache_close','memcache_connect','memcache_debug',
485
+ 'memcache_decrement','memcache_delete','memcache_flush',
486
+ 'memcache_get','memcache_get_extended_stats',
487
+ 'memcache_get_server_status','memcache_get_stats',
488
+ 'memcache_get_version','memcache_increment','memcache_pconnect',
489
+ 'memcache_replace','memcache_set','memcache_set_compress_threshold',
490
+ 'memcache_set_server_params','memory_get_peak_usage',
491
+ 'memory_get_usage','metaphone','mhash','mhash_count',
492
+ 'mhash_get_block_size','mhash_get_hash_name','mhash_keygen_s2k',
493
+ 'method_exists','microtime','mime_content_type','min',
494
+ 'ming_keypress','ming_setcubicthreshold','ming_setscale',
495
+ 'ming_useconstants','ming_useswfversion','mkdir','mktime',
496
+ 'money_format','move_uploaded_file','msql','msql_affected_rows',
497
+ 'msql_close','msql_connect','msql_create_db','msql_createdb',
498
+ 'msql_data_seek','msql_db_query','msql_dbname','msql_drop_db',
499
+ 'msql_dropdb','msql_error','msql_fetch_array','msql_fetch_field',
500
+ 'msql_fetch_object','msql_fetch_row','msql_field_flags',
501
+ 'msql_field_len','msql_field_name','msql_field_seek',
502
+ 'msql_field_table','msql_field_type','msql_fieldflags',
503
+ 'msql_fieldlen','msql_fieldname','msql_fieldtable','msql_fieldtype',
504
+ 'msql_free_result','msql_freeresult','msql_list_dbs',
505
+ 'msql_list_fields','msql_list_tables','msql_listdbs',
506
+ 'msql_listfields','msql_listtables','msql_num_fields',
507
+ 'msql_num_rows','msql_numfields','msql_numrows','msql_pconnect',
508
+ 'msql_query','msql_regcase','msql_result','msql_select_db',
509
+ 'msql_selectdb','msql_tablename','mssql_bind','mssql_close',
510
+ 'mssql_connect','mssql_data_seek','mssql_execute',
511
+ 'mssql_fetch_array','mssql_fetch_assoc','mssql_fetch_batch',
512
+ 'mssql_fetch_field','mssql_fetch_object','mssql_fetch_row',
513
+ 'mssql_field_length','mssql_field_name','mssql_field_seek',
514
+ 'mssql_field_type','mssql_free_result','mssql_free_statement',
515
+ 'mssql_get_last_message','mssql_guid_string','mssql_init',
516
+ 'mssql_min_error_severity','mssql_min_message_severity',
517
+ 'mssql_next_result','mssql_num_fields','mssql_num_rows',
518
+ 'mssql_pconnect','mssql_query','mssql_result','mssql_rows_affected',
519
+ 'mssql_select_db','mt_getrandmax','mt_rand','mt_srand','mysql',
520
+ 'mysql_affected_rows','mysql_client_encoding','mysql_close',
521
+ 'mysql_connect','mysql_createdb','mysql_create_db',
522
+ 'mysql_data_seek','mysql_dbname','mysql_db_name','mysql_db_query',
523
+ 'mysql_dropdb','mysql_drop_db','mysql_errno','mysql_error',
524
+ 'mysql_escape_string','mysql_fetch_array','mysql_fetch_assoc',
525
+ 'mysql_fetch_field','mysql_fetch_lengths','mysql_fetch_object',
526
+ 'mysql_fetch_row','mysql_fieldflags','mysql_fieldlen',
527
+ 'mysql_fieldname','mysql_fieldtable','mysql_fieldtype',
528
+ 'mysql_field_flags','mysql_field_len','mysql_field_name',
529
+ 'mysql_field_seek','mysql_field_table','mysql_field_type',
530
+ 'mysql_freeresult','mysql_free_result','mysql_get_client_info',
531
+ 'mysql_get_host_info','mysql_get_proto_info',
532
+ 'mysql_get_server_info','mysql_info','mysql_insert_id',
533
+ 'mysql_listdbs','mysql_listfields','mysql_listtables',
534
+ 'mysql_list_dbs','mysql_list_fields','mysql_list_processes',
535
+ 'mysql_list_tables','mysql_numfields','mysql_numrows',
536
+ 'mysql_num_fields','mysql_num_rows','mysql_pconnect','mysql_ping',
537
+ 'mysql_query','mysql_real_escape_string','mysql_result',
538
+ 'mysql_selectdb','mysql_select_db','mysql_set_charset','mysql_stat',
539
+ 'mysql_tablename','mysql_table_name','mysql_thread_id',
540
+ 'mysql_unbuffered_query','mysqli_affected_rows','mysqli_autocommit',
541
+ 'mysqli_bind_param','mysqli_bind_result','mysqli_change_user',
542
+ 'mysqli_character_set_name','mysqli_client_encoding','mysqli_close',
543
+ 'mysqli_commit','mysqli_connect','mysqli_connect_errno',
544
+ 'mysqli_connect_error','mysqli_data_seek','mysqli_debug',
545
+ 'mysqli_disable_reads_from_master','mysqli_disable_rpl_parse',
546
+ 'mysqli_dump_debug_info','mysqli_embedded_server_end',
547
+ 'mysqli_embedded_server_start','mysqli_enable_reads_from_master',
548
+ 'mysqli_enable_rpl_parse','mysqli_errno','mysqli_error',
549
+ 'mysqli_escape_string','mysqli_execute','mysqli_fetch',
550
+ 'mysqli_fetch_array','mysqli_fetch_assoc','mysqli_fetch_field',
551
+ 'mysqli_fetch_field_direct','mysqli_fetch_fields',
552
+ 'mysqli_fetch_lengths','mysqli_fetch_object','mysqli_fetch_row',
553
+ 'mysqli_field_count','mysqli_field_seek','mysqli_field_tell',
554
+ 'mysqli_free_result','mysqli_get_charset','mysqli_get_client_info',
555
+ 'mysqli_get_client_version','mysqli_get_host_info',
556
+ 'mysqli_get_metadata','mysqli_get_proto_info',
557
+ 'mysqli_get_server_info','mysqli_get_server_version',
558
+ 'mysqli_get_warnings','mysqli_info','mysqli_init',
559
+ 'mysqli_insert_id','mysqli_kill','mysqli_master_query',
560
+ 'mysqli_more_results','mysqli_multi_query','mysqli_next_result',
561
+ 'mysqli_num_fields','mysqli_num_rows','mysqli_options',
562
+ 'mysqli_param_count','mysqli_ping','mysqli_prepare','mysqli_query',
563
+ 'mysqli_real_connect','mysqli_real_escape_string',
564
+ 'mysqli_real_query','mysqli_report','mysqli_rollback',
565
+ 'mysqli_rpl_parse_enabled','mysqli_rpl_probe',
566
+ 'mysqli_rpl_query_type','mysqli_select_db','mysqli_send_long_data',
567
+ 'mysqli_send_query','mysqli_set_charset',
568
+ 'mysqli_set_local_infile_default','mysqli_set_local_infile_handler',
569
+ 'mysqli_set_opt','mysqli_slave_query','mysqli_sqlstate',
570
+ 'mysqli_ssl_set','mysqli_stat','mysqli_stmt_affected_rows',
571
+ 'mysqli_stmt_attr_get','mysqli_stmt_attr_set',
572
+ 'mysqli_stmt_bind_param','mysqli_stmt_bind_result',
573
+ 'mysqli_stmt_close','mysqli_stmt_data_seek','mysqli_stmt_errno',
574
+ 'mysqli_stmt_error','mysqli_stmt_execute','mysqli_stmt_fetch',
575
+ 'mysqli_stmt_field_count','mysqli_stmt_free_result',
576
+ 'mysqli_stmt_get_warnings','mysqli_stmt_init',
577
+ 'mysqli_stmt_insert_id','mysqli_stmt_num_rows',
578
+ 'mysqli_stmt_param_count','mysqli_stmt_prepare','mysqli_stmt_reset',
579
+ 'mysqli_stmt_result_metadata','mysqli_stmt_send_long_data',
580
+ 'mysqli_stmt_sqlstate','mysqli_stmt_store_result',
581
+ 'mysqli_store_result','mysqli_thread_id','mysqli_thread_safe',
582
+ 'mysqli_use_result','mysqli_warning_count','natcasesort','natsort',
583
+ 'new_xmldoc','next','ngettext','nl2br','nl_langinfo',
584
+ 'ntuser_getdomaincontroller','ntuser_getusergroups',
585
+ 'ntuser_getuserinfo','ntuser_getuserlist','number_format',
586
+ 'ob_clean','ob_deflatehandler','ob_end_clean','ob_end_flush',
587
+ 'ob_etaghandler','ob_flush','ob_get_clean','ob_get_contents',
588
+ 'ob_get_flush','ob_get_length','ob_get_level','ob_get_status',
589
+ 'ob_gzhandler','ob_iconv_handler','ob_implicit_flush',
590
+ 'ob_inflatehandler','ob_list_handlers','ob_start','ob_tidyhandler',
591
+ 'octdec','odbc_autocommit','odbc_binmode','odbc_close',
592
+ 'odbc_close_all','odbc_columnprivileges','odbc_columns',
593
+ 'odbc_commit','odbc_connect','odbc_cursor','odbc_data_source',
594
+ 'odbc_do','odbc_error','odbc_errormsg','odbc_exec','odbc_execute',
595
+ 'odbc_fetch_array','odbc_fetch_into','odbc_fetch_object',
596
+ 'odbc_fetch_row','odbc_field_len','odbc_field_name',
597
+ 'odbc_field_num','odbc_field_precision','odbc_field_scale',
598
+ 'odbc_field_type','odbc_foreignkeys','odbc_free_result',
599
+ 'odbc_gettypeinfo','odbc_longreadlen','odbc_next_result',
600
+ 'odbc_num_fields','odbc_num_rows','odbc_pconnect','odbc_prepare',
601
+ 'odbc_primarykeys','odbc_procedurecolumns','odbc_procedures',
602
+ 'odbc_result','odbc_result_all','odbc_rollback','odbc_setoption',
603
+ 'odbc_specialcolumns','odbc_statistics','odbc_tableprivileges',
604
+ 'odbc_tables','opendir','openlog','openssl_csr_export',
605
+ 'openssl_csr_export_to_file','openssl_csr_get_public_key',
606
+ 'openssl_csr_get_subject','openssl_csr_new','openssl_csr_sign',
607
+ 'openssl_error_string','openssl_free_key','openssl_get_privatekey',
608
+ 'openssl_get_publickey','openssl_open','openssl_pkcs12_export',
609
+ 'openssl_pkcs12_export_to_file','openssl_pkcs12_read',
610
+ 'openssl_pkcs7_decrypt','openssl_pkcs7_encrypt',
611
+ 'openssl_pkcs7_sign','openssl_pkcs7_verify','openssl_pkey_export',
612
+ 'openssl_pkey_export_to_file','openssl_pkey_free',
613
+ 'openssl_pkey_get_details','openssl_pkey_get_private',
614
+ 'openssl_pkey_get_public','openssl_pkey_new',
615
+ 'openssl_private_decrypt','openssl_private_encrypt',
616
+ 'openssl_public_decrypt','openssl_public_encrypt','openssl_seal',
617
+ 'openssl_sign','openssl_verify','openssl_x509_checkpurpose',
618
+ 'openssl_x509_check_private_key','openssl_x509_export',
619
+ 'openssl_x509_export_to_file','openssl_x509_free',
620
+ 'openssl_x509_parse','openssl_x509_read','ord',
621
+ 'output_add_rewrite_var','output_reset_rewrite_vars','overload',
622
+ 'outputdebugstring','pack','parse_ini_file','parse_str','parse_url',
623
+ 'parsekit_compile_file','parsekit_compile_string',
624
+ 'parsekit_func_arginfo','parsekit_opcode_flags',
625
+ 'parsekit_opcode_name','passthru','pathinfo','pclose',
626
+ 'pdf_add_bookmark','pdf_add_launchlink','pdf_add_locallink',
627
+ 'pdf_add_nameddest','pdf_add_note','pdf_add_pdflink',
628
+ 'pdf_add_thumbnail','pdf_add_weblink','pdf_arc','pdf_arcn',
629
+ 'pdf_attach_file','pdf_begin_font','pdf_begin_glyph',
630
+ 'pdf_begin_page','pdf_begin_pattern','pdf_begin_template',
631
+ 'pdf_circle','pdf_clip','pdf_close','pdf_close_image',
632
+ 'pdf_close_pdi','pdf_close_pdi_page','pdf_closepath',
633
+ 'pdf_closepath_fill_stroke','pdf_closepath_stroke','pdf_concat',
634
+ 'pdf_continue_text','pdf_create_gstate','pdf_create_pvf',
635
+ 'pdf_curveto','pdf_delete','pdf_delete_pvf','pdf_encoding_set_char',
636
+ 'pdf_end_font','pdf_end_glyph','pdf_end_page','pdf_end_pattern',
637
+ 'pdf_end_template','pdf_endpath','pdf_fill','pdf_fill_imageblock',
638
+ 'pdf_fill_pdfblock','pdf_fill_stroke','pdf_fill_textblock',
639
+ 'pdf_findfont','pdf_fit_image','pdf_fit_pdi_page',
640
+ 'pdf_fit_textline','pdf_get_apiname','pdf_get_buffer',
641
+ 'pdf_get_errmsg','pdf_get_errnum','pdf_get_parameter',
642
+ 'pdf_get_pdi_parameter','pdf_get_pdi_value','pdf_get_value',
643
+ 'pdf_initgraphics','pdf_lineto','pdf_load_font',
644
+ 'pdf_load_iccprofile','pdf_load_image','pdf_makespotcolor',
645
+ 'pdf_moveto','pdf_new','pdf_open_ccitt','pdf_open_file',
646
+ 'pdf_open_image','pdf_open_image_file','pdf_open_pdi',
647
+ 'pdf_open_pdi_page','pdf_place_image','pdf_place_pdi_page',
648
+ 'pdf_process_pdi','pdf_rect','pdf_restore','pdf_rotate','pdf_save',
649
+ 'pdf_scale','pdf_set_border_color','pdf_set_border_dash',
650
+ 'pdf_set_border_style','pdf_set_gstate','pdf_set_info',
651
+ 'pdf_set_parameter','pdf_set_text_pos','pdf_set_value',
652
+ 'pdf_setcolor','pdf_setdash','pdf_setdashpattern','pdf_setflat',
653
+ 'pdf_setfont','pdf_setlinecap','pdf_setlinejoin','pdf_setlinewidth',
654
+ 'pdf_setmatrix','pdf_setmiterlimit','pdf_setpolydash','pdf_shading',
655
+ 'pdf_shading_pattern','pdf_shfill','pdf_show','pdf_show_boxed',
656
+ 'pdf_show_xy','pdf_skew','pdf_stringwidth','pdf_stroke',
657
+ 'pdf_translate','pdo_drivers','pfsockopen','pg_affected_rows',
658
+ 'pg_cancel_query','pg_clientencoding','pg_client_encoding',
659
+ 'pg_close','pg_cmdtuples','pg_connect','pg_connection_busy',
660
+ 'pg_connection_reset','pg_connection_status','pg_convert',
661
+ 'pg_copy_from','pg_copy_to','pg_dbname','pg_delete','pg_end_copy',
662
+ 'pg_errormessage','pg_escape_bytea','pg_escape_string','pg_exec',
663
+ 'pg_execute','pg_fetch_all','pg_fetch_all_columns','pg_fetch_array',
664
+ 'pg_fetch_assoc','pg_fetch_object','pg_fetch_result','pg_fetch_row',
665
+ 'pg_fieldisnull','pg_fieldname','pg_fieldnum','pg_fieldprtlen',
666
+ 'pg_fieldsize','pg_fieldtype','pg_field_is_null','pg_field_name',
667
+ 'pg_field_num','pg_field_prtlen','pg_field_size','pg_field_table',
668
+ 'pg_field_type','pg_field_type_oid','pg_free_result',
669
+ 'pg_freeresult','pg_get_notify','pg_get_pid','pg_get_result',
670
+ 'pg_getlastoid','pg_host','pg_insert','pg_last_error',
671
+ 'pg_last_notice','pg_last_oid','pg_loclose','pg_locreate',
672
+ 'pg_loexport','pg_loimport','pg_loopen','pg_loread','pg_loreadall',
673
+ 'pg_lounlink','pg_lowrite','pg_lo_close','pg_lo_create',
674
+ 'pg_lo_export','pg_lo_import','pg_lo_open','pg_lo_read',
675
+ 'pg_lo_read_all','pg_lo_seek','pg_lo_tell','pg_lo_unlink',
676
+ 'pg_lo_write','pg_meta_data','pg_numfields','pg_numrows',
677
+ 'pg_num_fields','pg_num_rows','pg_options','pg_parameter_status',
678
+ 'pg_pconnect','pg_ping','pg_port','pg_prepare','pg_put_line',
679
+ 'pg_query','pg_query_params','pg_result','pg_result_error',
680
+ 'pg_result_error_field','pg_result_seek','pg_result_status',
681
+ 'pg_select','pg_send_execute','pg_send_prepare','pg_send_query',
682
+ 'pg_send_query_params','pg_set_client_encoding',
683
+ 'pg_set_error_verbosity','pg_setclientencoding','pg_trace',
684
+ 'pg_transaction_status','pg_tty','pg_unescape_bytea','pg_untrace',
685
+ 'pg_update','pg_version','php_egg_logo_guid','php_ini_loaded_file',
686
+ 'php_ini_scanned_files','php_logo_guid','php_real_logo_guid',
687
+ 'php_sapi_name','php_strip_whitespace','php_uname','phpcredits',
688
+ 'phpdoc_xml_from_string','phpinfo','phpversion','pi','png2wbmp',
689
+ 'pop3_close','pop3_delete_message','pop3_get_account_size',
690
+ 'pop3_get_message','pop3_get_message_count',
691
+ 'pop3_get_message_header','pop3_get_message_ids',
692
+ 'pop3_get_message_size','pop3_get_message_sizes','pop3_open',
693
+ 'pop3_undelete','popen','pos','posix_ctermid','posix_errno',
694
+ 'posix_getcwd','posix_getegid','posix_geteuid','posix_getgid',
695
+ 'posix_getgrgid','posix_getgrnam','posix_getgroups',
696
+ 'posix_getlogin','posix_getpgid','posix_getpgrp','posix_getpid',
697
+ 'posix_getppid','posix_getpwnam','posix_getpwuid','posix_getrlimit',
698
+ 'posix_getsid','posix_getuid','posix_get_last_error','posix_isatty',
699
+ 'posix_kill','posix_mkfifo','posix_setegid','posix_seteuid',
700
+ 'posix_setgid','posix_setpgid','posix_setsid','posix_setuid',
701
+ 'posix_strerror','posix_times','posix_ttyname','posix_uname','pow',
702
+ 'preg_grep','preg_last_error','preg_match','preg_match_all',
703
+ 'preg_quote','preg_replace','preg_replace_callback','preg_split',
704
+ 'prev','print_r','printf','proc_close','proc_get_status',
705
+ 'proc_open','proc_terminate','putenv','quoted_printable_decode',
706
+ 'quotemeta','rad2deg','radius_acct_open','radius_add_server',
707
+ 'radius_auth_open','radius_close','radius_config',
708
+ 'radius_create_request','radius_cvt_addr','radius_cvt_int',
709
+ 'radius_cvt_string','radius_demangle','radius_demangle_mppe_key',
710
+ 'radius_get_attr','radius_get_vendor_attr','radius_put_addr',
711
+ 'radius_put_attr','radius_put_int','radius_put_string',
712
+ 'radius_put_vendor_addr','radius_put_vendor_attr',
713
+ 'radius_put_vendor_int','radius_put_vendor_string',
714
+ 'radius_request_authenticator','radius_send_request',
715
+ 'radius_server_secret','radius_strerror','rand','range',
716
+ 'rawurldecode','rawurlencode','read_exif_data','readdir','readfile',
717
+ 'readgzfile','readlink','realpath','reg_close_key','reg_create_key',
718
+ 'reg_enum_key','reg_enum_value','reg_get_value','reg_open_key',
719
+ 'reg_set_value','register_shutdown_function',
720
+ 'register_tick_function','rename','res_close','res_get','res_list',
721
+ 'res_list_type','res_open','res_set','reset',
722
+ 'restore_error_handler','restore_include_path','rewind','rewinddir',
723
+ 'rmdir','round','rsort','rtrim','runkit_class_adopt',
724
+ 'runkit_class_emancipate','runkit_constant_add',
725
+ 'runkit_constant_redefine','runkit_constant_remove',
726
+ 'runkit_default_property_add','runkit_function_add',
727
+ 'runkit_function_copy','runkit_function_redefine',
728
+ 'runkit_function_remove','runkit_function_rename','runkit_import',
729
+ 'runkit_lint','runkit_lint_file','runkit_method_add',
730
+ 'runkit_method_copy','runkit_method_redefine',
731
+ 'runkit_method_remove','runkit_method_rename','runkit_object_id',
732
+ 'runkit_return_value_used','runkit_sandbox_output_handler',
733
+ 'runkit_superglobals','runkit_zval_inspect','scandir','sem_acquire',
734
+ 'sem_get','sem_release','sem_remove','serialize',
735
+ 'session_cache_expire','session_cache_limiter','session_commit',
736
+ 'session_decode','session_destroy','session_encode',
737
+ 'session_get_cookie_params','session_id','session_is_registered',
738
+ 'session_module_name','session_name','session_regenerate_id',
739
+ 'session_register','session_save_path','session_set_cookie_params',
740
+ 'session_set_save_handler','session_start','session_unregister',
741
+ 'session_unset','session_write_close','set_content',
742
+ 'set_error_handler','set_file_buffer','set_include_path',
743
+ 'set_magic_quotes_runtime','set_socket_blocking','set_time_limit',
744
+ 'setcookie','setlocale','setrawcookie','settype','sha1','sha1_file',
745
+ 'shell_exec','shmop_close','shmop_delete','shmop_open','shmop_read',
746
+ 'shmop_size','shmop_write','shm_attach','shm_detach','shm_get_var',
747
+ 'shm_put_var','shm_remove','shm_remove_var','show_source','shuffle',
748
+ 'similar_text','simplexml_import_dom','simplexml_load_file',
749
+ 'simplexml_load_string','sin','sinh','sizeof','sleep','smtp_close',
750
+ 'smtp_cmd_data','smtp_cmd_mail','smtp_cmd_rcpt','smtp_connect',
751
+ 'snmp_get_quick_print','snmp_get_valueretrieval','snmp_read_mib',
752
+ 'snmp_set_quick_print','snmp_set_valueretrieval','snmp2_get',
753
+ 'snmp2_getnext','snmp2_real_walk','snmp2_set','snmp2_walk',
754
+ 'snmp3_get','snmp3_getnext','snmp3_real_walk','snmp3_set',
755
+ 'snmp3_walk','snmpget','snmpgetnext','snmprealwalk','snmpset',
756
+ 'snmpwalk','snmpwalkoid','socket_accept','socket_bind',
757
+ 'socket_clear_error','socket_close','socket_connect',
758
+ 'socket_create','socket_create_listen','socket_create_pair',
759
+ 'socket_getopt','socket_getpeername','socket_getsockname',
760
+ 'socket_get_option','socket_get_status','socket_iovec_add',
761
+ 'socket_iovec_alloc','socket_iovec_delete','socket_iovec_fetch',
762
+ 'socket_iovec_free','socket_iovec_set','socket_last_error',
763
+ 'socket_listen','socket_read','socket_readv','socket_recv',
764
+ 'socket_recvfrom','socket_recvmsg','socket_select','socket_send',
765
+ 'socket_sendmsg','socket_sendto','socket_setopt','socket_set_block',
766
+ 'socket_set_blocking','socket_set_nonblock','socket_set_option',
767
+ 'socket_set_timeout','socket_shutdown','socket_strerror',
768
+ 'socket_write','socket_writev','sort','soundex','spl_autoload',
769
+ 'spl_autoload_call','spl_autoload_extensions',
770
+ 'spl_autoload_functions','spl_autoload_register',
771
+ 'spl_autoload_unregister','spl_classes','spl_object_hash','split',
772
+ 'spliti','sprintf','sql_regcase','sqlite_array_query',
773
+ 'sqlite_busy_timeout','sqlite_changes','sqlite_close',
774
+ 'sqlite_column','sqlite_create_aggregate','sqlite_create_function',
775
+ 'sqlite_current','sqlite_error_string','sqlite_escape_string',
776
+ 'sqlite_exec','sqlite_factory','sqlite_fetch_all',
777
+ 'sqlite_fetch_array','sqlite_fetch_column_types',
778
+ 'sqlite_fetch_object','sqlite_fetch_single','sqlite_fetch_string',
779
+ 'sqlite_field_name','sqlite_has_more','sqlite_has_prev',
780
+ 'sqlite_last_error','sqlite_last_insert_rowid','sqlite_libencoding',
781
+ 'sqlite_libversion','sqlite_next','sqlite_num_fields',
782
+ 'sqlite_num_rows','sqlite_open','sqlite_popen','sqlite_prev',
783
+ 'sqlite_query','sqlite_rewind','sqlite_seek','sqlite_single_query',
784
+ 'sqlite_udf_decode_binary','sqlite_udf_encode_binary',
785
+ 'sqlite_unbuffered_query','sqlite_valid','sqrt','srand','sscanf',
786
+ 'ssh2_auth_hostbased_file','ssh2_auth_none','ssh2_auth_password',
787
+ 'ssh2_auth_pubkey_file','ssh2_connect','ssh2_exec',
788
+ 'ssh2_fetch_stream','ssh2_fingerprint','ssh2_forward_accept',
789
+ 'ssh2_forward_listen','ssh2_methods_negotiated','ssh2_poll',
790
+ 'ssh2_publickey_add','ssh2_publickey_init','ssh2_publickey_list',
791
+ 'ssh2_publickey_remove','ssh2_scp_recv','ssh2_scp_send','ssh2_sftp',
792
+ 'ssh2_sftp_lstat','ssh2_sftp_mkdir','ssh2_sftp_readlink',
793
+ 'ssh2_sftp_realpath','ssh2_sftp_rename','ssh2_sftp_rmdir',
794
+ 'ssh2_sftp_stat','ssh2_sftp_symlink','ssh2_sftp_unlink',
795
+ 'ssh2_shell','ssh2_tunnel','stat','stats_absolute_deviation',
796
+ 'stats_cdf_beta','stats_cdf_binomial','stats_cdf_cauchy',
797
+ 'stats_cdf_chisquare','stats_cdf_exponential','stats_cdf_f',
798
+ 'stats_cdf_gamma','stats_cdf_laplace','stats_cdf_logistic',
799
+ 'stats_cdf_negative_binomial','stats_cdf_noncentral_chisquare',
800
+ 'stats_cdf_noncentral_f','stats_cdf_noncentral_t',
801
+ 'stats_cdf_normal','stats_cdf_poisson','stats_cdf_t',
802
+ 'stats_cdf_uniform','stats_cdf_weibull','stats_covariance',
803
+ 'stats_dens_beta','stats_dens_cauchy','stats_dens_chisquare',
804
+ 'stats_dens_exponential','stats_dens_f','stats_dens_gamma',
805
+ 'stats_dens_laplace','stats_dens_logistic','stats_dens_normal',
806
+ 'stats_dens_pmf_binomial','stats_dens_pmf_hypergeometric',
807
+ 'stats_dens_pmf_negative_binomial','stats_dens_pmf_poisson',
808
+ 'stats_dens_t','stats_dens_uniform','stats_dens_weibull',
809
+ 'stats_harmonic_mean','stats_kurtosis','stats_rand_gen_beta',
810
+ 'stats_rand_gen_chisquare','stats_rand_gen_exponential',
811
+ 'stats_rand_gen_f','stats_rand_gen_funiform','stats_rand_gen_gamma',
812
+ 'stats_rand_gen_ipoisson','stats_rand_gen_iuniform',
813
+ 'stats_rand_gen_noncenral_f','stats_rand_gen_noncentral_chisquare',
814
+ 'stats_rand_gen_noncentral_t','stats_rand_gen_normal',
815
+ 'stats_rand_gen_t','stats_rand_getsd','stats_rand_ibinomial',
816
+ 'stats_rand_ibinomial_negative','stats_rand_ignlgi',
817
+ 'stats_rand_phrase_to_seeds','stats_rand_ranf','stats_rand_setall',
818
+ 'stats_skew','stats_standard_deviation','stats_stat_binomial_coef',
819
+ 'stats_stat_correlation','stats_stat_factorial',
820
+ 'stats_stat_independent_t','stats_stat_innerproduct',
821
+ 'stats_stat_paired_t','stats_stat_percentile','stats_stat_powersum',
822
+ 'stats_variance','strcasecmp','strchr','strcmp','strcoll','strcspn',
823
+ 'stream_bucket_append','stream_bucket_make_writeable',
824
+ 'stream_bucket_new','stream_bucket_prepend','stream_context_create',
825
+ 'stream_context_get_default','stream_context_get_options',
826
+ 'stream_context_set_default','stream_context_set_option',
827
+ 'stream_context_set_params','stream_copy_to_stream',
828
+ 'stream_encoding','stream_filter_append','stream_filter_prepend',
829
+ 'stream_filter_register','stream_filter_remove',
830
+ 'stream_get_contents','stream_get_filters','stream_get_line',
831
+ 'stream_get_meta_data','stream_get_transports',
832
+ 'stream_get_wrappers','stream_is_local',
833
+ 'stream_notification_callback','stream_register_wrapper',
834
+ 'stream_resolve_include_path','stream_select','stream_set_blocking',
835
+ 'stream_set_timeout','stream_set_write_buffer',
836
+ 'stream_socket_accept','stream_socket_client',
837
+ 'stream_socket_enable_crypto','stream_socket_get_name',
838
+ 'stream_socket_pair','stream_socket_recvfrom',
839
+ 'stream_socket_sendto','stream_socket_server',
840
+ 'stream_socket_shutdown','stream_supports_lock',
841
+ 'stream_wrapper_register','stream_wrapper_restore',
842
+ 'stream_wrapper_unregister','strftime','stripcslashes','stripos',
843
+ 'stripslashes','strip_tags','stristr','strlen','strnatcasecmp',
844
+ 'strnatcmp','strpbrk','strncasecmp','strncmp','strpos','strrchr',
845
+ 'strrev','strripos','strrpos','strspn','strstr','strtok',
846
+ 'strtolower','strtotime','strtoupper','strtr','strval',
847
+ 'str_ireplace','str_pad','str_repeat','str_replace','str_rot13',
848
+ 'str_split','str_shuffle','str_word_count','substr',
849
+ 'substr_compare','substr_count','substr_replace','svn_add',
850
+ 'svn_auth_get_parameter','svn_auth_set_parameter','svn_cat',
851
+ 'svn_checkout','svn_cleanup','svn_client_version','svn_commit',
852
+ 'svn_diff','svn_export','svn_fs_abort_txn','svn_fs_apply_text',
853
+ 'svn_fs_begin_txn2','svn_fs_change_node_prop','svn_fs_check_path',
854
+ 'svn_fs_contents_changed','svn_fs_copy','svn_fs_delete',
855
+ 'svn_fs_dir_entries','svn_fs_file_contents','svn_fs_file_length',
856
+ 'svn_fs_is_dir','svn_fs_is_file','svn_fs_make_dir',
857
+ 'svn_fs_make_file','svn_fs_node_created_rev','svn_fs_node_prop',
858
+ 'svn_fs_props_changed','svn_fs_revision_prop',
859
+ 'svn_fs_revision_root','svn_fs_txn_root','svn_fs_youngest_rev',
860
+ 'svn_import','svn_info','svn_log','svn_ls','svn_repos_create',
861
+ 'svn_repos_fs','svn_repos_fs_begin_txn_for_commit',
862
+ 'svn_repos_fs_commit_txn','svn_repos_hotcopy','svn_repos_open',
863
+ 'svn_repos_recover','svn_status','svn_update','symlink',
864
+ 'sys_get_temp_dir','syslog','system','tan','tanh','tempnam',
865
+ 'textdomain','thread_get','thread_include','thread_lock',
866
+ 'thread_lock_try','thread_mutex_destroy','thread_mutex_init',
867
+ 'thread_set','thread_start','thread_unlock','tidy_access_count',
868
+ 'tidy_clean_repair','tidy_config_count','tidy_diagnose',
869
+ 'tidy_error_count','tidy_get_body','tidy_get_config',
870
+ 'tidy_get_error_buffer','tidy_get_head','tidy_get_html',
871
+ 'tidy_get_html_ver','tidy_get_output','tidy_get_release',
872
+ 'tidy_get_root','tidy_get_status','tidy_getopt','tidy_is_xhtml',
873
+ 'tidy_is_xml','tidy_parse_file','tidy_parse_string',
874
+ 'tidy_repair_file','tidy_repair_string','tidy_warning_count','time',
875
+ 'timezone_abbreviations_list','timezone_identifiers_list',
876
+ 'timezone_name_from_abbr','timezone_name_get','timezone_offset_get',
877
+ 'timezone_open','timezone_transitions_get','tmpfile',
878
+ 'token_get_all','token_name','touch','trigger_error',
879
+ 'transliterate','transliterate_filters_get','trim','uasort',
880
+ 'ucfirst','ucwords','uksort','umask','uniqid','unixtojd','unlink',
881
+ 'unpack','unregister_tick_function','unserialize','unset',
882
+ 'urldecode','urlencode','user_error','use_soap_error_handler',
883
+ 'usleep','usort','utf8_decode','utf8_encode','var_dump',
884
+ 'var_export','variant_abs','variant_add','variant_and',
885
+ 'variant_cast','variant_cat','variant_cmp',
886
+ 'variant_date_from_timestamp','variant_date_to_timestamp',
887
+ 'variant_div','variant_eqv','variant_fix','variant_get_type',
888
+ 'variant_idiv','variant_imp','variant_int','variant_mod',
889
+ 'variant_mul','variant_neg','variant_not','variant_or',
890
+ 'variant_pow','variant_round','variant_set','variant_set_type',
891
+ 'variant_sub','variant_xor','version_compare','virtual','vfprintf',
892
+ 'vprintf','vsprintf','wddx_add_vars','wddx_deserialize',
893
+ 'wddx_packet_end','wddx_packet_start','wddx_serialize_value',
894
+ 'wddx_serialize_vars','win_beep','win_browse_file',
895
+ 'win_browse_folder','win_create_link','win_message_box',
896
+ 'win_play_wav','win_shell_execute','win32_create_service',
897
+ 'win32_delete_service','win32_get_last_control_message',
898
+ 'win32_ps_list_procs','win32_ps_stat_mem','win32_ps_stat_proc',
899
+ 'win32_query_service_status','win32_scheduler_delete_task',
900
+ 'win32_scheduler_enum_tasks','win32_scheduler_get_task_info',
901
+ 'win32_scheduler_run','win32_scheduler_set_task_info',
902
+ 'win32_set_service_status','win32_start_service',
903
+ 'win32_start_service_ctrl_dispatcher','win32_stop_service',
904
+ 'wordwrap','xml_error_string','xml_get_current_byte_index',
905
+ 'xml_get_current_column_number','xml_get_current_line_number',
906
+ 'xml_get_error_code','xml_parse','xml_parser_create',
907
+ 'xml_parser_create_ns','xml_parser_free','xml_parser_get_option',
908
+ 'xml_parser_set_option','xml_parse_into_struct',
909
+ 'xml_set_character_data_handler','xml_set_default_handler',
910
+ 'xml_set_element_handler','xml_set_end_namespace_decl_handler',
911
+ 'xml_set_external_entity_ref_handler',
912
+ 'xml_set_notation_decl_handler','xml_set_object',
913
+ 'xml_set_processing_instruction_handler',
914
+ 'xml_set_start_namespace_decl_handler',
915
+ 'xml_set_unparsed_entity_decl_handler','xmldoc','xmldocfile',
916
+ 'xmlrpc_decode','xmlrpc_decode_request','xmlrpc_encode',
917
+ 'xmlrpc_encode_request','xmlrpc_get_type','xmlrpc_is_fault',
918
+ 'xmlrpc_parse_method_descriptions',
919
+ 'xmlrpc_server_add_introspection_data','xmlrpc_server_call_method',
920
+ 'xmlrpc_server_create','xmlrpc_server_destroy',
921
+ 'xmlrpc_server_register_introspection_callback',
922
+ 'xmlrpc_server_register_method','xmlrpc_set_type','xmltree',
923
+ 'xmlwriter_end_attribute','xmlwriter_end_cdata',
924
+ 'xmlwriter_end_comment','xmlwriter_end_document',
925
+ 'xmlwriter_end_dtd','xmlwriter_end_dtd_attlist',
926
+ 'xmlwriter_end_dtd_element','xmlwriter_end_dtd_entity',
927
+ 'xmlwriter_end_element','xmlwriter_end_pi','xmlwriter_flush',
928
+ 'xmlwriter_full_end_element','xmlwriter_open_memory',
929
+ 'xmlwriter_open_uri','xmlwriter_output_memory',
930
+ 'xmlwriter_set_indent','xmlwriter_set_indent_string',
931
+ 'xmlwriter_start_attribute','xmlwriter_start_attribute_ns',
932
+ 'xmlwriter_start_cdata','xmlwriter_start_comment',
933
+ 'xmlwriter_start_document','xmlwriter_start_dtd',
934
+ 'xmlwriter_start_dtd_attlist','xmlwriter_start_dtd_element',
935
+ 'xmlwriter_start_dtd_entity','xmlwriter_start_element',
936
+ 'xmlwriter_start_element_ns','xmlwriter_start_pi','xmlwriter_text',
937
+ 'xmlwriter_write_attribute','xmlwriter_write_attribute_ns',
938
+ 'xmlwriter_write_cdata','xmlwriter_write_comment',
939
+ 'xmlwriter_write_dtd','xmlwriter_write_dtd_attlist',
940
+ 'xmlwriter_write_dtd_element','xmlwriter_write_dtd_entity',
941
+ 'xmlwriter_write_element','xmlwriter_write_element_ns',
942
+ 'xmlwriter_write_pi','xmlwriter_write_raw','xpath_eval',
943
+ 'xpath_eval_expression','xpath_new_context','xpath_register_ns',
944
+ 'xpath_register_ns_auto','xptr_eval','xptr_new_context','yp_all',
945
+ 'yp_cat','yp_errno','yp_err_string','yp_first',
946
+ 'yp_get_default_domain','yp_master','yp_match','yp_next','yp_order',
947
+ 'zend_current_obfuscation_level','zend_get_cfg_var','zend_get_id',
948
+ 'zend_loader_current_file','zend_loader_enabled',
949
+ 'zend_loader_file_encoded','zend_loader_file_licensed',
950
+ 'zend_loader_install_license','zend_loader_version',
951
+ 'zend_logo_guid','zend_match_hostmasks','zend_obfuscate_class_name',
952
+ 'zend_obfuscate_function_name','zend_optimizer_version',
953
+ 'zend_runtime_obfuscate','zend_version','zip_close',
954
+ 'zip_entry_close','zip_entry_compressedsize',
955
+ 'zip_entry_compressionmethod','zip_entry_filesize','zip_entry_name',
956
+ 'zip_entry_open','zip_entry_read','zip_open','zip_read',
957
+ 'zlib_get_coding_type'
958
+ ),
959
+ 4 => array(
960
+ 'DEFAULT_INCLUDE_PATH', 'DIRECTORY_SEPARATOR', 'E_ALL',
961
+ 'E_COMPILE_ERROR', 'E_COMPILE_WARNING', 'E_CORE_ERROR',
962
+ 'E_CORE_WARNING', 'E_ERROR', 'E_NOTICE', 'E_PARSE', 'E_STRICT',
963
+ 'E_USER_ERROR', 'E_USER_NOTICE', 'E_USER_WARNING', 'E_WARNING',
964
+ 'ENT_COMPAT','ENT_QUOTES','ENT_NOQUOTES',
965
+ 'false', 'null', 'PEAR_EXTENSION_DIR', 'PEAR_INSTALL_DIR',
966
+ 'PHP_BINDIR', 'PHP_CONFIG_FILE_PATH', 'PHP_DATADIR',
967
+ 'PHP_EXTENSION_DIR', 'PHP_LIBDIR',
968
+ 'PHP_LOCALSTATEDIR', 'PHP_OS',
969
+ 'PHP_OUTPUT_HANDLER_CONT', 'PHP_OUTPUT_HANDLER_END',
970
+ 'PHP_OUTPUT_HANDLER_START', 'PHP_SYSCONFDIR',
971
+ 'PHP_VERSION', 'true', '__CLASS__', '__FILE__', '__FUNCTION__',
972
+ '__LINE__', '__METHOD__'
973
+ )
974
+ ),
975
+ 'SYMBOLS' => array(
976
+ 1 => array(
977
+ '<'.'%', '<'.'%=', '%'.'>', '<'.'?', '<'.'?=', '?'.'>'
978
+ ),
979
+ 0 => array(
980
+ '(', ')', '[', ']', '{', '}',
981
+ '!', '@', '%', '&', '|', '/',
982
+ '<', '>',
983
+ '=', '-', '+', '*',
984
+ '.', ':', ',', ';'
985
+ )
986
+ ),
987
+ 'CASE_SENSITIVE' => array(
988
+ GESHI_COMMENTS => false,
989
+ 1 => false,
990
+ 2 => false,
991
+ 3 => false,
992
+ 4 => false
993
+ ),
994
+ 'STYLES' => array(
995
+ 'KEYWORDS' => array(
996
+ 1 => 'color: #b1b100;',
997
+ 2 => 'color: #000000; font-weight: bold;',
998
+ 3 => 'color: #990000;',
999
+ 4 => 'color: #009900; font-weight: bold;'
1000
+ ),
1001
+ 'COMMENTS' => array(
1002
+ 1 => 'color: #666666; font-style: italic;',
1003
+ 2 => 'color: #666666; font-style: italic;',
1004
+ 3 => 'color: #0000cc; font-style: italic;',
1005
+ 4 => 'color: #009933; font-style: italic;',
1006
+ 'MULTI' => 'color: #666666; font-style: italic;'
1007
+ ),
1008
+ 'ESCAPE_CHAR' => array(
1009
+ 0 => 'color: #000099; font-weight: bold;',
1010
+ 1 => 'color: #000099; font-weight: bold;',
1011
+ 2 => 'color: #660099; font-weight: bold;',
1012
+ 3 => 'color: #660099; font-weight: bold;',
1013
+ 4 => 'color: #006699; font-weight: bold;',
1014
+ 5 => 'color: #006699; font-weight: bold; font-style: italic;',
1015
+ 6 => 'color: #009933; font-weight: bold;',
1016
+ 'HARD' => 'color: #000099; font-weight: bold;'
1017
+ ),
1018
+ 'BRACKETS' => array(
1019
+ 0 => 'color: #009900;'
1020
+ ),
1021
+ 'STRINGS' => array(
1022
+ 0 => 'color: #0000ff;',
1023
+ 'HARD' => 'color: #0000ff;'
1024
+ ),
1025
+ 'NUMBERS' => array(
1026
+ 0 => 'color: #cc66cc;',
1027
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
1028
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
1029
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
1030
+ ),
1031
+ 'METHODS' => array(
1032
+ 1 => 'color: #004000;',
1033
+ 2 => 'color: #004000;'
1034
+ ),
1035
+ 'SYMBOLS' => array(
1036
+ 0 => 'color: #339933;',
1037
+ 1 => 'color: #000000; font-weight: bold;'
1038
+ ),
1039
+ 'REGEXPS' => array(
1040
+ 0 => 'color: #000088;'
1041
+ ),
1042
+ 'SCRIPT' => array(
1043
+ 0 => '',
1044
+ 1 => '',
1045
+ 2 => '',
1046
+ 3 => '',
1047
+ 4 => '',
1048
+ 5 => ''
1049
+ )
1050
+ ),
1051
+ 'URLS' => array(
1052
+ 1 => '',
1053
+ 2 => '',
1054
+ 3 => 'http://www.php.net/{FNAMEL}',
1055
+ 4 => ''
1056
+ ),
1057
+ 'OOLANG' => true,
1058
+ 'OBJECT_SPLITTERS' => array(
1059
+ 1 => '-&gt;',
1060
+ 2 => '::'
1061
+ ),
1062
+ 'REGEXPS' => array(
1063
+ //Variables
1064
+ 0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*"
1065
+ ),
1066
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
1067
+ 'SCRIPT_DELIMITERS' => array(
1068
+ 0 => array(
1069
+ '<'.'?php' => '?'.'>'
1070
+ ),
1071
+ 1 => array(
1072
+ '<'.'?' => '?'.'>'
1073
+ ),
1074
+ 2 => array(
1075
+ '<'.'%' => '%'.'>'
1076
+ ),
1077
+ 3 => array(
1078
+ '<script language="php">' => '</script>'
1079
+ ),
1080
+ 4 => "/(?P<start><\\?(?>php\b)?)(?:".
1081
+ "(?>[^\"'?\\/<]+)|".
1082
+ "\\?(?!>)|".
1083
+ "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
1084
+ "(?>\"(?>[^\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
1085
+ "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
1086
+ "\\/\\/(?>.*?$)|".
1087
+ "\\/(?=[^*\\/])|".
1088
+ "<(?!<<)|".
1089
+ "<<<(?P<phpdoc>\w+)\s.*?\s\k<phpdoc>".
1090
+ ")*(?P<end>\\?>|\Z)/sm",
1091
+ 5 => "/(?P<start><%)(?:".
1092
+ "(?>[^\"'%\\/<]+)|".
1093
+ "%(?!>)|".
1094
+ "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
1095
+ "(?>\"(?>[^\\\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
1096
+ "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
1097
+ "\\/\\/(?>.*?$)|".
1098
+ "\\/(?=[^*\\/])|".
1099
+ "<(?!<<)|".
1100
+ "<<<(?P<phpdoc>\w+)\s.*?\s\k<phpdoc>".
1101
+ ")*(?P<end>%>)/sm",
1102
+ ),
1103
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
1104
+ 0 => true,
1105
+ 1 => true,
1106
+ 2 => true,
1107
+ 3 => true,
1108
+ 4 => true,
1109
+ 5 => true
1110
+ ),
1111
+ 'TAB_WIDTH' => 4
1112
+ );
1113
+
1114
+ ?>
lib/geshi/python.php ADDED
@@ -0,0 +1,244 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*************************************************************************************
3
+ * python.php
4
+ * ----------
5
+ * Author: Roberto Rossi (rsoftware@altervista.org)
6
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
7
+ * Release Version: 1.0.8.10
8
+ * Date Started: 2004/08/30
9
+ *
10
+ * Python language file for GeSHi.
11
+ *
12
+ * CHANGES
13
+ * -------
14
+ * 2008/12/18
15
+ * - Added missing functions and keywords. Also added two new Python 3.0 types. SF#2441839
16
+ * 2005/05/26
17
+ * - Modifications by Tim (tim@skreak.com): added more keyword categories, tweaked colors
18
+ * 2004/11/27 (1.0.1)
19
+ * - Added support for multiple object splitters
20
+ * 2004/08/30 (1.0.0)
21
+ * - First Release
22
+ *
23
+ * TODO (updated 2004/11/27)
24
+ * -------------------------
25
+ *
26
+ *************************************************************************************
27
+ *
28
+ * This file is part of GeSHi.
29
+ *
30
+ * GeSHi is free software; you can redistribute it and/or modify
31
+ * it under the terms of the GNU General Public License as published by
32
+ * the Free Software Foundation; either version 2 of the License, or
33
+ * (at your option) any later version.
34
+ *
35
+ * GeSHi is distributed in the hope that it will be useful,
36
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
37
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
38
+ * GNU General Public License for more details.
39
+ *
40
+ * You should have received a copy of the GNU General Public License
41
+ * along with GeSHi; if not, write to the Free Software
42
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
43
+ *
44
+ ************************************************************************************/
45
+
46
+ $language_data = array (
47
+ 'LANG_NAME' => 'Python',
48
+ 'COMMENT_SINGLE' => array(1 => '#'),
49
+ 'COMMENT_MULTI' => array(),
50
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
51
+ //Longest quotemarks ALWAYS first
52
+ 'QUOTEMARKS' => array('"""', "'''", '"', "'"),
53
+ 'ESCAPE_CHAR' => '\\',
54
+ 'NUMBERS' =>
55
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_BIN_PREFIX_0B |
56
+ GESHI_NUMBER_OCT_PREFIX_0O | GESHI_NUMBER_HEX_PREFIX |
57
+ GESHI_NUMBER_FLT_NONSCI | GESHI_NUMBER_FLT_NONSCI_F |
58
+ GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
59
+ 'KEYWORDS' => array(
60
+
61
+ /*
62
+ ** Set 1: reserved words
63
+ ** http://python.org/doc/current/ref/keywords.html
64
+ */
65
+ 1 => array(
66
+ 'and', 'del', 'for', 'is', 'raise', 'assert', 'elif', 'from', 'lambda', 'return', 'break',
67
+ 'else', 'global', 'not', 'try', 'class', 'except', 'if', 'or', 'while', 'continue', 'exec',
68
+ 'import', 'pass', 'yield', 'def', 'finally', 'in', 'print', 'with', 'as', 'nonlocal'
69
+ ),
70
+
71
+ /*
72
+ ** Set 2: builtins
73
+ ** http://python.org/doc/current/lib/built-in-funcs.html
74
+ */
75
+ 2 => array(
76
+ '__import__', 'abs', 'basestring', 'bool', 'callable', 'chr', 'classmethod', 'cmp',
77
+ 'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile',
78
+ 'file', 'filter', 'float', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help',
79
+ 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'list', 'locals',
80
+ 'long', 'map', 'max', 'min', 'object', 'oct', 'open', 'ord', 'pow', 'property', 'range',
81
+ 'raw_input', 'reduce', 'reload', 'reversed', 'round', 'set', 'setattr', 'slice',
82
+ 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode',
83
+ 'vars', 'xrange', 'zip',
84
+ // Built-in constants: http://python.org/doc/current/lib/node35.html
85
+ 'False', 'True', 'None', 'NotImplemented', 'Ellipsis',
86
+ // Built-in Exceptions: http://python.org/doc/current/lib/module-exceptions.html
87
+ 'Exception', 'StandardError', 'ArithmeticError', 'LookupError', 'EnvironmentError',
88
+ 'AssertionError', 'AttributeError', 'EOFError', 'FloatingPointError', 'IOError',
89
+ 'ImportError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'MemoryError', 'NameError',
90
+ 'NotImplementedError', 'OSError', 'OverflowError', 'ReferenceError', 'RuntimeError',
91
+ 'StopIteration', 'SyntaxError', 'SystemError', 'SystemExit', 'TypeError',
92
+ 'UnboundlocalError', 'UnicodeError', 'UnicodeEncodeError', 'UnicodeDecodeError',
93
+ 'UnicodeTranslateError', 'ValueError', 'WindowsError', 'ZeroDivisionError', 'Warning',
94
+ 'UserWarning', 'DeprecationWarning', 'PendingDeprecationWarning', 'SyntaxWarning',
95
+ 'RuntimeWarning', 'FutureWarning',
96
+ // self: this is a common python convention (but not a reserved word)
97
+ 'self',
98
+ // other
99
+ 'any', 'all'
100
+ ),
101
+
102
+ /*
103
+ ** Set 3: standard library
104
+ ** http://python.org/doc/current/lib/modindex.html
105
+ */
106
+ 3 => array(
107
+ '__builtin__', '__future__', '__main__', '_winreg', 'aifc', 'AL', 'al', 'anydbm',
108
+ 'array', 'asynchat', 'asyncore', 'atexit', 'audioop', 'base64', 'BaseHTTPServer',
109
+ 'Bastion', 'binascii', 'binhex', 'bisect', 'bsddb', 'bz2', 'calendar', 'cd', 'cgi',
110
+ 'CGIHTTPServer', 'cgitb', 'chunk', 'cmath', 'cmd', 'code', 'codecs', 'codeop',
111
+ 'collections', 'colorsys', 'commands', 'compileall', 'compiler',
112
+ 'ConfigParser', 'Cookie', 'cookielib', 'copy', 'copy_reg', 'cPickle', 'crypt',
113
+ 'cStringIO', 'csv', 'curses', 'datetime', 'dbhash', 'dbm', 'decimal', 'DEVICE',
114
+ 'difflib', 'dircache', 'dis', 'distutils', 'dl', 'doctest', 'DocXMLRPCServer', 'dumbdbm',
115
+ 'dummy_thread', 'dummy_threading', 'email', 'encodings', 'errno', 'exceptions', 'fcntl',
116
+ 'filecmp', 'fileinput', 'FL', 'fl', 'flp', 'fm', 'fnmatch', 'formatter', 'fpectl',
117
+ 'fpformat', 'ftplib', 'gc', 'gdbm', 'getopt', 'getpass', 'gettext', 'GL', 'gl', 'glob',
118
+ 'gopherlib', 'grp', 'gzip', 'heapq', 'hmac', 'hotshot', 'htmlentitydefs', 'htmllib',
119
+ 'HTMLParser', 'httplib', 'imageop', 'imaplib', 'imgfile', 'imghdr', 'imp', 'inspect',
120
+ 'itertools', 'jpeg', 'keyword', 'linecache', 'locale', 'logging', 'mailbox', 'mailcap',
121
+ 'marshal', 'math', 'md5', 'mhlib', 'mimetools', 'mimetypes', 'MimeWriter', 'mimify',
122
+ 'mmap', 'msvcrt', 'multifile', 'mutex', 'netrc', 'new', 'nis', 'nntplib', 'operator',
123
+ 'optparse', 'os', 'ossaudiodev', 'parser', 'pdb', 'pickle', 'pickletools', 'pipes',
124
+ 'pkgutil', 'platform', 'popen2', 'poplib', 'posix', 'posixfile', 'pprint', 'profile',
125
+ 'pstats', 'pty', 'pwd', 'py_compile', 'pyclbr', 'pydoc', 'Queue', 'quopri', 'random',
126
+ 're', 'readline', 'repr', 'resource', 'rexec', 'rfc822', 'rgbimg', 'rlcompleter',
127
+ 'robotparser', 'sched', 'ScrolledText', 'select', 'sets', 'sgmllib', 'sha', 'shelve',
128
+ 'shlex', 'shutil', 'signal', 'SimpleHTTPServer', 'SimpleXMLRPCServer', 'site', 'smtpd',
129
+ 'smtplib', 'sndhdr', 'socket', 'SocketServer', 'stat', 'statcache', 'statvfs', 'string',
130
+ 'StringIO', 'stringprep', 'struct', 'subprocess', 'sunau', 'SUNAUDIODEV', 'sunaudiodev',
131
+ 'symbol', 'sys', 'syslog', 'tabnanny', 'tarfile', 'telnetlib', 'tempfile', 'termios',
132
+ 'test', 'textwrap', 'thread', 'threading', 'time', 'timeit', 'Tix', 'Tkinter', 'token',
133
+ 'tokenize', 'traceback', 'tty', 'turtle', 'types', 'unicodedata', 'unittest', 'urllib2',
134
+ 'urllib', 'urlparse', 'user', 'UserDict', 'UserList', 'UserString', 'uu', 'warnings',
135
+ 'wave', 'weakref', 'webbrowser', 'whichdb', 'whrandom', 'winsound', 'xdrlib', 'xml',
136
+ 'xmllib', 'xmlrpclib', 'zipfile', 'zipimport', 'zlib',
137
+ // Python 3.0
138
+ 'bytes', 'bytearray'
139
+ ),
140
+
141
+ /*
142
+ ** Set 4: special methods
143
+ ** http://python.org/doc/current/ref/specialnames.html
144
+ */
145
+ 4 => array(
146
+ /*
147
+ // Iterator types: http://python.org/doc/current/lib/typeiter.html
148
+ '__iter__', 'next',
149
+ // String types: http://python.org/doc/current/lib/string-methods.html
150
+ 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs',
151
+ 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle',
152
+ 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust',
153
+ 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title',
154
+ 'translate', 'upper', 'zfill',
155
+ */
156
+ // Basic customization: http://python.org/doc/current/ref/customization.html
157
+ '__new__', '__init__', '__del__', '__repr__', '__str__',
158
+ '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__cmp__', '__rcmp__',
159
+ '__hash__', '__nonzero__', '__unicode__', '__dict__',
160
+ // Attribute access: http://python.org/doc/current/ref/attribute-access.html
161
+ '__setattr__', '__delattr__', '__getattr__', '__getattribute__', '__get__', '__set__',
162
+ '__delete__', '__slots__',
163
+ // Class creation, callable objects
164
+ '__metaclass__', '__call__',
165
+ // Container types: http://python.org/doc/current/ref/sequence-types.html
166
+ '__len__', '__getitem__', '__setitem__', '__delitem__', '__iter__', '__contains__',
167
+ '__getslice__', '__setslice__', '__delslice__',
168
+ // Numeric types: http://python.org/doc/current/ref/numeric-types.html
169
+ '__abs__','__add__','__and__','__coerce__','__div__','__divmod__','__float__',
170
+ '__hex__','__iadd__','__isub__','__imod__','__idiv__','__ipow__','__iand__',
171
+ '__ior__','__ixor__', '__ilshift__','__irshift__','__invert__','__int__',
172
+ '__long__','__lshift__',
173
+ '__mod__','__mul__','__neg__','__oct__','__or__','__pos__','__pow__',
174
+ '__radd__','__rdiv__','__rdivmod__','__rmod__','__rpow__','__rlshift__','__rrshift__',
175
+ '__rshift__','__rsub__','__rmul__','__rand__','__rxor__','__ror__',
176
+ '__sub__','__xor__'
177
+ )
178
+ ),
179
+ 'SYMBOLS' => array(
180
+ '<', '>', '=', '!', '<=', '>=', //·comparison·operators
181
+ '~', '@', //·unary·operators
182
+ ';', ',' //·statement·separator
183
+ ),
184
+ 'CASE_SENSITIVE' => array(
185
+ GESHI_COMMENTS => false,
186
+ 1 => true,
187
+ 2 => true,
188
+ 3 => true,
189
+ 4 => true
190
+ ),
191
+ 'STYLES' => array(
192
+ 'KEYWORDS' => array(
193
+ 1 => 'color: #ff7700;font-weight:bold;', // Reserved
194
+ 2 => 'color: #008000;', // Built-ins + self
195
+ 3 => 'color: #dc143c;', // Standard lib
196
+ 4 => 'color: #0000cd;' // Special methods
197
+ ),
198
+ 'COMMENTS' => array(
199
+ 1 => 'color: #808080; font-style: italic;',
200
+ 'MULTI' => 'color: #808080; font-style: italic;'
201
+ ),
202
+ 'ESCAPE_CHAR' => array(
203
+ 0 => 'color: #000099; font-weight: bold;'
204
+ ),
205
+ 'BRACKETS' => array(
206
+ 0 => 'color: black;'
207
+ ),
208
+ 'STRINGS' => array(
209
+ 0 => 'color: #483d8b;'
210
+ ),
211
+ 'NUMBERS' => array(
212
+ 0 => 'color: #ff4500;'
213
+ ),
214
+ 'METHODS' => array(
215
+ 1 => 'color: black;'
216
+ ),
217
+ 'SYMBOLS' => array(
218
+ 0 => 'color: #66cc66;'
219
+ ),
220
+ 'REGEXPS' => array(
221
+ ),
222
+ 'SCRIPT' => array(
223
+ )
224
+ ),
225
+ 'URLS' => array(
226
+ 1 => '',
227
+ 2 => '',
228
+ 3 => '',
229
+ 4 => ''
230
+ ),
231
+ 'OOLANG' => true,
232
+ 'OBJECT_SPLITTERS' => array(
233
+ 1 => '.'
234
+ ),
235
+ 'REGEXPS' => array(
236
+ ),
237
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
238
+ 'SCRIPT_DELIMITERS' => array(
239
+ ),
240
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
241
+ )
242
+ );
243
+
244
+ ?>
lib/geshi/ruby.php ADDED
@@ -0,0 +1,231 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*************************************************************************************
3
+ * ruby.php
4
+ * --------
5
+ * Author: Moises Deniz
6
+ * Copyright: (c) 2007 Moises Deniz
7
+ * Release Version: 1.0.8.10
8
+ * Date Started: 2007/03/21
9
+ *
10
+ * Ruby language file for GeSHi.
11
+ *
12
+ * CHANGES
13
+ * -------
14
+ * 2008/05/23 (1.0.7.22)
15
+ * - Added description of extra language features (SF#1970248)
16
+ * 2007/03/21 (1.0.7.19)
17
+ * - Initial release
18
+ *
19
+ *************************************************************************************
20
+ *
21
+ * This file is part of GeSHi.
22
+ *
23
+ * GeSHi is free software; you can redistribute it and/or modify
24
+ * it under the terms of the GNU General Public License as published by
25
+ * the Free Software Foundation; either version 2 of the License, or
26
+ * (at your option) any later version.
27
+ *
28
+ * GeSHi is distributed in the hope that it will be useful,
29
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
30
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
31
+ * GNU General Public License for more details.
32
+ *
33
+ * You should have received a copy of the GNU General Public License
34
+ * along with GeSHi; if not, write to the Free Software
35
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
36
+ *
37
+ ************************************************************************************/
38
+
39
+ $language_data = array (
40
+ 'LANG_NAME' => 'Ruby',
41
+ 'COMMENT_SINGLE' => array(1 => "#"),
42
+ 'COMMENT_MULTI' => array("=begin" => "=end"),
43
+ 'COMMENT_REGEXP' => array(
44
+ //Heredoc
45
+ 4 => '/<<\s*?(\w+)\\n.*?\\n\\1(?![a-zA-Z0-9])/si',
46
+ ),
47
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
48
+ 'QUOTEMARKS' => array('"', '`','\''),
49
+ 'ESCAPE_CHAR' => '\\',
50
+ 'KEYWORDS' => array(
51
+ 1 => array(
52
+ 'alias', 'and', 'begin', 'break', 'case', 'class',
53
+ 'def', 'defined', 'do', 'else', 'elsif', 'end',
54
+ 'ensure', 'for', 'if', 'in', 'module', 'while',
55
+ 'next', 'not', 'or', 'redo', 'rescue', 'yield',
56
+ 'retry', 'super', 'then', 'undef', 'unless',
57
+ 'until', 'when', 'include'
58
+ ),
59
+ 2 => array(
60
+ '__FILE__', '__LINE__', 'false', 'nil', 'self', 'true',
61
+ 'return'
62
+ ),
63
+ 3 => array(
64
+ 'Array', 'Float', 'Integer', 'String', 'at_exit',
65
+ 'autoload', 'binding', 'caller', 'catch', 'chop', 'chop!',
66
+ 'chomp', 'chomp!', 'eval', 'exec', 'exit', 'exit!', 'fail',
67
+ 'fork', 'format', 'gets', 'global_variables', 'gsub', 'gsub!',
68
+ 'iterator?', 'lambda', 'load', 'local_variables', 'loop',
69
+ 'open', 'p', 'print', 'printf', 'proc', 'putc', 'puts',
70
+ 'raise', 'rand', 'readline', 'readlines', 'require', 'select',
71
+ 'sleep', 'split', 'sprintf', 'srand', 'sub', 'sub!', 'syscall',
72
+ 'system', 'trace_var', 'trap', 'untrace_var'
73
+ ),
74
+ 4 => array(
75
+ 'Abbrev', 'ArgumentError', 'Base64', 'Benchmark',
76
+ 'Benchmark::Tms', 'Bignum', 'Binding', 'CGI', 'CGI::Cookie',
77
+ 'CGI::HtmlExtension', 'CGI::QueryExtension',
78
+ 'CGI::Session', 'CGI::Session::FileStore',
79
+ 'CGI::Session::MemoryStore', 'Class', 'Comparable', 'Complex',
80
+ 'ConditionVariable', 'Continuation', 'Data',
81
+ 'Date', 'DateTime', 'Delegator', 'Dir', 'EOFError', 'ERB',
82
+ 'ERB::Util', 'Enumerable', 'Enumerable::Enumerator', 'Errno',
83
+ 'Exception', 'FalseClass', 'File',
84
+ 'File::Constants', 'File::Stat', 'FileTest', 'FileUtils',
85
+ 'FileUtils::DryRun', 'FileUtils::NoWrite',
86
+ 'FileUtils::StreamUtils_', 'FileUtils::Verbose', 'Find',
87
+ 'Fixnum', 'FloatDomainError', 'Forwardable', 'GC', 'Generator',
88
+ 'Hash', 'IO', 'IOError', 'Iconv', 'Iconv::BrokenLibrary',
89
+ 'Iconv::Failure', 'Iconv::IllegalSequence',
90
+ 'Iconv::InvalidCharacter', 'Iconv::InvalidEncoding',
91
+ 'Iconv::OutOfRange', 'IndexError', 'Interrupt', 'Kernel',
92
+ 'LoadError', 'LocalJumpError', 'Logger', 'Logger::Application',
93
+ 'Logger::Error', 'Logger::Formatter', 'Logger::LogDevice',
94
+ 'Logger::LogDevice::LogDeviceMutex', 'Logger::Severity',
95
+ 'Logger::ShiftingError', 'Marshal', 'MatchData',
96
+ 'Math', 'Matrix', 'Method', 'Module', 'Mutex', 'NameError',
97
+ 'NameError::message', 'NilClass', 'NoMemoryError',
98
+ 'NoMethodError', 'NotImplementedError', 'Numeric', 'Object',
99
+ 'ObjectSpace', 'Observable', 'PStore', 'PStore::Error',
100
+ 'Pathname', 'Precision', 'Proc', 'Process', 'Process::GID',
101
+ 'Process::Status', 'Process::Sys', 'Process::UID', 'Queue',
102
+ 'Range', 'RangeError', 'Rational', 'Regexp', 'RegexpError',
103
+ 'RuntimeError', 'ScriptError', 'SecurityError', 'Set',
104
+ 'Shellwords', 'Signal', 'SignalException', 'SimpleDelegator',
105
+ 'SingleForwardable', 'Singleton', 'SingletonClassMethods',
106
+ 'SizedQueue', 'SortedSet', 'StandardError', 'StringIO',
107
+ 'StringScanner', 'StringScanner::Error', 'Struct', 'Symbol',
108
+ 'SyncEnumerator', 'SyntaxError', 'SystemCallError',
109
+ 'SystemExit', 'SystemStackError', 'Tempfile',
110
+ 'Test::Unit::TestCase', 'Test::Unit', 'Test', 'Thread',
111
+ 'ThreadError', 'ThreadGroup',
112
+ 'ThreadsWait', 'Time', 'TrueClass', 'TypeError', 'URI',
113
+ 'URI::BadURIError', 'URI::Error', 'URI::Escape', 'URI::FTP',
114
+ 'URI::Generic', 'URI::HTTP', 'URI::HTTPS',
115
+ 'URI::InvalidComponentError', 'URI::InvalidURIError',
116
+ 'URI::LDAP', 'URI::MailTo', 'URI::REGEXP',
117
+ 'URI::REGEXP::PATTERN', 'UnboundMethod', 'Vector', 'YAML',
118
+ 'ZeroDivisionError', 'Zlib',
119
+ 'Zlib::BufError', 'Zlib::DataError', 'Zlib::Deflate',
120
+ 'Zlib::Error', 'Zlib::GzipFile', 'Zlib::GzipFile::CRCError',
121
+ 'Zlib::GzipFile::Error', 'Zlib::GzipFile::LengthError',
122
+ 'Zlib::GzipFile::NoFooter', 'Zlib::GzipReader',
123
+ 'Zlib::GzipWriter', 'Zlib::Inflate', 'Zlib::MemError',
124
+ 'Zlib::NeedDict', 'Zlib::StreamEnd', 'Zlib::StreamError',
125
+ 'Zlib::VersionError',
126
+ 'Zlib::ZStream',
127
+ 'HTML::Selector', 'HashWithIndifferentAccess', 'Inflector',
128
+ 'Inflector::Inflections', 'Mime', 'Mime::Type',
129
+ 'OCI8AutoRecover', 'TimeZone', 'XmlSimple'
130
+ ),
131
+ ),
132
+ 'SYMBOLS' => array(
133
+ '(', ')', '[', ']', '{', '}', '%', '&', '*', '|', '/', '<', '>',
134
+ '+', '-', '=>', '<<'
135
+ ),
136
+ 'CASE_SENSITIVE' => array(
137
+ GESHI_COMMENTS => false,
138
+ 1 => false,
139
+ 2 => false,
140
+ 3 => false,
141
+ 4 => true,
142
+ ),
143
+ 'STYLES' => array(
144
+ 'KEYWORDS' => array(
145
+ 1 => 'color:#9966CC; font-weight:bold;',
146
+ 2 => 'color:#0000FF; font-weight:bold;',
147
+ 3 => 'color:#CC0066; font-weight:bold;',
148
+ 4 => 'color:#CC00FF; font-weight:bold;',
149
+ ),
150
+ 'COMMENTS' => array(
151
+ 1 => 'color:#008000; font-style:italic;',
152
+ 4 => 'color: #cc0000; font-style: italic;',
153
+ 'MULTI' => 'color:#000080; font-style:italic;'
154
+ ),
155
+ 'ESCAPE_CHAR' => array(
156
+ 0 => 'color:#000099;'
157
+ ),
158
+ 'BRACKETS' => array(
159
+ 0 => 'color:#006600; font-weight:bold;'
160
+ ),
161
+ 'STRINGS' => array(
162
+ 0 => 'color:#996600;'
163
+ ),
164
+ 'NUMBERS' => array(
165
+ 0 => 'color:#006666;'
166
+ ),
167
+ 'METHODS' => array(
168
+ 1 => 'color:#9900CC;'
169
+ ),
170
+ 'SYMBOLS' => array(
171
+ 0 => 'color:#006600; font-weight:bold;'
172
+ ),
173
+ 'REGEXPS' => array(
174
+ 0 => 'color:#ff6633; font-weight:bold;',
175
+ 1 => 'color:#0066ff; font-weight:bold;',
176
+ 2 => 'color:#6666ff; font-weight:bold;',
177
+ 3 => 'color:#ff3333; font-weight:bold;'
178
+ ),
179
+ 'SCRIPT' => array(
180
+ 0 => '',
181
+ 1 => '',
182
+ 2 => '',
183
+ )
184
+ ),
185
+ 'URLS' => array(
186
+ 1 => '',
187
+ 2 => '',
188
+ 3 => '',
189
+ 4 => ''
190
+ ),
191
+ 'OOLANG' => true,
192
+ 'OBJECT_SPLITTERS' => array(
193
+ 1 => '.'
194
+ ),
195
+ 'REGEXPS' => array(
196
+ 0 => array(//Variables
197
+ GESHI_SEARCH => "([[:space:]])(\\$[a-zA-Z_][a-zA-Z0-9_]*)",
198
+ GESHI_REPLACE => '\\2',
199
+ GESHI_MODIFIERS => '',
200
+ GESHI_BEFORE => '\\1',
201
+ GESHI_AFTER => ''
202
+ ),
203
+ 1 => array(//Arrays
204
+ GESHI_SEARCH => "([[:space:]])(@[a-zA-Z_][a-zA-Z0-9_]*)",
205
+ GESHI_REPLACE => '\\2',
206
+ GESHI_MODIFIERS => '',
207
+ GESHI_BEFORE => '\\1',
208
+ GESHI_AFTER => ''
209
+ ),
210
+ 2 => "([A-Z][a-zA-Z0-9_]*::)+[A-Z][a-zA-Z0-9_]*",//Static OOP symbols
211
+ 3 => array(
212
+ GESHI_SEARCH => "([[:space:]]|\[|\()(:[a-zA-Z_][a-zA-Z0-9_]*)",
213
+ GESHI_REPLACE => '\\2',
214
+ GESHI_MODIFIERS => '',
215
+ GESHI_BEFORE => '\\1',
216
+ GESHI_AFTER => ''
217
+ )
218
+ ),
219
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
220
+ 'SCRIPT_DELIMITERS' => array(
221
+ 0 => array(
222
+ '<%' => '%>'
223
+ )
224
+ ),
225
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
226
+ 0 => true,
227
+ ),
228
+ 'TAB_WIDTH' => 2
229
+ );
230
+
231
+ ?>
lib/geshi/text.php ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*************************************************************************************
3
+ * text.php
4
+ * --------
5
+ * Author: Sean Hanna (smokingrope@gmail.com)
6
+ * Copyright: (c) 2006 Sean Hanna
7
+ * Release Version: 1.0.8.10
8
+ * Date Started: 04/23/2006
9
+ *
10
+ * Standard Text File (No Syntax Highlighting).
11
+ * Plaintext language file for GeSHi.
12
+ *
13
+ * CHANGES
14
+ * -------
15
+ * 04/23/2006 (0.5.0)
16
+ * - Syntax File Created
17
+ *
18
+ * 04/27/2006 (1.0.0)
19
+ * - Documentation Cleaned Up
20
+ * - First Release
21
+ *
22
+ * TODO (updated 04/27/2006)
23
+ * -------------------------
24
+ *
25
+ *
26
+ *************************************************************************************
27
+ *
28
+ * This file is part of GeSHi.
29
+ *
30
+ * GeSHi is free software; you can redistribute it and/or modify
31
+ * it under the terms of the GNU General Public License as published by
32
+ * the Free Software Foundation; either version 2 of the License, or
33
+ * (at your option) any later version.
34
+ *
35
+ * GeSHi is distributed in the hope that it will be useful,
36
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
37
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
38
+ * GNU General Public License for more details.
39
+ *
40
+ * You should have received a copy of the GNU General Public License
41
+ * along with GeSHi; if not, write to the Free Software
42
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
43
+ *
44
+ ************************************************************************************/
45
+
46
+ $language_data = array (
47
+ 'LANG_NAME' => 'Text',
48
+ 'COMMENT_SINGLE' => array(),
49
+ 'COMMENT_MULTI' => array(),
50
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
51
+ 'QUOTEMARKS' => array(),
52
+ 'ESCAPE_CHAR' => '',
53
+ 'KEYWORDS' => array(),
54
+ 'SYMBOLS' => array(),
55
+ 'CASE_SENSITIVE' => array(
56
+ GESHI_COMMENTS => false
57
+ ),
58
+ 'STYLES' => array(
59
+ 'KEYWORDS' => array(),
60
+ 'COMMENTS' => array(),
61
+ 'ESCAPE_CHAR' => array(),
62
+ 'BRACKETS' => array(),
63
+ 'STRINGS' => array(),
64
+ 'NUMBERS' => array(),
65
+ 'METHODS' => array(),
66
+ 'SYMBOLS' => array(),
67
+ 'SCRIPT' => array(),
68
+ 'REGEXPS' => array()
69
+ ),
70
+ 'URLS' => array(),
71
+ 'OOLANG' => false,
72
+ 'OBJECT_SPLITTERS' => array(),
73
+ 'REGEXPS' => array(),
74
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
75
+ 'SCRIPT_DELIMITERS' => array(),
76
+ 'HIGHLIGHT_STRICT_BLOCK' => array(),
77
+ 'PARSER_CONTROL' => array(
78
+ 'ENABLE_FLAGS' => array(
79
+ 'ALL' => GESHI_NEVER
80
+ ),
81
+ )
82
+ );
83
+
84
+ ?>
lib/menu_activity.php ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wordfenceModeElem" id="wordfenceMode_activity"></div>
2
+ <div class="wrap wordfence">
3
+ <div class="wordfence-lock-icon wordfence-icon32"><br /></div><h2>Live Site Activity</h2>
4
+ <div class="wordfenceLive">
5
+ <table border="0" cellpadding="0" cellspacing="0">
6
+ <tr><td><h2>Wordfence Live Activity:</h2></td><td id="wfLiveStatus"></td></tr>
7
+ </table>
8
+ </div>
9
+ <div class="wordfenceWrap">
10
+ <div>
11
+ <div id="wfTabs">
12
+ <a href="#" class="wfTab1 wfTabSwitch selected" onclick="wordfenceAdmin.switchTab(this, 'wfTab1', 'wfDataPanel', 'wfActivity_hit', function(){ WFAD.activityTabChanged(); }); return false;">All Hits</a>
13
+ <a href="#" class="wfTab1 wfTabSwitch" onclick="wordfenceAdmin.switchTab(this, 'wfTab1', 'wfDataPanel', 'wfActivity_human', function(){ WFAD.activityTabChanged(); }); return false;">Humans</a>
14
+ <a href="#" class="wfTab1 wfTabSwitch" onclick="wordfenceAdmin.switchTab(this, 'wfTab1', 'wfDataPanel', 'wfActivity_ruser', function(){ WFAD.activityTabChanged(); }); return false;">Registered Users</a>
15
+ <a href="#" class="wfTab1 wfTabSwitch" onclick="wordfenceAdmin.switchTab(this, 'wfTab1', 'wfDataPanel', 'wfActivity_crawler', function(){ WFAD.activityTabChanged(); }); return false;">Crawlers</a>
16
+ <a href="#" class="wfTab1 wfTabSwitch" onclick="wordfenceAdmin.switchTab(this, 'wfTab1', 'wfDataPanel', 'wfActivity_gCrawler', function(){ WFAD.activityTabChanged(); }); return false;">Google Crawlers</a>
17
+ <a href="#" class="wfTab1 wfTabSwitch" onclick="wordfenceAdmin.switchTab(this, 'wfTab1', 'wfDataPanel', 'wfActivity_404', function(){ WFAD.activityTabChanged(); }); return false;">Pages Not Found</a>
18
+ <a href="#" class="wfTab1 wfTabSwitch" onclick="wordfenceAdmin.switchTab(this, 'wfTab1', 'wfDataPanel', 'wfActivity_loginLogout', function(){ WFAD.activityTabChanged(); }); return false;">Logins and Logouts</a>
19
+ <a href="#" class="wfTab1 wfTabSwitch" onclick="wordfenceAdmin.switchTab(this, 'wfTab1', 'wfDataPanel', 'wfActivity_topLeechers', function(){ WFAD.staticTabChanged(); }); return false;">Top Consumers</a>
20
+ <a href="#" class="wfTab1 wfTabSwitch" onclick="wordfenceAdmin.switchTab(this, 'wfTab1', 'wfDataPanel', 'wfActivity_topScanners', function(){ WFAD.staticTabChanged(); }); return false;">Top 404s</a>
21
+ </div>
22
+ <div class="wfTabsContainer">
23
+ <div id="wfActivity_hit" class="wfDataPanel"><div class="wfLoadingWhite32"></div></div>
24
+ <div id="wfActivity_human" class="wfDataPanel" style="display: none;"><div class="wfLoadingWhite32"></div></div>
25
+ <div id="wfActivity_ruser" class="wfDataPanel" style="display: none;"><div class="wfLoadingWhite32"></div></div>
26
+ <div id="wfActivity_crawler" class="wfDataPanel" style="display: none;"><div class="wfLoadingWhite32"></div></div>
27
+ <div id="wfActivity_gCrawler" class="wfDataPanel" style="display: none;"><div class="wfLoadingWhite32"></div></div>
28
+ <div id="wfActivity_404" class="wfDataPanel" style="display: none;"><div class="wfLoadingWhite32"></div></div>
29
+ <div id="wfActivity_loginLogout" class="wfDataPanel" style="display: none;"><div class="wfLoadingWhite32"></div></div>
30
+ <div id="wfActivity_topScanners" class="wfDataPanel" style="display: none;"><div class="wfLoadingWhite32"></div></div>
31
+ <div id="wfActivity_topLeechers" class="wfDataPanel" style="display: none;"><div class="wfLoadingWhite32"></div></div>
32
+ <div id="wfActivity_blockedIPs" class="wfDataPanel" style="display: none;"><div class="wfLoadingWhite32"></div></div>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ </div>
37
+
38
+ <script type="text/x-jquery-template" id="wfLeechersTmpl">
39
+ <div>
40
+ <div style="border-bottom: 1px solid #CCC; padding-bottom: 10px; margin-bottom: 10px;">
41
+ <table border="0" style="width: 100%">
42
+ {{each(idx, elem) results}}
43
+ <tr><td>
44
+ <div>
45
+ {{if loc}}
46
+ <img src="http://www.wordfence.com/images/flags/${loc.countryCode.toLowerCase()}.png" width="16" height="11" alt="${loc.countryName}" title="${loc.countryName}" class="wfFlag" />
47
+ <a href="http://maps.google.com/maps?q=${loc.lat},${loc.lon}&z=6" target="_blank">{{if loc.city}}${loc.city}, {{/if}}${loc.countryName}</a>
48
+ {{else}}
49
+ An unknown location at IP <a href="${WFAD.makeIPTrafLink(IP)}" target="_blank">${IP}</a>
50
+ {{/if}}
51
+ </div>
52
+ <div>
53
+ <strong>IP:</strong>&nbsp;<a href="${WFAD.makeIPTrafLink(IP)}" target="_blank">${IP}</a>
54
+ {{if elem.blocked}}
55
+ [<a href="#" onclick="WFAD.unblockIP('${IP}'); return false;">unblock</a>]
56
+ {{else}}
57
+ [<a href="#" onclick="WFAD.blockIP('${IP}', 'Manual block by administrator'); return false;">block</a>]
58
+ {{/if}}
59
+ </div>
60
+ <div>
61
+ <span class="wfReverseLookup"><span style="display:none;">${elem.IP}</span></span>
62
+ </div>
63
+ <div>
64
+ <span class="wfTimeAgo">Last hit was ${elem.timeAgo} ago.</span>
65
+ </div>
66
+ </td>
67
+ <td style="font-size: 28px; color: #999;">
68
+ ${elem.totalHits} hits
69
+ </td>
70
+ </tr>
71
+ {{/each}}
72
+ </table>
73
+ </div>
74
+ </div>
75
+ </script>
76
+ <script type="text/x-jquery-template" id="wfLoginLogoutEventTmpl">
77
+ <div style="display: none;">
78
+ <div class="wfActEvent" id="wfActEvent_${id}">
79
+ <div>
80
+ {{if loc}}
81
+ <img src="http://www.wordfence.com/images/flags/${loc.countryCode.toLowerCase()}.png" width="16" height="11" alt="${loc.countryName}" title="${loc.countryName}" class="wfFlag" />
82
+ <a href="http://maps.google.com/maps?q=${loc.lat},${loc.lon}&z=6" target="_blank">{{if loc.city}}${loc.city}, {{/if}}${loc.countryName}</a>
83
+ {{else}}
84
+ An unknown location at IP ${IP}
85
+ {{/if}}
86
+ {{if action == 'loginOK'}}
87
+ logged in successfully as <strong>"${username}"</strong>
88
+ {{else action == 'logout'}}
89
+ logged out as <strong>"${username}"</strong>
90
+ {{else action == 'loginFailValidUsername'}}
91
+ attempted a failed login as <strong>"${username}"</strong>.
92
+ {{else action == 'loginFailInvalidUsername'}}
93
+ attempted a failed login using an invalid username <strong>"${username}"</strong>.
94
+ {{/if}}
95
+ </div>
96
+ <div>
97
+ <strong>IP:</strong> <a href="${WFAD.makeIPTrafLink(IP)}" target="_blank">${IP}</a>&nbsp;
98
+ {{if blocked}}
99
+ [<a href="#" onclick="WFAD.unblockIP('${IP}'); return false;">unblock</a>]
100
+ {{else}}
101
+ [<a href="#" onclick="WFAD.blockIP('${IP}', 'Manual block by administrator'); return false;">block</a>]
102
+ {{/if}}
103
+ </div>
104
+ <div>
105
+ <span class="wfReverseLookup"><span style="display:none;">${IP}</span></span>
106
+ </div>
107
+ <div>
108
+ <span class="wfTimeAgo">${timeAgo} ago</span>
109
+ </div>
110
+ </div>
111
+ </div>
112
+ </script>
113
+ <script type="text/x-jquery-template" id="wfHitsEventTmpl">
114
+ <div style="display: none;">
115
+ <div class="wfActEvent" id="wfActEvent_${id}">
116
+ <table border="0" cellpadding="1" cellspacing="0">
117
+ <tr>
118
+ <td>
119
+ {{if user}}
120
+ <span class="wfAvatar">{{html user.avatar}}</span>
121
+ <a href="${user.editLink}" target="_blank">${user.display_name}</a>
122
+ {{/if}}
123
+ {{if loc}}
124
+ {{if user}}in {{/if}}
125
+ <img src="http://www.wordfence.com/images/flags/${loc.countryCode.toLowerCase()}.png" width="16" height="11" alt="${loc.countryName}" title="${loc.countryName}" class="wfFlag" />
126
+ <a href="http://maps.google.com/maps?q=${loc.lat},${loc.lon}&z=6" target="_blank">{{if loc.city}}${loc.city}, {{/if}}${loc.countryName}</a>
127
+ {{else}}
128
+ An unknown location at IP <a href="${WFAD.makeIPTrafLink(IP)}" target="_blank">${IP}</a>
129
+ {{/if}}
130
+ {{if referer}}
131
+ {{if extReferer}}
132
+ arrived from <a href="${referer}" target="_blank" style="color: #A00; font-weight: bold;">${referer}</a> and
133
+ {{else}}
134
+ left <a href="${referer}" target="_blank" style="color: #999; font-weight: normal;">${referer}</a> and
135
+ {{/if}}
136
+ {{/if}}
137
+ {{if activityMode == 'hit'}}
138
+ landed on
139
+ {{else activityMode == 'human' || activityMode == 'ruser'}}
140
+ visited
141
+ {{else activityMode == '404'}}
142
+ tried to access
143
+ {{else activityMode == 'gCrawler'}}
144
+ crawled
145
+ {{else activityMode == 'crawler'}}
146
+ crawled
147
+ {{/if}}
148
+ <a href="${URL}" target="_blank">${URL}</a>
149
+ </td></tr>
150
+ <tr><td><span class="wfTimeAgo">${timeAgo} ago</span>&nbsp;&nbsp; <strong>IP:</strong> <a href="${WFAD.makeIPTrafLink(IP)}" target="_blank">${IP}</a>
151
+ {{if blocked}}
152
+ [<a href="#" onclick="WFAD.unblockIP('${IP}'); return false;">unblock</a>]
153
+ {{else}}
154
+ [<a href="#" onclick="WFAD.blockIP('${IP}', 'Manual block by administrator'); return false;">block</a>]
155
+ {{/if}}
156
+ &nbsp;<span class="wfReverseLookup"><span style="display:none;">${IP}</span></span>
157
+ </td></tr>
158
+ {{if browser && browser.browser != 'Default Browser'}}<tr><td><strong>Browser:</strong> ${browser.browser}{{if browser.version}} version ${browser.version}{{/if}}{{if browser.platform && browser.platform != 'unknown'}} running on ${browser.platform}{{/if}}</td></tr>{{/if}}
159
+ <tr><td style="color: #AAA;">${UA}</td></tr>
160
+ <tr><td></td></tr>
161
+ </table>
162
+ </div>
163
+ </div>
164
+ </script>
lib/menu_blockedIPs.php ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wordfenceModeElem" id="wordfenceMode_blockedIPs"></div>
2
+ <div class="wrap">
3
+ <div class="wordfence-lock-icon wordfence-icon32"><br /></div><h2>Wordfence Blocked IP Addresses</h2>
4
+ <div class="wordfenceLive">
5
+ <table border="0" cellpadding="0" cellspacing="0">
6
+ <tr><td><h2>Wordfence Live Activity:</h2></td><td id="wfLiveStatus"></td></tr>
7
+ </table>
8
+ </div>
9
+ <div class="wordfenceWrap" style="margin: 20px 20px 20px 30px;">
10
+ <a href="#" onclick="WFAD.clearAllBlocked('blocked'); return false;">Clear all blocked IP addresses</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#" onclick="WFAD.clearAllBlocked('locked'); return false;">Clear all locked out IP addresses</a>
11
+ </div>
12
+ <div class="wordfenceWrap">
13
+ <div>
14
+ <div id="wfTabs">
15
+ <a href="#" class="wfTab1 wfTabSwitch selected" onclick="wordfenceAdmin.switchTab(this, 'wfTab1', 'wfDataPanel', 'wfActivity_blockedIPs', function(){ WFAD.staticTabChanged(); }); return false;">IPs that are blocked from accessing the site</a>
16
+ <a href="#" class="wfTab1 wfTabSwitch" onclick="wordfenceAdmin.switchTab(this, 'wfTab1', 'wfDataPanel', 'wfActivity_lockedOutIPs', function(){ WFAD.staticTabChanged(); }); return false;">IPs that are Locked Out from Login</a>
17
+ <a href="#" class="wfTab1 wfTabSwitch" onclick="wordfenceAdmin.switchTab(this, 'wfTab1', 'wfDataPanel', 'wfActivity_throttledIPs', function(){ WFAD.staticTabChanged(); }); return false;">IPs who were recently throttled for accessing the site too frequently</a>
18
+ </div>
19
+ <div class="wfTabsContainer">
20
+ <div id="wfActivity_blockedIPs" class="wfDataPanel"><div class="wfLoadingWhite32"></div></div>
21
+ <div id="wfActivity_lockedOutIPs" class="wfDataPanel" style="display: none;"><div class="wfLoadingWhite32"></div></div>
22
+ <div id="wfActivity_throttledIPs" class="wfDataPanel" style="display: none;"><div class="wfLoadingWhite32"></div></div>
23
+ </div>
24
+ </div>
25
+ </div>
26
+
27
+ </div>
28
+ <script type="text/x-jquery-template" id="wfThrottledIPsTmpl">
29
+ <div>
30
+ <div style="border-bottom: 1px solid #CCC; padding-bottom: 10px; margin-bottom: 10px;">
31
+ <table border="0" style="width: 100%">
32
+ {{each(idx, elem) results}}
33
+ <tr><td style="vertical-align: top;">
34
+ <div>
35
+ {{if loc}}
36
+ <img src="http://www.wordfence.com/images/flags/${loc.countryCode.toLowerCase()}.png" width="16" height="11" alt="${loc.countryName}" title="${loc.countryName}" class="wfFlag" />
37
+ <a href="http://maps.google.com/maps?q=${loc.lat},${loc.lon}&z=6" target="_blank">{{if loc.city}}${loc.city}, {{/if}}${loc.countryName}</a>
38
+ {{else}}
39
+ An unknown location at IP <a href="${WFAD.makeIPTrafLink(IP)}" target="_blank">${IP}</a>
40
+ {{/if}}
41
+ </div>
42
+ <div>
43
+ <strong>IP:</strong>&nbsp;<a href="${WFAD.makeIPTrafLink(IP)}" target="_blank">${IP}</a>
44
+ </div>
45
+ <div>
46
+ <strong>Reason:</strong>&nbsp;${lastReason}
47
+ </div>
48
+ <div>
49
+ <span class="wfReverseLookup"><span style="display:none;">${IP}</span></span>
50
+ </div>
51
+ <div>
52
+ <span>Throttled <strong>${timesThrottled}</strong> times starting <strong>${startTimeAgo} ago</strong> and ending <strong>${endTimeAgo} ago</strong>.</span>
53
+ </div>
54
+ </td>
55
+ </tr>
56
+ {{/each}}
57
+ </table>
58
+ </div>
59
+ </div>
60
+ </script>
61
+
62
+ <script type="text/x-jquery-template" id="wfLockedOutIPsTmpl">
63
+ <div>
64
+ <div style="border-bottom: 1px solid #CCC; padding-bottom: 10px; margin-bottom: 10px;">
65
+ <table border="0" style="width: 100%">
66
+ {{each(idx, elem) results}}
67
+ <tr><td>
68
+ <div>
69
+ {{if loc}}
70
+ <img src="http://www.wordfence.com/images/flags/${loc.countryCode.toLowerCase()}.png" width="16" height="11" alt="${loc.countryName}" title="${loc.countryName}" class="wfFlag" />
71
+ <a href="http://maps.google.com/maps?q=${loc.lat},${loc.lon}&z=6" target="_blank">{{if loc.city}}${loc.city}, {{/if}}${loc.countryName}</a>
72
+ {{else}}
73
+ An unknown location at IP <a href="${WFAD.makeIPTrafLink(IP)}" target="_blank">${IP}</a>
74
+ {{/if}}
75
+ </div>
76
+ <div>
77
+ <strong>IP:</strong>&nbsp;<a href="${WFAD.makeIPTrafLink(IP)}" target="_blank">${IP}</a> [<a href="#" onclick="WFAD.unlockOutIP('${IP}'); return false;">unlock</a>]
78
+ </div>
79
+ <div>
80
+ <strong>Reason:</strong>&nbsp;${reason}
81
+ </div>
82
+ <div>
83
+ <span class="wfReverseLookup"><span style="display:none;">${IP}</span></span>
84
+ </div>
85
+ <div>
86
+ {{if lastAttemptAgo}}
87
+ <span class="wfTimeAgo">Last blocked attempt to sign-in or use the forgot password form was ${lastAttemptAgo} ago.</span>
88
+ {{else}}
89
+ <span class="wfTimeAgo">No attempts have been made to sign-in or use the forgot password form since this IP was locked out.</span>
90
+ {{/if}}
91
+ </div>
92
+ </td>
93
+ <td style="color: #999;">
94
+ <ul>
95
+ <li>${blockedHits} attempts have been blocked</li>
96
+ <li>Will be unlocked in ${blockedForAgo}</li>
97
+ </ul>
98
+ </td></tr>
99
+ {{/each}}
100
+ </table>
101
+ </div>
102
+ </div>
103
+ </script>
104
+
105
+ <script type="text/x-jquery-template" id="wfBlockedIPsTmpl">
106
+ <div>
107
+ <div style="border-bottom: 1px solid #CCC; padding-bottom: 10px; margin-bottom: 10px;">
108
+ <table border="0" style="width: 100%">
109
+ {{each(idx, elem) results}}
110
+ <tr><td>
111
+ <div>
112
+ {{if loc}}
113
+ <img src="http://www.wordfence.com/images/flags/${loc.countryCode.toLowerCase()}.png" width="16" height="11" alt="${loc.countryName}" title="${loc.countryName}" class="wfFlag" />
114
+ <a href="http://maps.google.com/maps?q=${loc.lat},${loc.lon}&z=6" target="_blank">{{if loc.city}}${loc.city}, {{/if}}${loc.countryName}</a>
115
+ {{else}}
116
+ An unknown location at IP <a href="${WFAD.makeIPTrafLink(IP)}" target="_blank">${IP}</a>
117
+ {{/if}}
118
+ </div>
119
+ <div>
120
+ <strong>IP:</strong>&nbsp;<a href="${WFAD.makeIPTrafLink(IP)}" target="_blank">${IP}</a> [<a href="#" onclick="WFAD.unblockIP('${IP}'); return false;">unblock</a>]
121
+ </div>
122
+ <div>
123
+ <strong>Reason:</strong>&nbsp;${reason}
124
+ </div>
125
+ <div>
126
+ <span class="wfReverseLookup"><span style="display:none;">${IP}</span></span>
127
+ </div>
128
+ <div>
129
+ {{if lastAttemptAgo}}
130
+ <span class="wfTimeAgo">Last blocked attempt to access the site was ${lastAttemptAgo} ago.</span>
131
+ {{else}}
132
+ <span class="wfTimeAgo">No attempts have been made to access the site since this IP was blocked.</span>
133
+ {{/if}}
134
+ </div>
135
+ <div>
136
+ {{if lastHitAgo}}
137
+ <span class="wfTimeAgo">Last site access before this IP was blocked was ${lastHitAgo} ago.</span>
138
+ {{/if}}
139
+ </div>
140
+ </td>
141
+ <td style="color: #999;">
142
+ <ul>
143
+ <li>${totalHits} hits before blocked</li>
144
+ <li>${blockedHits} blocked hits</li>
145
+ <li>Will be unblocked in ${blockedForAgo}</li>
146
+ </ul>
147
+ </td></tr>
148
+ {{/each}}
149
+ </table>
150
+ </div>
151
+ </div>
152
+ </script>
153
+
lib/menu_config.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap wordfence">
2
+ <div class="wordfence-lock-icon wordfence-icon32"><br /></div><h2>Welcome to Wordfence</h2>
3
+ <table class="form-table">
4
+ <tr><th><nobr>Enter your Wordfence license key:</nobr></th><td><input type="text" id="wordfenceKey" size="30" value="" />&nbsp;(<a href="http://wordfence.com/signup-step2/" target="_blank">click here to get a key</a>)</td></tr>
5
+ <tr><td colspan="2">
6
+ <table border="0" cellpadding="0" cellspacing="0"><tr><td>
7
+ <input type="button" name="submit" id="submit" class="button-primary" value="Save Changes and Activate Wordfence" onclick="wordfenceAdmin.activateWF(jQuery('#wordfenceKey').val()); return false;" />
8
+ </td><td>
9
+ <div class="wfAjax24"></div>
10
+ </td></tr></table>
11
+
12
+ </td></tr>
13
+ </table>
14
+
15
+ </div>
16
+ <script type="text/x-jquery-template" id="wfActivateError">
17
+ <div>
18
+ <h3>Wordfence Activation Failed</h3>
19
+ <p>
20
+ We could not activate your Wordfence. The error was:
21
+ <br /><br />
22
+ ${err}
23
+ <br /><br />
24
+ </p>
25
+ </div>
26
+ </script>
lib/menu_options.php ADDED
@@ -0,0 +1,170 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $w = new wfConfig();
3
+ ?>
4
+ <script type="text/javascript">
5
+ var WFSLevels = <?php echo json_encode(wfConfig::$securityLevels); ?>;
6
+ </script>
7
+ <div class="wordfenceModeElem" id="wordfenceMode_options"></div>
8
+ <div class="wrap">
9
+ <div class="wordfence-lock-icon wordfence-icon32"><br /></div><h2>Wordfence Options</h2>
10
+ <div class="wordfenceLive">
11
+ <table border="0" cellpadding="0" cellspacing="0">
12
+ <tr><td><h2>Wordfence Live Activity:</h2></td><td id="wfLiveStatus"></td></tr>
13
+ </table>
14
+ </div>
15
+
16
+ <form id="wfConfigForm">
17
+ <table class="wfConfigForm">
18
+ <tr><td colspan="2"><h2>Alerts</h2></td></tr>
19
+ <tr><th>List of emails to alert, separated by commas</th><td><input type="text" id="alertEmails" name="alertEmails" value="<?php $w->f('alertEmails'); ?>" size="50" /></td></tr>
20
+ <tr><td colspan="2"><h2>Security Level</h2></td></tr>
21
+ <tr><td colspan="2">
22
+ <select id="securityLevel" name="securityLevel" onchange="WFAD.changeSecurityLevel(); return true;">
23
+ <option value="0"<?php $w->sel('securityLevel', '0'); ?>>Level 0: Disable all Wordfence security measures</option>
24
+ <option value="1"<?php $w->sel('securityLevel', '1'); ?>>Level 1: Light protection. Just the basics</option>
25
+ <option value="2"<?php $w->sel('securityLevel', '2'); ?>>Level 2: Medium protection. Suitable for most sites</option>
26
+ <option value="3"<?php $w->sel('securityLevel', '3'); ?>>Level 3: High security. Use this when an attack is imminent</option>
27
+ <option value="4"<?php $w->sel('securityLevel', '4'); ?>>Level 4: Lockdown. Protect the site against an attack in progress at the cost of inconveniencing some users</option>
28
+ <option value="CUSTOM"<?php $w->sel('securityLevel', 'CUSTOM'); ?>>Custom settings</option>
29
+ </select>
30
+ </td></tr>
31
+
32
+ </table>
33
+ <p><table border="0" cellpadding="0" cellspacing="0"><tr><td><input type="button" id="button1" name="button1" class="button-primary" value="Save Changes" onclick="WFAD.saveConfig();" /></td><td style="height: 24px;"><div class="wfAjax24"></div><span class="wfSavedMsg">&nbsp;Your changes have been saved!</span></td></tr></table></p>
34
+ <div>
35
+ <p style="width: 600px;">Wordfence works great out of the box for most websites. Simply install Wordfence and your site and content is protected. For finer granularity of control, we have provided advanced options.</p>
36
+ <a href="#" onclick="jQuery('#wfConfigAdvanced').fadeToggle();">Show or hide advanced options that let you create a custom security profile</a>
37
+ </div>
38
+ <div id="wfConfigAdvanced" style="display: none;">
39
+ <table class="wfConfigForm">
40
+ <tr><td colspan="2"><h2>Alerts</h2></td></tr>
41
+ <tr><th>Alert on critical problems</th><td><input type="checkbox" id="alertOn_critical" class="wfConfigElem" name="alertOn_critical" value="1" <?php $w->cb('alertOn_critical'); ?>/></td></tr>
42
+ <tr><th>Alert on warnings</th><td><input type="checkbox" id="alertOn_warnings" class="wfConfigElem" name="alertOn_warnings" value="1" <?php $w->cb('alertOn_warnings'); ?>/></td></tr>
43
+ <tr><th>Alert when an IP address is blocked</th><td><input type="checkbox" id="alertOn_block" class="wfConfigElem" name="alertOn_block" value="1" <?php $w->cb('alertOn_block'); ?>/></td></tr>
44
+ <tr><th>Alert when someone is locked out from login</th><td><input type="checkbox" id="alertOn_loginLockout" class="wfConfigElem" name="alertOn_loginLockout" value="1" <?php $w->cb('alertOn_loginLockout'); ?>/></td></tr>
45
+ <tr><th>Alert when the "lost password" form is used for a valid user</th><td><input type="checkbox" id="alertOn_lostPasswdForm" class="wfConfigElem" name="alertOn_lostPasswdForm" value="1" <?php $w->cb('alertOn_lostPasswdForm'); ?>/></td></tr>
46
+ <tr><th>Alert me when someone with administrator access signs in</th><td><input type="checkbox" id="alertOn_adminLogin" class="wfConfigElem" name="alertOn_adminLogin" value="1" <?php $w->cb('alertOn_adminLogin'); ?>/></td></tr>
47
+ <tr><th>Alert me when a non-admin user signs in</th><td><input type="checkbox" id="alertOn_nonAdminLogin" class="wfConfigElem" name="alertOn_nonAdminLogin" value="1" <?php $w->cb('alertOn_nonAdminLogin'); ?>/></td></tr>
48
+ <tr><td colspan="2"><h2>Live Traffic View</h2></td></tr>
49
+ <tr><th class="wfConfigEnable">Enable Live Traffic View</th><td><input type="checkbox" id="liveTrafficEnabled" class="wfConfigElem" name="liveTrafficEnabled" value="1" <?php $w->cb('liveTrafficEnabled'); ?> onclick="WFAD.reloadConfigPage = true; return true;" /></td></tr>
50
+ <tr><th>Don't log signed-in users with publishing access:</th><td><input type="checkbox" id="liveTraf_ignorePublishers" name="liveTraf_ignorePublishers" value="1" <?php $w->cb('liveTraf_ignorePublishers'); ?> /></td></tr>
51
+ <tr><th>List of comma separated usernames to ignore:</th><td><input type="text" name="liveTraf_ignoreUsers" id="liveTraf_ignoreUsers" value="<?php echo $w->getHTML('liveTraf_ignoreUsers'); ?>" /></td></tr>
52
+ <tr><th>List of comma separated IP addresses to ignore:</th><td><input type="text" name="liveTraf_ignoreIPs" id="liveTraf_ignoreIPs" value="<?php echo $w->getHTML('liveTraf_ignoreIPs'); ?>" /></td></tr>
53
+ <tr><th>Browser user-agent to ignore:</th><td><input type="text" name="liveTraf_ignoreUA" id="liveTraf_ignoreUA" value="<?php echo $w->getHTML('liveTraf_ignoreUA'); ?>" /></td></tr>
54
+ <tr><th>Limit size of hits table to</th><td><input type="text" name="liveTraf_hitsMaxSize" class="wfConfigElem" name="liveTraf_hitsMaxSize" value="<?php $w->f('liveTraf_hitsMaxSize'); ?>" size="6" />Megabytes</td></tr>
55
+ <tr><td colspan="2"><h2>Scans to include</h2></td></tr>
56
+ <tr><th class="wfConfigEnable">Enable automatic scheduled scans</th><td><input type="checkbox" id="scheduledScansEnabled" class="wfConfigElem" name="scheduledScansEnabled" value="1" <?php $w->cb('scheduledScansEnabled'); ?> /></td></tr>
57
+ <tr><th>Scan core files against repository versions for changes</th><td><input type="checkbox" id="scansEnabled_core" class="wfConfigElem" name="scansEnabled_core" value="1" <?php $w->cb('scansEnabled_core'); ?>/></td></tr>
58
+ <tr><th>Scan theme files against repository versions for changes</th><td><input type="checkbox" id="scansEnabled_themes" class="wfConfigElem" name="scansEnabled_themes" value="1" <?php $w->cb('scansEnabled_themes'); ?>/></td></tr>
59
+ <tr><th>Scan plugin files against repository versions for changes</th><td><input type="checkbox" id="scansEnabled_plugins" class="wfConfigElem" name="scansEnabled_plugins" value="1" <?php $w->cb('scansEnabled_plugins'); ?>/></td></tr>
60
+ <tr><th>Scan for signatures of known malicious files</th><td><input type="checkbox" id="scansEnabled_malware" class="wfConfigElem" name="scansEnabled_malware" value="1" <?php $w->cb('scansEnabled_malware'); ?>/></td></tr>
61
+ <tr><th>Scan file contents for backdoors, trojans and suspicious code</th><td><input type="checkbox" id="scansEnabled_fileContents" class="wfConfigElem" name="scansEnabled_fileContents" value="1" <?php $w->cb('scansEnabled_fileContents'); ?>/></td></tr>
62
+ <tr><th>Scan posts for known dangerous URLs and suspicious content</th><td><input type="checkbox" id="scansEnabled_posts" class="wfConfigElem" name="scansEnabled_posts" value="1" <?php $w->cb('scansEnabled_posts'); ?>/></td></tr>
63
+ <tr><th>Scan comments for known dangerous URLs and suspicious content</th><td><input type="checkbox" id="scansEnabled_comments" class="wfConfigElem" name="scansEnabled_comments" value="1" <?php $w->cb('scansEnabled_comments'); ?>/></td></tr>
64
+ <tr><th>Scan for out of date plugins, themes and WordPress versions</th><td><input type="checkbox" id="scansEnabled_oldVersions" class="wfConfigElem" name="scansEnabled_oldVersions" value="1" <?php $w->cb('scansEnabled_oldVersions'); ?>/></td></tr>
65
+ <tr><th>Check the strength of passwords</th><td><input type="checkbox" id="scansEnabled_passwds" class="wfConfigElem" name="scansEnabled_passwds" value="1" <?php $w->cb('scansEnabled_passwds'); ?>/></td></tr>
66
+ <tr><th>Monitor disk space</th><td><input type="checkbox" id="scansEnabled_diskSpace" class="wfConfigElem" name="scansEnabled_diskSpace" value="1" <?php $w->cb('scansEnabled_diskSpace'); ?>/></td></tr>
67
+ <tr><th>Scan for unauthorized DNS changes</th><td><input type="checkbox" id="scansEnabled_dns" class="wfConfigElem" name="scansEnabled_dns" value="1" <?php $w->cb('scansEnabled_dns'); ?>/></td></tr>
68
+ <tr><td colspan="2">
69
+ <h2>Firewall Rules</h2>
70
+ </td></tr>
71
+
72
+ <tr><th class="wfConfigEnable">Enable firewall rules</th><td><input type="checkbox" id="firewallEnabled" class="wfConfigElem" name="firewallEnabled" value="1" <?php $w->cb('firewallEnabled'); ?> /></td></tr>
73
+ <tr><th>Immediately block fake Google crawlers:</th><td><input type="checkbox" id="blockFakeBots" class="wfConfigElem" name="blockFakeBots" value="1" <?php $w->cb('blockFakeBots'); ?>/></td></tr>
74
+ <tr><th>How should we treat Google's crawlers</th><td>
75
+ <select id="neverBlockBG" class="wfConfigElem" name="neverBlockBG">
76
+ <option value="neverBlockVerified"<?php $w->sel('neverBlockBG', 'neverBlockVerified'); ?>>Verified Google crawlers have unlimited access to this site</option>
77
+ <option value="neverBlockUA"<?php $w->sel('neverBlockBG', 'neverBlockUA'); ?>>Anyone claiming to be Google has unlimited access</option>
78
+ <option value="treatAsOtherCrawlers"<?php $w->sel('neverBlockBG', 'treatAsOtherCrawlers'); ?>>Treat Google like any other Crawler</option>
79
+ </select></td></tr>
80
+ <tr><th>If anyone's requests exceed:</th><td><?php $rateName='maxGlobalRequests'; require('wfRate.php'); ?> then <?php $throtName='maxGlobalRequests_action'; require('wfAction.php'); ?></td></tr>
81
+ <tr><th>If a crawler's page views exceed:</th><td><?php $rateName='maxRequestsCrawlers'; require('wfRate.php'); ?> then <?php $throtName='maxRequestsCrawlers_action'; require('wfAction.php'); ?></td></tr>
82
+ <tr><th>If a crawler's pages not found (404s) exceed:</th><td><?php $rateName='max404Crawlers'; require('wfRate.php'); ?> then <?php $throtName='max404Crawlers_action'; require('wfAction.php'); ?></td></tr>
83
+ <tr><th>If a human's page views exceed:</th><td><?php $rateName='maxRequestsHumans'; require('wfRate.php'); ?> then <?php $throtName='maxRequestsHumans_action'; require('wfAction.php'); ?></td></tr>
84
+ <tr><th>If a human's pages not found (404s) exceed:</th><td><?php $rateName='max404Humans'; require('wfRate.php'); ?> then <?php $throtName='max404Humans_action'; require('wfAction.php'); ?></td></tr>
85
+ <tr><th>If 404's for known vulnerable URL's exceed:</th><td><?php $rateName='maxScanHits'; require('wfRate.php'); ?> then <?php $throtName='maxScanHits_action'; require('wfAction.php'); ?></td></tr>
86
+ <tr><th>How long is an IP address blocked when it breaks a rule:</th><td>
87
+ <select id="blockedTime" class="wfConfigElem" name="blockedTime">
88
+ <option value="60"<?php $w->sel('blockedTime', '60'); ?>>1 minute</option>
89
+ <option value="300"<?php $w->sel('blockedTime', '300'); ?>>5 minutes</option>
90
+ <option value="1800"<?php $w->sel('blockedTime', '1800'); ?>>30 minutes</option>
91
+ <option value="3600"<?php $w->sel('blockedTime', '3600'); ?>>1 hour</option>
92
+ <option value="7200"<?php $w->sel('blockedTime', '7200'); ?>>2 hours</option>
93
+ <option value="21600"<?php $w->sel('blockedTime', '21600'); ?>>6 hours</option>
94
+ <option value="43200"<?php $w->sel('blockedTime', '43200'); ?>>12 hours</option>
95
+ <option value="86400"<?php $w->sel('blockedTime', '86400'); ?>>1 day</option>
96
+ <option value="172800"<?php $w->sel('blockedTime', '172800'); ?>>2 days</option>
97
+ <option value="432000"<?php $w->sel('blockedTime', '432000'); ?>>5 days</option>
98
+ <option value="864000"<?php $w->sel('blockedTime', '864000'); ?>>10 days</option>
99
+ <option value="2592000"<?php $w->sel('blockedTime', '2592000'); ?>>1 month</option>
100
+ </select></td></tr>
101
+
102
+ <tr><td colspan="2"><h2>Login Security Options</h2></td></tr>
103
+ <tr><th class="wfConfigEnable">Enable login security</th><td><input type="checkbox" id="loginSecurityEnabled" class="wfConfigElem" name="loginSecurityEnabled" value="1" <?php $w->cb('loginSecurityEnabled'); ?> /></td></tr>
104
+ <tr><th>Lock out after how many login failures</th><td>
105
+ <select id="loginSec_maxFailures" class="wfConfigElem" name="loginSec_maxFailures">
106
+ <option value="1"<?php $w->sel('loginSec_maxFailures', '1'); ?>>1</option>
107
+ <option value="2"<?php $w->sel('loginSec_maxFailures', '2'); ?>>2</option>
108
+ <option value="3"<?php $w->sel('loginSec_maxFailures', '3'); ?>>3</option>
109
+ <option value="4"<?php $w->sel('loginSec_maxFailures', '4'); ?>>4</option>
110
+ <option value="5"<?php $w->sel('loginSec_maxFailures', '5'); ?>>5</option>
111
+ <option value="6"<?php $w->sel('loginSec_maxFailures', '6'); ?>>6</option>
112
+ <option value="7"<?php $w->sel('loginSec_maxFailures', '7'); ?>>7</option>
113
+ <option value="8"<?php $w->sel('loginSec_maxFailures', '8'); ?>>8</option>
114
+ <option value="9"<?php $w->sel('loginSec_maxFailures', '9'); ?>>9</option>
115
+ <option value="10"<?php $w->sel('loginSec_maxFailures', '10'); ?>>10</option>
116
+ </select>
117
+ </td></tr>
118
+ <tr><th>Lock out after how many forgot password attempts</th><td>
119
+ <select id="loginSec_maxForgotPasswd" class="wfConfigElem" name="loginSec_maxForgotPasswd">
120
+ <option value="1"<?php $w->sel('loginSec_maxForgotPasswd', '1'); ?>>1</option>
121
+ <option value="2"<?php $w->sel('loginSec_maxForgotPasswd', '2'); ?>>2</option>
122
+ <option value="3"<?php $w->sel('loginSec_maxForgotPasswd', '3'); ?>>3</option>
123
+ <option value="4"<?php $w->sel('loginSec_maxForgotPasswd', '4'); ?>>4</option>
124
+ <option value="5"<?php $w->sel('loginSec_maxForgotPasswd', '5'); ?>>5</option>
125
+ <option value="6"<?php $w->sel('loginSec_maxForgotPasswd', '6'); ?>>6</option>
126
+ <option value="7"<?php $w->sel('loginSec_maxForgotPasswd', '7'); ?>>7</option>
127
+ <option value="8"<?php $w->sel('loginSec_maxForgotPasswd', '8'); ?>>8</option>
128
+ <option value="9"<?php $w->sel('loginSec_maxForgotPasswd', '9'); ?>>9</option>
129
+ <option value="10"<?php $w->sel('loginSec_maxForgotPasswd', '10'); ?>>10</option>
130
+ </select>
131
+ </td></tr>
132
+ <tr><th>Count failures over what time period</th><td>
133
+ <select id="loginSec_countFailMins" class="wfConfigElem" name="loginSec_countFailMins">
134
+ <option value="5"<?php $w->sel('loginSec_countFailMins', '5'); ?>>5 minutes</option>
135
+ <option value="10"<?php $w->sel('loginSec_countFailMins', '10'); ?>>10 minutes</option>
136
+ <option value="30"<?php $w->sel('loginSec_countFailMins', '30'); ?>>30 minutes</option>
137
+ <option value="60"<?php $w->sel('loginSec_countFailMins', '60'); ?>>1 hour</option>
138
+ <option value="120"<?php $w->sel('loginSec_countFailMins', '120'); ?>>2 hours</option>
139
+ <option value="360"<?php $w->sel('loginSec_countFailMins', '360'); ?>>6 hours</option>
140
+ <option value="720"<?php $w->sel('loginSec_countFailMins', '720'); ?>>12 hours</option>
141
+ <option value="1440"<?php $w->sel('loginSec_countFailMins', '1440'); ?>>1 day</option>
142
+ </select>
143
+ </td></tr>
144
+ <tr><th>Amount of time a user is locked out</th><td>
145
+ <select id="loginSec_lockoutMins" class="wfConfigElem" name="loginSec_lockoutMins">
146
+ <option value="5"<?php $w->sel('loginSec_lockoutMins', '5'); ?>>5 minutes</option>
147
+ <option value="10"<?php $w->sel('loginSec_lockoutMins', '10'); ?>>10 minutes</option>
148
+ <option value="30"<?php $w->sel('loginSec_lockoutMins', '30'); ?>>30 minutes</option>
149
+ <option value="60"<?php $w->sel('loginSec_lockoutMins', '60'); ?>>1 hour</option>
150
+ <option value="120"<?php $w->sel('loginSec_lockoutMins', '120'); ?>>2 hours</option>
151
+ <option value="360"<?php $w->sel('loginSec_lockoutMins', '360'); ?>>6 hours</option>
152
+ <option value="720"<?php $w->sel('loginSec_lockoutMins', '720'); ?>>12 hours</option>
153
+ <option value="1440"<?php $w->sel('loginSec_lockoutMins', '1440'); ?>>1 day</option>
154
+ </select>
155
+ </td></tr>
156
+ <tr><th>Immediately lock out invalid usernames</th><td><input type="checkbox" id="loginSec_lockInvalidUsers" class="wfConfigElem" name="loginSec_lockInvalidUsers" <?php $w->cb('loginSec_lockInvalidUsers'); ?> /></td></tr>
157
+ <tr><th>Don't let WordPress reveal valid users in login errors</th><td><input type="checkbox" id="loginSec_maskLoginErrors" class="wfConfigElem" name="loginSec_maskLoginErrors" <?php $w->cb('loginSec_maskLoginErrors'); ?> /></td></tr>
158
+ <tr><td colspan="2"><h2>Other Options</h2></td></tr>
159
+ <tr><th>Hide WordPress version</th><td><input type="checkbox" id="other_hideWPVersion" class="wfConfigElem" name="other_hideWPVersion" value="1" <?php $w->cb('other_hideWPVersion'); ?> /></td></tr>
160
+ <tr><th>Hold anonymous comments using member emails for moderation</th><td><input type="checkbox" id="other_noAnonMemberComments" class="wfConfigElem" name="other_noAnonMemberComments" value="1" <?php $w->cb('other_noAnonMemberComments'); ?> /></td></tr>
161
+ <tr><th>Scan comments for malware and phishing URL's</th><td><input type="checkbox" id="other_scanComments" class="wfConfigElem" name="other_scanComments" value="1" <?php $w->cb('other_scanComments'); ?> /></td></tr>
162
+ <tr><th>Check password strength on profile update</th><td><input type="checkbox" id="other_pwStrengthOnUpdate" class="wfConfigElem" name="other_pwStrengthOnUpdate" value="1" <?php $w->cb('other_pwStrengthOnUpdate'); ?> /></td></tr>
163
+ <tr><th>Participate in the Wordfence Security Network</th><td><input type="checkbox" id="other_WFNet" class="wfConfigElem" name="other_WFNet" value="1" <?php $w->cb('other_WFNet'); ?> /></td></tr>
164
+ <tr><th>Your Wordfence API Key</th><td><input type="text" id="apiKey" name="apiKey" value="<?php $w->f('apiKey'); ?>" size="20" /></td></tr>
165
+ <tr><th colspan="2"><a href="/?_wfsf=sysinfo&nonce=<?php echo wp_create_nonce('wp-ajax'); ?>" target="_blank">Click to view your system's configuration in a new window</a></th></tr>
166
+ </table>
167
+ <p><table border="0" cellpadding="0" cellspacing="0"><tr><td><input type="button" id="button1" name="button1" class="button-primary" value="Save Changes" onclick="WFAD.saveConfig();" /></td><td style="height: 24px;"><div class="wfAjax24"></div><span class="wfSavedMsg">&nbsp;Your changes have been saved!</span></td></tr></table></p>
168
+ </div>
169
+ </form>
170
+ </div>
lib/menu_scan.php ADDED
@@ -0,0 +1,470 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wordfenceModeElem" id="wordfenceMode_scan"></div>
2
+ <div class="wrap wordfence">
3
+ <div class="wordfence-lock-icon wordfence-icon32"><br /></div><h2>Wordfence Scan</h2>
4
+ <div class="wordfenceLive">
5
+ <table border="0" cellpadding="0" cellspacing="0">
6
+ <tr><td><h2>Wordfence Activity Log:</h2></td><td id="wfLiveStatus"></td></tr>
7
+ </table>
8
+ </div>
9
+ <div class="wordfenceWrap">
10
+ <div>
11
+ <div id="wfTabs">
12
+ <a href="#" class="wfTab1 wfTabSwitch selected" onclick="wordfenceAdmin.switchToSummaryTab(this); return false;">Summary</a>
13
+ <a href="#" class="wfTab1 wfTabSwitch" onclick="wordfenceAdmin.switchToLiveTab(this); return false;">Activity Log</a>
14
+ </div>
15
+ <div class="wfTabsContainer">
16
+ <div id="wfSummaryTables" class="wfDataPanel">
17
+ <div class="wfLoadingWhite32"></div>
18
+ &nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />
19
+ </div>
20
+ <div id="wfActivity" class="wfDataPanel" style="display: none; overflow: scroll; height: 400px; border: 1px solid #CCC; padding: 2px;">
21
+ <div class="wfLoadingWhite32"></div>
22
+ &nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />
23
+ </div>
24
+ </div>
25
+ </div>
26
+ <div style="margin-top: 20px;">
27
+ <div id="wfTabs">
28
+ <a href="#" id="wfNewIssuesTab" class="wfTab2 wfTabSwitch selected" onclick="wordfenceAdmin.switchIssuesTab(this, 'new'); return false;">New Issues</a>
29
+ <a href="#" class="wfTab2 wfTabSwitch" onclick="wordfenceAdmin.switchIssuesTab(this, 'ignored'); return false;">Ignored Issues</a>
30
+ </div>
31
+ <div class="wfTabsContainer">
32
+ <div id="wfIssues_new" class="wfIssuesContainer">
33
+ <h2>New Issues</h2>
34
+ <p>
35
+ The list below shows new problems or warnings that Wordfence found with your site.
36
+ If you have fixed all the issues below, you can <a href="#" onclick="WFAD.updateAllIssues('deleteNew'); return false;">click here to mark all new issues as fixed</a>.
37
+ You can also <a href="#" onclick="WFAD.updateAllIssues('ignoreAllNew'); return false;">ignore all new issues</a> which will exclude all issues listed below from future scans.
38
+ </p>
39
+ <div id="wfIssues_dataTable_new"></div>
40
+ </div>
41
+ <div id="wfIssues_ignored" class="wfIssuesContainer">
42
+ <h2>Ignored Issues</h2>
43
+ <p>
44
+ The list below shows issues that you know about and have chosen to ignore.
45
+ You can <a href="#" onclick="WFAD.updateAllIssues('deleteIgnored'); return false;">click here to clear all ignored issues</a>
46
+ which will cause all issues below to be re-scanned by Wordfence in the next scan.
47
+ </p>
48
+ <div id="wfIssues_dataTable_ignored"></div>
49
+ </div>
50
+ </div>
51
+ </div>
52
+ </div>
53
+ </div>
54
+ <script type="text/x-jquery-template" id="issueTmpl_wfThemeUpgrade">
55
+ <div>
56
+ <div class="wfIssue">
57
+ <h2>${shortMsg}</h2>
58
+ <p>
59
+ <table border="0" class="wfIssue" cellspacing="0" cellpadding="0">
60
+ <tr><th>Theme Name:</th><td>${data.name}</td></tr>
61
+ <tr><th>Current Theme Version:</th><td>${data.version}</td></tr>
62
+ <tr><th>New Theme Version:</th><td>${data.newVersion}</td></tr>
63
+ <tr><th>Theme URL:</th><td><a href="${data.URL}" target="_blank">${data.URL}</a></td></tr>
64
+ <tr><th>Severity:</th><td>{{if severity == '1'}}Critical{{else}}Warning{{/if}}</td></tr>
65
+ <tr><th>Status</th><td>
66
+ {{if status == 'new' }}New{{/if}}
67
+ {{if status == 'ignoreP' || status == 'ignoreC' }}Ignored{{/if}}
68
+ </td></tr>
69
+ </table>
70
+ </p>
71
+ <p>
72
+ {{html longMsg}}
73
+ </p>
74
+ <div class="wfIssueOptions">
75
+ {{if (status == 'new')}}
76
+ <strong>Resolve:</strong>
77
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">I have fixed this issue</a>
78
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreC'); return false;">Ignore this issue</a>
79
+ {{/if}}
80
+ {{if status == 'ignoreC' || status == 'ignoreP'}}
81
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreC'); return false;">Stop ignoring this issue</a>
82
+ {{/if}}
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </script>
87
+
88
+ <script type="text/x-jquery-template" id="issueTmpl_wfPluginUpgrade">
89
+ <div>
90
+ <div class="wfIssue">
91
+ <h2>${shortMsg}</h2>
92
+ <p>
93
+ <table border="0" class="wfIssue" cellspacing="0" cellpadding="0">
94
+ <tr><th>Plugin Name:</th><td>${data.Name}</td></tr>
95
+ {{if data.PluginURI}}<tr><th>Plugin Website:</th><td><a href="${data.PluginURI}" target="_blank">${data.PluginURI}</a></td></tr>{{/if}}
96
+ <tr><th>Current Plugin Version:</th><td>${data.Version}</td></tr>
97
+ <tr><th>New Plugin Version:</th><td>${data.newVersion}</td></tr>
98
+ <tr><th>Severity:</th><td>{{if severity == '1'}}Critical{{else}}Warning{{/if}}</td></tr>
99
+ <tr><th>Status</th><td>
100
+ {{if status == 'new' }}New{{/if}}
101
+ {{if status == 'ignoreP' || status == 'ignoreC' }}Ignored{{/if}}
102
+ </td></tr>
103
+ </table>
104
+ </p>
105
+ <p>
106
+ {{html longMsg}}
107
+ </p>
108
+ <div class="wfIssueOptions">
109
+ {{if status == 'new'}}
110
+ <strong>Resolve:</strong>
111
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">I have fixed this issue</a>
112
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreC'); return false;">Ignore this issue</a>
113
+ {{/if}}
114
+ {{if status == 'ignoreC' || status == 'ignoreP'}}
115
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">Stop ignoring this issue</a>
116
+ {{/if}}
117
+ </div>
118
+ </div>
119
+ </div>
120
+ </script>
121
+
122
+ <script type="text/x-jquery-template" id="issueTmpl_wfUpgrade">
123
+ <div>
124
+ <div class="wfIssue">
125
+ <h2>${shortMsg}</h2>
126
+ <p>
127
+ <table border="0" class="wfIssue" cellspacing="0" cellpadding="0">
128
+ <tr><th>Current WordPress Version:</th><td>${data.currentVersion}</td></tr>
129
+ <tr><th>New WordPress Version:</th><td>${data.newVersion}</td></tr>
130
+ <tr><th>Severity:</th><td>{{if severity == '1'}}Critical{{else}}Warning{{/if}}</td></tr>
131
+ <tr><th>Status</th><td>
132
+ {{if status == 'new' }}New{{/if}}
133
+ {{if status == 'ignoreP' || status == 'ignoreC' }}Ignored{{/if}}
134
+ </td></tr>
135
+ </table>
136
+ </p>
137
+ <p>
138
+ {{html longMsg}}
139
+ </p>
140
+ <div class="wfIssueOptions">
141
+ {{if (status == 'new')}}
142
+ <strong>Resolve:</strong>
143
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">I have fixed this issue</a>
144
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreC'); return false;">Ignore this issue</a>
145
+ {{/if}}
146
+ {{if status == 'ignoreC' || status == 'ignoreP'}}
147
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">Stop ignoring this issue</a>
148
+ {{/if}}
149
+ </div>
150
+ </div>
151
+ </script>
152
+
153
+ <script type="text/x-jquery-template" id="issueTmpl_dnsChange">
154
+ <div>
155
+ <div class="wfIssue">
156
+ <h2>${shortMsg}</h2>
157
+ <p>
158
+ <table border="0" class="wfIssue" cellspacing="0" cellpadding="0">
159
+ <tr><th>Old DNS records:</th><td>${data.oldDNS}</td></tr>
160
+ <tr><th>New DNS records:</th><td>${data.newDNS}</td></tr>
161
+ <tr><th>Severity:</th><td>{{if severity == '1'}}Critical{{else}}Warning{{/if}}</td></tr>
162
+ <tr><th>Status</th><td>
163
+ {{if status == 'new' }}New{{/if}}
164
+ {{if status == 'ignoreP' || status == 'ignoreC' }}Ignored{{/if}}
165
+ </td></tr>
166
+ </table>
167
+ </p>
168
+ <p>
169
+ {{html longMsg}}
170
+ </p>
171
+ <div class="wfIssueOptions">
172
+ {{if (status == 'new')}}
173
+ <strong>Resolve:</strong>
174
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">I know about this change</a>
175
+ {{/if}}
176
+ </div>
177
+ </div>
178
+ </div>
179
+ </script>
180
+
181
+ <script type="text/x-jquery-template" id="issueTmpl_diskSpace">
182
+ <div>
183
+ <div class="wfIssue">
184
+ <h2>${shortMsg}</h2>
185
+ <p>
186
+ <table border="0" class="wfIssue" cellspacing="0" cellpadding="0">
187
+ <tr><th>Space remaining:</th><td>${data.spaceLeft}%</td></tr>
188
+ <tr><th>Severity:</th><td>{{if severity == '1'}}Critical{{else}}Warning{{/if}}</td></tr>
189
+ <tr><th>Status</th><td>
190
+ {{if status == 'new' }}New{{/if}}
191
+ {{if status == 'ignoreP' || status == 'ignoreC' }}Ignoring all disk space alerts{{/if}}
192
+ </td></tr>
193
+ </table>
194
+ </p>
195
+ <p>
196
+ {{html longMsg}}
197
+ </p>
198
+ <div class="wfIssueOptions">
199
+ {{if (status == 'new')}}
200
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">I have fixed this issue</span>
201
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreP'); return false;">Ignore disk space alerts</span>
202
+ {{/if}}
203
+ {{if status == 'ignoreP' || status == 'ignoreC'}}
204
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">Stop ignoring disk space alerts</a>
205
+ {{/if}}
206
+ </div>
207
+ </div>
208
+ </div>
209
+ </script>
210
+
211
+ <script type="text/x-jquery-template" id="issueTmpl_easyPassword">
212
+ <div>
213
+ <div class="wfIssue">
214
+ <h2>${shortMsg}</h2>
215
+ <p>
216
+ <table border="0" class="wfIssue" cellspacing="0" cellpadding="0">
217
+ <tr><th>Issue first detected:</th><td>${timeAgo} ago.</td></tr>
218
+ <tr><th>Login name:</th><td>${data.user_login}</td></tr>
219
+ <tr><th>User email:</th><td>${data.user_email}</td></tr>
220
+ <tr><th>Full name:</th><td>${data.first_name} ${data.last_name}</td></tr>
221
+ <tr><th>Severity:</th><td>{{if severity == '1'}}Critical{{else}}Warning{{/if}}</td></tr>
222
+ <tr><th>Status</th><td>
223
+ {{if status == 'new' }}New{{/if}}
224
+ {{if status == 'ignoreC' }}Ignored until user changes password{{/if}}
225
+ {{if status == 'ignoreP' }}Ignoring this user's weak passwords{{/if}}
226
+ </td></tr>
227
+ </table>
228
+ </p>
229
+ <p>
230
+ {{html longMsg}}
231
+ </p>
232
+ <div class="wfIssueOptions">
233
+ <strong>Tools:</strong>
234
+ <a target="_blank" href="${data.editUserLink}">Edit this user</a>
235
+ </div>
236
+ <div class="wfIssueOptions">
237
+ {{if status == 'new'}}
238
+ <strong>Resolve:</strong>
239
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">I have fixed this issue</a>
240
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreC'); return false;">Ignore this weak password</a>
241
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreP'); return false;">Ignore all this user's weak passwords</a>
242
+ {{/if}}
243
+ {{if status == 'ignoreC' || status == 'ignoreP'}}
244
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">Stop ignoring this issue</a>
245
+ {{/if}}
246
+ </div>
247
+ </div>
248
+ </div>
249
+ </script>
250
+
251
+ <script type="text/x-jquery-template" id="issueTmpl_commentBadURL">
252
+ <div>
253
+ <div class="wfIssue">
254
+ <h2>${shortMsg}</h2>
255
+ <p>
256
+ <table border="0" class="wfIssue" cellspacing="0" cellpadding="0">
257
+ <tr><th>Author</th><td>${data.author}</td></tr>
258
+ <tr><th>Bad URL:</th><td><strong class="wfWarn">${data.badURL}</strong></td></tr>
259
+ <tr><th>Posted on:</th><td>${data.commentDate}</td></tr>
260
+ <tr><th>Severity:</th><td>Critical</td></tr>
261
+ <tr><th>Status</th><td>
262
+ {{if status == 'new' }}New{{/if}}
263
+ {{if status == 'ignoreP' || status == 'ignoreC' }}Ignored{{/if}}
264
+ </td></tr>
265
+ </table>
266
+ </p>
267
+ <p>
268
+ {{html longMsg}}
269
+ </p>
270
+ <div class="WfIssueOptions">
271
+ <strong>Tools:</strong>
272
+ <a target="_blank" href="${data.editCommentLink}">Edit this ${data.type}</a>
273
+ </div>
274
+ <div class="wfIssueOptions">
275
+ {{if status == 'new'}}
276
+ <strong>Resolve:</strong>
277
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">I have fixed this issue</a>
278
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreC'); return false;">Ignore this ${data.type}</a>
279
+ {{/if}}
280
+ {{if status == 'ignoreC' || status == 'ignoreP'}}
281
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">Stop ignoring this ${data.type}</a>
282
+ {{/if}}
283
+ </div>
284
+ </div>
285
+ </script>
286
+
287
+ <script type="text/x-jquery-template" id="issueTmpl_postBadURL">
288
+ <div>
289
+ <div class="wfIssue">
290
+ <h2>${shortMsg}</h2>
291
+ <p>
292
+ <table border="0" class="wfIssue" cellspacing="0" cellpadding="0">
293
+ <tr><th>Title:</th><td><a href="${data.permalink}" target="_blank">${data.postTitle}</a></td></tr>
294
+ <tr><th>Bad URL:</th><td><strong class="wfWarn">${data.badURL}</strong></td></tr>
295
+ <tr><th>Posted on:</th><td>${data.postDate}</td></tr>
296
+ <tr><th>Severity:</th><td>Critical</td></tr>
297
+ <tr><th>Status</th><td>
298
+ {{if status == 'new' }}New{{/if}}
299
+ {{if status == 'ignoreC' }}This bad URL will be ignored in this ${data.type}.{{/if}}
300
+ {{if status == 'ignoreP' }}This post won't be scanned for bad URL's.{{/if}}
301
+ </td></tr>
302
+ </table>
303
+ </p>
304
+ <p>
305
+ {{html longMsg}}
306
+ </p>
307
+ <div class="wfIssueOptions">
308
+ <strong>Tools:</strong>
309
+ <a target="_blank" href="${data.editPostLink}">Edit this ${data.type}</a>
310
+ </div>
311
+ <div class="wfIssueOptions">
312
+ {{if status == 'new'}}
313
+ <strong>Resolve:</strong>
314
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">I have fixed this issue</a>
315
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreC'); return false;">Ignore this bad URL in this ${data.type}</a>
316
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreP'); return false;">Ignore all bad URL's in this ${data.type}</a>
317
+ {{/if}}
318
+ {{if status == 'ignoreP' || status == 'ignoreC'}}
319
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">Stop ignoring this issue</a>
320
+ {{/if}}
321
+ </div>
322
+ </div>
323
+ </div>
324
+ </script>
325
+
326
+
327
+
328
+ <script type="text/x-jquery-template" id="issueTmpl_file">
329
+ <div>
330
+ <div class="wfIssue">
331
+ <h2>${shortMsg}</h2>
332
+ <p>
333
+ <table border="0" class="wfIssue" cellspacing="0" cellpadding="0">
334
+ <tr><th>Filename:</th><td>${data.file}</td></tr>
335
+ <tr><th>File type:</th><td>{{if data.cType}}${WFAD.ucfirst(data.cType)}{{else}}Not a core, theme or plugin file.{{/if}}</td></tr>
336
+ <tr><th>Issue first detected:</th><td>${timeAgo} ago.</td></tr>
337
+ <tr><th>Severity:</th><td>{{if severity == '1'}}Critical{{else}}Warning{{/if}}</td></tr>
338
+ <tr><th>Status</th><td>
339
+ {{if status == 'new' }}New{{/if}}
340
+ {{if status == 'ignoreP' }}Permanently ignoring this file{{/if}}
341
+ {{if status == 'ignoreC' }}Ignoring this file until it changes{{/if}}
342
+ </td></tr>
343
+ </table>
344
+ </p>
345
+ <p>
346
+ {{html longMsg}}
347
+ </p>
348
+ <div class="wfIssueOptions">
349
+ <strong>Tools:</strong>
350
+ {{if data.fileExists}}
351
+ <a target="_blank" href="/?_wfsf=view&nonce=${WFAD.nonce}&file=${encodeURIComponent(data.file)}">View the file.</a>
352
+ {{/if}}
353
+ {{if data.canFix}}
354
+ <a href="#" onclick="WFAD.restoreFile('${id}'); return false;">Restore the original version of this file.</a>
355
+ {{/if}}
356
+ {{if data.canDelete}}
357
+ <a href="#" onclick="WFAD.deleteFile('${id}'); return false;">Delete this file (can't be undone).</a>
358
+ {{/if}}
359
+ {{if data.canDiff}}
360
+ <a href="${WFAD.makeDiffLink(data)}" target="_blank">See how the file has changed.</a>
361
+ {{/if}}
362
+ </div>
363
+ <div class="wfIssueOptions">
364
+ {{if status == 'new'}}
365
+ <strong>Resolve:</strong>
366
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">I have fixed this issue</a>
367
+ {{if data.fileExists}}
368
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreC'); return false;">Ignore until the file changes.</a>
369
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreP'); return false;">Always ignore this file.</a>
370
+ {{else}}
371
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreC'); return false;">Ignore missing file</a>
372
+ {{/if}}
373
+
374
+ {{/if}}
375
+ {{if status == 'ignoreC' || status == 'ignoreP'}}
376
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">Stop ignoring this issue.</a>
377
+ {{/if}}
378
+ </div>
379
+ </div>
380
+ </div>
381
+ </script>
382
+ <script type="text/x-jquery-template" id="wfNoScanYetTmpl">
383
+ <div>
384
+ <table class="wfSummaryParent" cellpadding="0" cellspacing="0">
385
+ <tr><th class="wfHead">Please start your first scan</th></tr>
386
+ <tr><td>
387
+ <table class="wfSC1" cellpadding="0" cellspacing="0">
388
+ <tr><td>
389
+ You have not completed your first Wordfence scan yet.
390
+ Please click the button below to start your first scan.
391
+ </td></tr>
392
+ <tr><td>
393
+ <div class="wordfenceScanButton"><input type="button" value="Start a Wordfence Scan" class="wfStartScanButton button-primary" /></div>
394
+ </td></tr>
395
+ </table>
396
+ </td>
397
+ </tr></table>
398
+ </div>
399
+ </script>
400
+
401
+ <script type="text/x-jquery-template" id="wfScanSummaryTmpl">
402
+ <div>
403
+ <table class="wfSummaryParent" cellpadding="0" cellspacing="0">
404
+ <tr><th class="wfHead">Activity Summary:</th><th class="wfHead" colspan="3">Wordfence is Protecting:</th></tr>
405
+ <tr><td>
406
+ <table class="wfSC1" cellpadding="0" cellspacing="0">
407
+ <tr><td>
408
+ The most recent scan completed ${scanTimeAgo} ago.
409
+ </td></tr>
410
+ <tr><td>
411
+ {{if scanRunning == '1'}}
412
+ There is currently a scan running
413
+ {{else}}
414
+ A scan is not running at this time
415
+ {{/if}}
416
+ {{if scheduledScansEnabled}}
417
+ and the next scan is scheduled to run approximately ${nextRun}.
418
+ {{else}}
419
+ and scheduled scans are disabled.
420
+ {{/if}}
421
+ </td></tr>
422
+ <tr><td>
423
+ {{if totalCritical > 0 || totalWarning > 0}}
424
+ There are currently
425
+ {{if totalCritical > 0 && totalWarning > 0}}
426
+ ${totalCritical} critical issues and ${totalWarning} warning issues
427
+ {{else totalCritical > 0}}
428
+ ${totalCritical} critical issues
429
+ {{else totalWarning > 0}}
430
+ ${totalWarning} warning issues
431
+ {{/if}}
432
+ you need to investigate. See below for full details.
433
+ {{else lastScanCompleted == 'ok'}}
434
+ Congratulations, you have no security issues that need investigating.
435
+ {{else lastScanCompleted}}
436
+ <span style="color: #A00;">Latest scan failed: ${lastScanCompleted}</span>
437
+ {{/if}}
438
+ </td></tr>
439
+ <tr><td>
440
+ <div class="wordfenceScanButton"><input type="button" value="Start a Wordfence Scan" class="wfStartScanButton button-primary" /></div>
441
+ </td></tr>
442
+ </table>
443
+ </td>
444
+ <td>
445
+ <table class="wfSummaryChild wfSC2" cellpadding="0" cellspacing="0">
446
+ <tr><th>${wordfenceAdmin.commify(totalFiles)}</th><td>Files</td></tr>
447
+ <tr><th>${wordfenceAdmin.commify(totalDirs)}</th><td>Directories</td></tr>
448
+ <tr><th>${wordfenceAdmin.commify(totalUsers)}</th><td>Users</td></tr>
449
+ <tr><th>${wordfenceAdmin.commify(totalPlugins)}</th><td>Plugins</td></tr>
450
+ <tr><th>${wordfenceAdmin.commify(totalThemes)}</th><td>Themes</td></tr>
451
+ <tr><th>${wordfenceAdmin.commify(totalPages)}</th><td>Pages</td></tr>
452
+ <tr><th>${wordfenceAdmin.commify(totalPosts)}</th><td>Posts</td></tr>
453
+ </table>
454
+ </td>
455
+ <td>&nbsp;&nbsp;</td>
456
+ <td>
457
+ <table class="wfSummaryChild wfSC3" cellpadding="0" cellspacing="0">
458
+ <tr><th>${wordfenceAdmin.commify(totalComments)}</th><td>Comments</td></tr>
459
+ <tr><th>${wordfenceAdmin.commify(totalCategories)}</th><td>Categories</td></tr>
460
+ <tr><th>${wordfenceAdmin.commify(linesOfPHP)}</th><td>Lines of PHP code</td></tr>
461
+ <tr><th>${wordfenceAdmin.commify(linesOfJCH)}</th><td>Lines of JS, HTML and CSS code</td></tr>
462
+ <tr><th>${wordfenceAdmin.commify(totalData)}</th><td>of data in ${wordfenceAdmin.commify(totalFiles)} files</td></tr>
463
+ <tr><th>${wordfenceAdmin.commify(totalTables)}</th><td>Database Tables</td><tr>
464
+ <tr><th>${wordfenceAdmin.commify(totalRows)}</th><td>Database Rows</td></tr>
465
+ </table>
466
+ </td>
467
+ </tr></table>
468
+ </div>
469
+ </script>
470
+
lib/sysinfo.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(! wordfence::isAdmin()){ exit(); } ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">
3
+ <head>
4
+ <title>Wordfence System Info</title>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
+ <link rel='stylesheet' id='wordfence-main-style-css' href='<?php echo wfUtils::getBaseURL(); ?>/css/phpinfo.css?ver=<?php echo WORDFENCE_VERSION ?>' type='text/css' media='all' />
7
+ <body>
8
+ <?php
9
+ ob_start();
10
+ phpinfo(INFO_ALL);
11
+ $out = ob_get_clean();
12
+ $out = str_replace('width="600"','width="900"', $out);
13
+ $out = preg_replace('/<hr.*?PHP Credits.*?<\/h1>/s', '', $out);
14
+ $out = preg_replace('/<a [^>]+>/', '', $out);
15
+ $out = preg_replace('/<\/a>/', '', $out);
16
+ $out = preg_replace('/<title>[^<]*<\/title>/','', $out);
17
+ echo $out;
18
+ ?>
19
+ <div class="diffFooter">&copy;&nbsp;2011 Wordfence &mdash; Visit <a href="http://wordfence.com/">Wordfence.com</a> for help, security updates and more.</a>
20
+ </body>
21
+ </html>
lib/wf503.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
2
+ <html><head>
3
+ <title>503 Service Unavailable</title>
4
+ </head><body>
5
+ <h1>Service Unavailable</h1>
6
+ <p>Your access to this service has been temporarily limited. Please try again in a few minutes. (HTTP response code 503)</p>
7
+ <hr>
8
+ <address>This response was generated by Wordfence.</address>
9
+ </body></html>
lib/wfAPI.php ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once('wordfenceConstants.php');
3
+ class wfAPI {
4
+ public $errorMsg = false;
5
+ public $lastURLError = '';
6
+ public $lastHTTPStatus = '';
7
+ public $lastCurlErrorNo = '';
8
+ private $curlDataWritten = 0;
9
+ private $curlContent = 0;
10
+ private $APIKey = '';
11
+ private $wordpressVersion = '';
12
+ public function __construct($apiKey, $wordpressVersion){
13
+ $this->APIKey = $apiKey;
14
+ $this->wordpressVersion = $wordpressVersion;
15
+ }
16
+ public function call($action, $getParams = array(), $postParams = array()){
17
+ $this->errorMsg = false;
18
+ $json = $this->getURL(WORDFENCE_API_URL . '/v' . WORDFENCE_VERSION . '/?' . $this->makeAPIQueryString() . '&' . http_build_query(
19
+ array_merge(
20
+ array('action' => $action),
21
+ $getParams
22
+ )), $postParams);
23
+ if(! $json){
24
+ if($this->lastHTTPStatus == '502' || $this->lastCurlErrorNo == 7){
25
+ $this->errorMsg = "Wordfence is currently down for maintenance. Please try again later.";
26
+ } else {
27
+ $this->errorMsg = "We could not fetch data from the API when calling '$action': " . $this->lastURLError;
28
+ }
29
+ return false;
30
+ }
31
+
32
+ $dat = json_decode($json, true);
33
+ if(! is_array($dat)){
34
+ $this->errorMsg = "We could not understand the Wordfence API response when calling '$action'.";
35
+ }
36
+ if($dat['errorMsg']){
37
+ $this->errorMsg = $dat['errorMsg'];
38
+ }
39
+ return $dat;
40
+ }
41
+ public function curlWrite($h, $d){
42
+ $this->curlContent .= $d;
43
+ if($this->curlDataWritten > 10000000){ //10 megs
44
+ return 0;
45
+ } else {
46
+ return strlen($d);
47
+ }
48
+ }
49
+ protected function getURL($url, $postParams = array()){
50
+ $this->lastURLError = '';
51
+ if(function_exists('curl_init')){
52
+ $this->curlDataWritten = 0;
53
+ $this->curlContent = "";
54
+ $curl = curl_init($url);
55
+ curl_setopt ($curl, CURLOPT_TIMEOUT, 30);
56
+ curl_setopt ($curl, CURLOPT_USERAGENT, "Wordfence.com UA " . WORDFENCE_VERSION);
57
+ curl_setopt ($curl, CURLOPT_RETURNTRANSFER, TRUE);
58
+ curl_setopt ($curl, CURLOPT_HEADER, 0);
59
+ curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, TRUE);
60
+ curl_setopt ($curl, CURLOPT_WRITEFUNCTION, array($this, 'curlWrite'));
61
+ @curl_setopt ($curl, CURLOPT_FOLLOWLOCATION, true);
62
+ @curl_setopt ($curl, CURLOPT_MAXREDIRS, 10);
63
+ curl_setopt($curl, CURLOPT_POST, true);
64
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $postParams);
65
+
66
+ $curlResult = curl_exec($curl);
67
+ $httpStatus = curl_getinfo($curl, CURLINFO_HTTP_CODE);
68
+ $this->lastCurlErrorNo = curl_errno($curl);
69
+ if($httpStatus == 200){
70
+ curl_close($curl);
71
+ return $this->curlContent;
72
+ } else {
73
+ $this->lastURLError = "HTTP status $httpStatus from server. " . curl_error($curl);
74
+ $this->lastHTTPStatus = $httpStatus;
75
+ curl_close($curl);
76
+ return false;
77
+ }
78
+ } else {
79
+ $data = @file_get_contents ($url);
80
+ if($data === false){
81
+ $err = error_get_last();
82
+ $this->lastURLError = $err;
83
+ return false;
84
+ }
85
+ return $data;
86
+ }
87
+
88
+ }
89
+ public function binCall($func, $postData){
90
+ $this->errorMsg = false;
91
+ $url = WORDFENCE_API_URL . '?' . $this->makeAPIQueryString() . '&action=' . $func;
92
+ $curl = curl_init($url);
93
+ curl_setopt ($curl, CURLOPT_TIMEOUT, 30);
94
+ //curl_setopt($curl, CURLOPT_VERBOSE, true);
95
+ curl_setopt ($curl, CURLOPT_USERAGENT, "Wordfence");
96
+ curl_setopt ($curl, CURLOPT_RETURNTRANSFER, TRUE);
97
+ curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, TRUE);
98
+ @curl_setopt ($curl, CURLOPT_FOLLOWLOCATION, true);
99
+ @curl_setopt ($curl, CURLOPT_MAXREDIRS, 10);
100
+ curl_setopt($curl, CURLOPT_POST, true);
101
+ if($postData){
102
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
103
+ } else {
104
+ curl_setopt($curl, CURLOPT_POSTFIELDS, array());
105
+ }
106
+ $data = curl_exec($curl);
107
+ $httpStatus = curl_getinfo($curl, CURLINFO_HTTP_CODE);
108
+ if(preg_match('/\{.*errorMsg/', $data)){
109
+ $jdat = @json_decode($data, true);
110
+ if(is_array($jdat) && $jdat['errorMsg']){
111
+ $this->errorMsg = $jdat['errorMsg'];
112
+ return false;
113
+ }
114
+ }
115
+ return array('code' => $httpStatus, 'data' => $data);
116
+ }
117
+ public function makeAPIQueryString(){
118
+ $siteurl = '';
119
+ if(function_exists('get_bloginfo')){
120
+ $siteurl = get_bloginfo('siteurl');
121
+ }
122
+ return http_build_query(array(
123
+ 'v' => $this->wordpressVersion,
124
+ 's' => $siteurl,
125
+ 'k' => $this->APIKey
126
+ ));
127
+ }
128
+ }
129
+
130
+ ?>
lib/wfAction.php ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <select class="wfConfigElem" id="<?php echo $throtName; ?>" name="<?php echo $throtName; ?>">
2
+ <option value="throttle"<?php $w->sel($throtName, 'throttle'); ?>>throttle it</option>
3
+ <option value="block"<?php $w->sel($throtName, 'block'); ?>>block it</option>
4
+ </select>
lib/wfBrowscap.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class wfBrowscap {
3
+ protected $_cacheLoaded = false;
4
+ protected $_userAgents = array();
5
+ protected $_browsers = array();
6
+ protected $_patterns = array();
7
+ protected $_properties = array();
8
+ protected $resultCache = array();
9
+ public function getBrowser($user_agent){
10
+ $uamd5 = md5($user_agent);
11
+ if(isset($this->resultCache[$uamd5])){
12
+ return $this->resultCache[$uamd5];
13
+ }
14
+ if (!$this->_cacheLoaded){
15
+ $this->_loadCache('wfBrowscapCache.php');
16
+ }
17
+
18
+ $browser = array();
19
+ foreach ($this->_patterns as $key => $pattern){
20
+ if (preg_match($pattern . 'i', $user_agent)){
21
+ $browser = array(
22
+ $user_agent,
23
+ trim(strtolower($pattern), '@'),
24
+ $this->_userAgents[$key]
25
+ );
26
+ $browser = $value = $browser + $this->_browsers[$key];
27
+ while (array_key_exists(3, $value) && $value[3]){
28
+ $value = $this->_browsers[$value[3]];
29
+ $browser += $value;
30
+ }
31
+ if (!empty($browser[3])){
32
+ $browser[3] = $this->_userAgents[$browser[3]];
33
+ }
34
+ break;
35
+ }
36
+ }
37
+ $array = array();
38
+ foreach ($browser as $key => $value) {
39
+ if ($value === 'true') {
40
+ $value = true;
41
+ } elseif ($value === 'false') {
42
+ $value = false;
43
+ }
44
+ $array[$this->_properties[$key]] = $value;
45
+ }
46
+ $this->resultCache[$uamd5] = $array;
47
+ return $array;
48
+ }
49
+ protected function _loadCache($cache_file){
50
+ require $cache_file;
51
+ $this->_browsers = $browsers;
52
+ $this->_userAgents = $userAgents;
53
+ $this->_patterns = $patterns;
54
+ $this->_properties = $properties;
55
+ $this->_cacheLoaded = true;
56
+ }
57
+ }
58
+ ?>
lib/wfBrowscapCache.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
1
+ <?php
2
+ $properties=array('browser_name','browser_name_regex','browser_name_pattern','Parent','Browser','Version','MajorVer','MinorVer','Platform','Alpha','Beta','Win16','Win32','Win64','Frames','IFrames','Tables','Cookies','BackgroundSounds','JavaScript','VBScript','JavaApplets','ActiveXControls','isBanned','isMobileDevice','isSyndicationReader','Crawler','CssVersion','AolVersion');
3
+ $browsers=array(array(3=>3615,4=>'TKC AutoDownloader'),array(3=>4261),array(3=>4490,5=>'3.0',6=>3,7=>0),array(3=>4493,5=>'4.2',6=>4,7=>2),array(3=>4493,5=>'4.2',6=>4,7=>2),array(3=>4173,5=>'3.1',6=>3,7=>1),array(3=>4173,5=>'3.1',6=>3,7=>1),array(3=>4173,5=>'2.2',6=>2,7=>2),array(3=>4173,5=>'3.1',6=>3,7=>1),array(3=>4173,5=>'4.0',6=>4,7=>0),array(3=>4173,5=>'4.3',6=>4,7=>3),array(3=>4173,5=>'4.3',6=>4,7=>3),array(3=>4173,5=>'4.2',6=>4,7=>2),array(3=>4173,5=>'2.1',6=>2,7=>1),array(3=>4493,5=>'5.1',6=>5,7=>1),array(3=>4493,5=>'3.2',6=>3,7=>2),array(3=>4493,5=>'3.1',6=>3,7=>1),array(3=>3865,8=>'MacOSX',12=>'false'),array(3=>4493,5=>'4.1',6=>4,7=>1),array(3=>4493,5=>'4.2',6=>4,7=>2),array(3=>4173,5=>'2.0',6=>2,7=>0),array(3=>4493,5=>'5.0',6=>5,7=>0),array(3=>4493,5=>'4.3',6=>4,7=>3),array(3=>4173,5=>'2.0',6=>2,7=>0),array(3=>4461,5=>'2.1.1',6=>2,7=>'1.1'),array(3=>4172,5=>'6.0',6=>6,7=>0),array(3=>4493,5=>'4.0',6=>4,7=>0),array(3=>4493,5=>'3.0',6=>3,7=>0),array(3=>4343,5=>'b39389'),array(3=>4493,5=>'2.0',6=>2,7=>0),array(3=>4173,5=>'2.1',6=>2,7=>1),array(3=>4173,5=>'4.3',6=>4,7=>3),array(3=>4173,5=>'5.1',6=>5,7=>1),array(3=>4173,5=>'3.1',6=>3,7=>1),array(3=>4173,5=>'4.1',6=>4,7=>1),array(3=>4173,5=>'2.2',6=>2,7=>2),array(3=>4173,5=>'5.0',6=>5,7=>0),array(3=>4173,5=>'2.0',6=>2,7=>0),array(3=>4173,5=>'4.0',6=>4,7=>0),array(3=>4173,5=>'3.0',6=>3,7=>0),array(3=>4461,5=>'1.5',6=>1,7=>5),array(3=>4461,5=>'1.6',6=>1,7=>6),array(3=>4461,5=>'2.0.1',6=>2,7=>'0.1'),array(3=>3865,8=>'WinXP'),array(3=>3865,8=>'WinVista'),array(3=>4461,5=>'1.0',6=>1,7=>0),array(3=>4461,5=>'2.1',6=>2,7=>1),array(3=>3865,8=>'Win7'),array(3=>4536,5=>'4.2',6=>4,7=>2),array(3=>4461,5=>'2.2',6=>2,7=>2),array(3=>4536,5=>'3.2',6=>3,7=>2),array(3=>4536,5=>'3.2',6=>3,7=>2),array(3=>4461,5=>'2.3',6=>2,7=>3),array(3=>3777,4=>'Girafabot',12=>'true'),array(3=>4536,5=>'4.3',6=>4,7=>3),array(3=>4461,5=>'2.0',6=>2,7=>0),array(3=>4536,5=>'4.3',6=>4,7=>3),array(3=>4493,5=>'5.1',6=>5,7=>1),array(3=>4493),array(3=>4536,5=>'4.2',6=>4,7=>2),array(3=>4536,5=>'4.3',6=>4,7=>3),array(3=>4536,5=>'5.1',6=>5,7=>1),array(3=>4536,5=>'3.2',6=>3,7=>2),array(3=>4536,5=>'5.0',6=>5,7=>0),array(3=>3897),array(3=>4250,5=>'3.5',6=>3,7=>5,8=>'MacOSX'),array(3=>4493,5=>'1.0',6=>1,7=>0,8=>'iPhone OSX'),array(3=>3657,4=>'McAffee Scan Alert'),array(3=>4172,4=>'PlayBook',5=>'7.0',6=>7,7=>0,8=>'RIM Tablet OS'),array(3=>4387,8=>'Win2003'),array(3=>4387,8=>'WinXP'),array(3=>4387,8=>'Win7'),array(3=>4387,8=>'WinVista'),array(3=>4387,8=>'Win2000'),array(3=>4420,4=>'Galaxy Tab',5=>'10.1',6=>10,7=>1),array(3=>4547,5=>'4.7',6=>4,7=>7),array(3=>4095,8=>'Win7'),array(3=>4095,8=>'WinXP'),array(3=>4095,8=>'WinXP'),array(3=>4095,8=>'Win2000'),array(3=>4095,8=>'WinVista'),array(3=>4261),array(3=>3946,8=>'SymbianOS'),array(3=>3950,8=>'SymbianOS'),array(3=>4131,4=>'Ruunk'),array(3=>4172,4=>'Blackberry Playbook Tablet',5=>'1.0',6=>1,7=>0,8=>'RIM Tablet OS'),array(3=>3902,4=>'OmniWeb',5=>'5.11',6=>5,7=>11,27=>3),array(3=>3806),array(3=>4439,12=>'false',13=>'true'),array(3=>3880),array(3=>3857),array(3=>3859),array(3=>3870),array(3=>3804),array(3=>4439,8=>'WinXP',12=>'false',13=>'true'),array(3=>3808),array(3=>3854),array(3=>4439,12=>'false',13=>'true'),array(3=>3810),array(3=>3777,4=>'ShopSalad'),array(3=>3866),array(3=>3971),array(3=>3874),array(3=>4112,5=>'5.8',6=>5,7=>8),array(3=>3883),array(3=>3868),array(3=>3983),array(3=>3980),array(3=>3975,8=>'Linux'),array(3=>4026,8=>'Win7',12=>'false',13=>'true'),array(3=>4015,8=>'WinXP',12=>'false',13=>'true'),array(3=>4015,8=>'WinXP',12=>'false',13=>'true'),array(3=>4015,8=>'WinVista',12=>'false',13=>'true'),array(3=>4043,12=>'false',13=>'true'),array(3=>4026,8=>'WinXP',12=>'false',13=>'true'),array(3=>4024,8=>'WinVista',12=>'false',13=>'true'),array(3=>4015,8=>'Win7',12=>'false',13=>'true'),array(3=>4024,8=>'WinXP',12=>'false',13=>'true'),array(3=>4015,12=>'false',13=>'true'),array(3=>4024,8=>'Win7',12=>'false',13=>'true'),array(3=>3998,8=>'WinVista',12=>'false',13=>'true'),array(3=>4026,8=>'WinXP',12=>'false',13=>'true'),array(3=>4024,8=>'WinXP',12=>'false',13=>'true'),array(3=>4024,12=>'false',13=>'true'),array(3=>3998,8=>'Win7',12=>'false',13=>'true'),array(3=>4026,8=>'WinVista',12=>'false',13=>'true'),array(3=>3994,8=>'WinXP',12=>'false',13=>'true'),array(3=>4026,12=>'false',13=>'true'),array(3=>4037,8=>'Win7',12=>'false',13=>'true'),array(3=>4037,8=>'WinVista',12=>'false',13=>'true'),array(3=>4037,8=>'WinXP',12=>'false',13=>'true'),array(3=>4045,8=>'WinXP',12=>'false',13=>'true'),array(3=>4044,8=>'WinXP',12=>'false',13=>'true'),array(3=>4045,8=>'WinXP',12=>'false',13=>'true'),array(3=>4045,8=>'WinVista',12=>'false',13=>'true'),array(3=>4045,8=>'Win7',12=>'false',13=>'true'),array(3=>4045,8=>'Win8',12=>'false',13=>'true'),array(3=>4037,8=>'WinXP',12=>'false',13=>'true'),array(3=>4044,8=>'WinXP',12=>'false',13=>'true'),array(3=>4044,12=>'false',13=>'true'),array(3=>4043,8=>'WinXP',12=>'false',13=>'true'),array(3=>4043,8=>'WinXP',12=>'false',13=>'true'),array(3=>4043,8=>'WinVista',12=>'false',13=>'true'),array(3=>4044,8=>'Win7',12=>'false',13=>'true'),array(3=>4044,8=>'WinVista',12=>'false',13=>'true'),array(3=>3994,8=>'Win7',12=>'false',13=>'true'),array(3=>3994,8=>'WinVista',12=>'false',13=>'true'),array(3=>3994,8=>'WinXP',12=>'false',13=>'true'),array(3=>4043,8=>'Win7',12=>'false',13=>'true'),array(3=>3880),array(3=>3998,8=>'WinXP',12=>'false',13=>'true'),array(3=>3854),array(3=>3859),array(3=>3857),array(3=>4010,8=>'Win7',12=>'false',13=>'true'),array(3=>4010,8=>'WinVista',12=>'false',13=>'true'),array(3=>3657,4=>'Kyluka'),array(3=>4010,8=>'WinXP',12=>'false',13=>'true'),array(3=>4010,8=>'WinXP',12=>'false',13=>'true'),array(3=>3808),array(3=>3870),array(3=>3810),array(3=>3866),array(3=>3998,8=>'WinXP',12=>'false',13=>'true'),array(3=>3806),array(3=>3804),array(3=>4199,8=>'WinXP',12=>'false',13=>'true'),array(3=>3983),array(3=>3279,4=>'Epiphany',5=>'2.30',6=>2,7=>30,8=>'Linux',11=>'false',12=>'false',13=>'false',15=>'true',20=>'true',21=>'true',27=>3),array(3=>3296,8=>'Win7',12=>'false',13=>'true'),array(3=>4112,5=>'5.9',6=>5,7=>9),array(3=>3975),array(3=>4112,5=>'5.7',6=>5,7=>7),array(3=>3971),array(3=>3980),array(3=>4192,8=>'Win7',12=>'false',13=>'true'),array(3=>4192,8=>'WinXP',12=>'false',13=>'true'),array(3=>4192,8=>'WinXP',12=>'false',13=>'true'),array(3=>4198,8=>'WinXP',12=>'false',13=>'true'),array(3=>4198,8=>'WinXP',12=>'false',13=>'true'),array(3=>4198,8=>'Win7',12=>'false',13=>'true'),array(3=>4198,8=>'WinVista',12=>'false',13=>'true'),array(3=>4199,8=>'WinXP',12=>'false',13=>'true'),array(3=>4192,8=>'WinVista',12=>'false',13=>'true'),array(3=>4205,8=>'WinXP',12=>'false',13=>'true'),array(3=>4205,8=>'WinXP',12=>'false',13=>'true'),array(3=>4205,8=>'WinVista',12=>'false',13=>'true'),array(3=>4199,8=>'Win7',12=>'false',13=>'true'),array(3=>3661),array(3=>4205,8=>'Win7',12=>'false',13=>'true'),array(3=>4199,8=>'WinVista',12=>'false',13=>'true'),array(3=>4371,5=>'2.0',6=>2,7=>0,27=>2),array(3=>3897),array(3=>4112,5=>'5.6',6=>5,7=>6),array(3=>4371,5=>'1.0',6=>1,7=>0,27=>2),array(3=>3852,8=>'WinVista'),array(3=>3852,8=>'Win7'),array(3=>3852,8=>'Win2003'),array(3=>3657,4=>'DomainCrawler'),array(3=>3661),array(3=>3852,8=>'Win2000'),array(3=>3852,8=>'WinXP'),array(3=>4177,8=>'WinVista'),array(3=>4178,8=>'WinXP'),array(3=>4178,8=>'Win2000'),array(3=>4178,8=>'WinVista'),array(3=>4178,8=>'Win7'),array(3=>3755,8=>'WinXP',12=>'false',13=>'true'),array(3=>4371,5=>'2.0',6=>2,7=>0,27=>2),array(3=>4177,8=>'Win7'),array(3=>4178,8=>'WinXP'),array(3=>3755,8=>'WinVista',12=>'false',13=>'true'),array(3=>3755,8=>'Win7',12=>'false',13=>'true'),array(3=>4177,8=>'WinXP'),array(3=>4177,8=>'Win2000'),array(3=>4177,8=>'WinXP'),array(3=>3755,8=>'WinXP',12=>'false',13=>'true'),array(3=>4210,8=>'Win2000'),array(3=>4210,8=>'WinXP'),array(3=>4210,8=>'WinXP'),array(3=>4212,8=>'WinXP'),array(3=>4210,8=>'WinVista'),array(3=>4212,8=>'Win2000'),array(3=>4212,8=>'WinXP'),array(3=>4212,8=>'WinVista'),array(3=>4212,8=>'Win7'),array(3=>3874),array(3=>4213,8=>'Win7'),array(3=>3777,4=>'YoudaoBot',5=>'1.0',6=>1,7=>0),array(3=>3868),array(3=>3883),array(3=>4211,8=>'Win7'),array(3=>4211,8=>'WinVista'),array(3=>4211,8=>'Win2000'),array(3=>4211,8=>'WinXP'),array(3=>4211,8=>'WinXP'),array(3=>4210,8=>'Win7'),array(3=>3872,8=>'WinVista'),array(3=>4274,8=>'Win7'),array(3=>4273,8=>'Win2000'),array(3=>4273,8=>'WinXP'),array(3=>4274,8=>'WinVista'),array(3=>4274,8=>'WinXP'),array(3=>4000,4=>'Arora',5=>'0.8.0',6=>0,7=>'8.0',8=>'Linux'),array(3=>4274,8=>'Win2000'),array(3=>4274,8=>'WinXP'),array(3=>4273,8=>'WinVista'),array(3=>4273,8=>'Win7'),array(3=>4213,8=>'Win2000'),array(3=>4213,8=>'WinXP'),array(3=>4213,8=>'WinXP'),array(3=>4371,5=>'1.0',6=>1,7=>0,27=>2),array(3=>3872,8=>'Win7'),array(3=>3872,8=>'Win2000'),array(3=>3872,8=>'WinXP'),array(3=>3872,8=>'WinXP'),array(3=>4213,8=>'WinVista'),array(3=>4273,8=>'WinXP'),array(3=>4527,4=>'Yahoo! Directory Engine'),array(3=>4439,8=>'WinVista'),array(3=>4178,8=>'Linux',12=>'false'),array(3=>4439,8=>'Win7'),array(3=>4437,8=>'WinXP'),array(3=>4437,8=>'Win7'),array(3=>4000,4=>'Arora',5=>'0.6',6=>0,7=>6,8=>'Linux'),array(3=>3657,4=>'Metaspinner/0.01',5=>'0.01',6=>0,7=>1),array(3=>3852,8=>'MacOSX'),array(3=>4355,5=>'9.0',6=>9,7=>0,8=>'WinPhone7'),array(3=>4355,5=>'7.0',6=>7,7=>0,8=>'WinPhone7'),array(3=>3615,4=>'browscap updater'),array(3=>4439,8=>'WinXP'),array(3=>4437,8=>'WinXP'),array(3=>4437,8=>'WinVista'),array(3=>4177,8=>'Linux',12=>'false'),array(3=>4277,8=>'Win7'),array(3=>4277,8=>'WinVista'),array(3=>4277,8=>'Win2003'),array(3=>4282,8=>'WinXP'),array(3=>4282,8=>'MacOSX',12=>'false'),array(3=>4026,8=>'WinVista'),array(3=>4026,8=>'WinXP'),array(3=>4026,8=>'Win2000'),array(3=>4283,8=>'Win7'),array(3=>4283,8=>'WinVista'),array(3=>4026,8=>'WinNT'),array(3=>4288,8=>'MacOSX',12=>'false'),array(3=>4288,8=>'WinVista'),array(3=>4288,8=>'WinXP'),array(3=>4283,8=>'Win2003'),array(3=>4283,8=>'WinXP'),array(3=>4282,8=>'WinVista'),array(3=>4026,8=>'WinXP'),array(3=>4282,8=>'Win7'),array(3=>4283,8=>'MacOSX',12=>'false'),array(3=>3777,4=>'Scrubby',23=>'true'),array(3=>4282,8=>'Win2003'),array(3=>4276,8=>'Win2003'),array(3=>4010,8=>'WinNT'),array(3=>4010,8=>'Win2000'),array(3=>4010,8=>'MacOSX',12=>'false'),array(3=>4026,8=>'Win8'),array(3=>4043,8=>'WinXP'),array(3=>4010,8=>'WinXP'),array(3=>4010,8=>'WinXP'),array(3=>4212,12=>'false'),array(3=>4010,8=>'Win7'),array(3=>4010,8=>'WinVista'),array(3=>4213,12=>'false'),array(3=>4275,8=>'MacOSX',12=>'false'),array(3=>4275,8=>'WinXP'),array(3=>4288,8=>'Win7'),array(3=>4276,8=>'WinVista'),array(3=>4276,8=>'Win7'),array(3=>4277,8=>'MacOSX',12=>'false'),array(3=>4276,8=>'WinXP'),array(3=>4276,8=>'MacOSX',12=>'false'),array(3=>4275,8=>'Win2003'),array(3=>4026,8=>'Win7'),array(3=>4275,8=>'WinVista'),array(3=>4275,8=>'Win7'),array(3=>4277,8=>'WinXP'),array(3=>4024,8=>'Win7'),array(3=>4274,8=>'Linux',12=>'false'),array(3=>4024,8=>'MacOSX',12=>'false'),array(3=>4015,8=>'Win8'),array(3=>4273,8=>'Linux',12=>'false'),array(3=>4527,4=>'Yahoo! Slurp'),array(3=>4024,8=>'WinNT'),array(3=>4043,8=>'WinVista'),array(3=>3615,4=>'Automated Browscap.ini Updater'),array(3=>4024,8=>'WinXP'),array(3=>4024,8=>'WinXP'),array(3=>4024,8=>'Win2000'),array(3=>3872,8=>'Linux',12=>'false'),array(3=>4043,8=>'Win7'),array(3=>4015,8=>'WinXP'),array(3=>4015,8=>'Win2000'),array(3=>4015,8=>'WinNT'),array(3=>4043,8=>'WinNT'),array(3=>4015,8=>'WinXP'),array(3=>4015,8=>'WinVista'),array(3=>4043,8=>'Win8'),array(3=>4015,8=>'MacOSX',12=>'false'),array(3=>3299,8=>'Win7',12=>'false',13=>'true'),array(3=>4015,8=>'Win7'),array(3=>4043,8=>'WinXP'),array(3=>4256,8=>'Win7'),array(3=>4024,8=>'Win8'),array(3=>3998,8=>'MacOSX',12=>'false'),array(3=>4024,8=>'WinVista'),array(3=>4287,8=>'WinXP'),array(3=>4026,8=>'MacOSX',12=>'false'),array(3=>4287,8=>'MacOSX',12=>'false'),array(3=>4289,8=>'WinXP'),array(3=>4289,8=>'Win2003'),array(3=>4289,8=>'WinVista'),array(3=>4289,8=>'Win7'),array(3=>4287,8=>'Win2003'),array(3=>4287,8=>'WinVista'),array(3=>4256,8=>'MacOSX',12=>'false'),array(3=>4256,8=>'WinXP'),array(3=>4256,8=>'Win2003'),array(3=>4256,8=>'WinVista'),array(3=>4286,8=>'Win7'),array(3=>4286,8=>'WinVista'),array(3=>4287,8=>'Win7'),array(3=>4286,8=>'MacOSX',12=>'false'),array(3=>4286,8=>'WinXP'),array(3=>4286,8=>'Win2003'),array(3=>4289,8=>'MacOSX',12=>'false'),array(3=>4288,8=>'Win2003'),array(3=>3994,8=>'WinVista'),array(3=>3994,8=>'MacOSX',12=>'false'),array(3=>4044,8=>'Win7'),array(3=>4210),array(3=>3994,8=>'WinXP'),array(3=>4037,8=>'MacOSX',12=>'false'),array(3=>4044,8=>'MacOSX',12=>'false'),array(3=>4045,8=>'WinXP'),array(3=>4045,8=>'WinVista'),array(3=>4045,8=>'Win7'),array(3=>4045,8=>'Win8'),array(3=>4044,8=>'WinVista'),array(3=>3994,8=>'WinXP'),array(3=>3998,8=>'Win7'),array(3=>3998,8=>'WinVista'),array(3=>4211),array(3=>4044,8=>'WinNT'),array(3=>4044,8=>'Win2000'),array(3=>3994,8=>'WinNT'),array(3=>3998,8=>'WinXP'),array(3=>4044,8=>'WinXP'),array(3=>3994,8=>'Win2000'),array(3=>4044,8=>'WinXP'),array(3=>3998,8=>'WinXP'),array(3=>4045,8=>'WinXP'),array(3=>3994,8=>'Win7'),array(3=>4043,8=>'Win2000'),array(3=>4037,8=>'WinNT'),array(3=>3998,8=>'Win2000'),array(3=>4037,8=>'WinVista'),array(3=>3998,8=>'WinNT'),array(3=>4037,8=>'WinXP'),array(3=>4043,8=>'MacOSX',12=>'false'),array(3=>4037,8=>'Win7'),array(3=>4044,8=>'Win8'),array(3=>4045,8=>'Win2000'),array(3=>4037,8=>'Win2000'),array(3=>4037,8=>'WinXP'),array(3=>4045,8=>'WinNT'),array(3=>4045,8=>'MacOSX',12=>'false'),array(3=>4373,8=>'Win7'),array(3=>4373,8=>'Win2003'),array(3=>4373,8=>'WinVista'),array(3=>4367,8=>'MacOSX',12=>'false'),array(3=>4373,8=>'WinXP'),array(3=>3777,4=>'ThunderStone',23=>'true'),array(3=>4367,8=>'Win2003'),array(3=>4366,8=>'WinXP'),array(3=>4366,8=>'Win2003'),array(3=>4198,8=>'WinVista'),array(3=>4366,8=>'MacOSX',12=>'false'),array(3=>4367,8=>'Win7'),array(3=>4367,8=>'WinXP'),array(3=>4367,8=>'WinVista'),array(3=>4198,8=>'WinXP'),array(3=>4373,8=>'MacOSX',12=>'false'),array(3=>4374,8=>'Win2003'),array(3=>4374,8=>'WinVista'),array(3=>4510,4=>'Baiduspider',5=>'2.0',6=>2,7=>0),array(3=>4293,5=>'3.6',6=>3,7=>6),array(3=>4192,8=>'Win7'),array(3=>4199,8=>'Win7'),array(3=>4374,8=>'MacOSX',12=>'false'),array(3=>4374,8=>'WinXP'),array(3=>4199,8=>'WinVista'),array(3=>4198,8=>'MacOSX',12=>'false'),array(3=>4205,8=>'MacOSX',12=>'false'),array(3=>3788,4=>'KaloogaBot'),array(3=>4199,8=>'WinXP'),array(3=>4198,8=>'Win7'),array(3=>4199,8=>'WinXP'),array(3=>4374,8=>'Win7'),array(3=>4192,8=>'WinVista'),array(3=>4199,8=>'WinNT'),array(3=>4199,8=>'Win2000'),array(3=>4366,8=>'WinVista'),array(3=>4000,4=>'Arora',5=>'0.8.0',6=>0,7=>'8.0',8=>'Win32'),array(3=>4205,8=>'WinVista'),array(3=>4192,8=>'Win2000'),array(3=>4205,8=>'Win2000'),array(3=>4205,8=>'Win7'),array(3=>4366,8=>'Win7'),array(3=>4205,8=>'WinNT'),array(3=>4198,8=>'WinNT'),array(3=>4192,8=>'WinXP'),array(3=>4198,8=>'WinXP'),array(3=>4192,8=>'MacOSX',12=>'false'),array(3=>4492,5=>'4.4',6=>4,7=>4),array(3=>4198,8=>'Win2000'),array(3=>4492,5=>'4.5',6=>4,7=>5),array(3=>4192,8=>'WinNT'),array(3=>4205,8=>'WinXP'),array(3=>4492,5=>'4.2',6=>4,7=>2),array(3=>4492,5=>'4.0',6=>4,7=>0),array(3=>4205,8=>'WinXP'),array(3=>4492,5=>'4.1',6=>4,7=>1),array(3=>3777,4=>'SqwidgeBot'),array(3=>4199,8=>'MacOSX',12=>'false'),array(3=>4192,8=>'WinXP'),array(3=>4037,8=>'Linux',12=>'false'),array(3=>4238,8=>'Win2003'),array(3=>3998,8=>'Linux',12=>'false'),array(3=>4252,8=>'WinXP'),array(3=>4112,5=>'5.5',6=>5,7=>5),array(3=>4277,8=>'Linux',12=>'false'),array(3=>4238,8=>'WinXP'),array(3=>4252,8=>'Win2003'),array(3=>4256,8=>'Linux',12=>'false'),array(3=>4252,8=>'Win2000'),array(3=>4045,8=>'Linux',12=>'false'),array(3=>4286,8=>'Linux',12=>'false'),array(3=>4276,8=>'Linux',12=>'false'),array(3=>4238,8=>'Win7'),array(3=>4288,8=>'Linux',12=>'false'),array(3=>4000,4=>'Arora',5=>'0.6',6=>0,7=>6,8=>'Win32'),array(3=>4238,8=>'WinVista'),array(3=>3615,4=>'Automated Browscap Updater'),array(3=>4238,8=>'Win2000'),array(3=>4015,8=>'Linux',12=>'false'),array(3=>4275,8=>'Linux',12=>'false'),array(3=>4044,8=>'Linux',12=>'false'),array(3=>4282,8=>'Linux',12=>'false'),array(3=>4252,8=>'Win7'),array(3=>4289,8=>'Linux',12=>'false'),array(3=>4024,8=>'Linux',12=>'false'),array(3=>4026,8=>'Linux',12=>'false'),array(3=>4043,8=>'Linux',12=>'false'),array(3=>4010,8=>'Linux',12=>'false'),array(3=>4283,8=>'Linux',12=>'false'),array(3=>3994,8=>'Linux',12=>'false'),array(3=>4287,8=>'Linux',12=>'false'),array(3=>4252,8=>'WinVista'),array(3=>4112,5=>'5.1',6=>5,7=>1),array(3=>4366,8=>'Linux',12=>'false'),array(3=>3933,8=>'WinXP'),array(3=>3933,8=>'MacOSX',12=>'false'),array(3=>4355,4=>'IE',5=>'6.0',6=>6,7=>0,8=>'WinXP'),array(3=>4112,5=>'5.5',6=>5,7=>5),array(3=>3933,8=>'Win2003'),array(3=>4205,8=>'Linux',12=>'false'),array(3=>4527,4=>'Yahoo! Slurp China'),array(3=>3755,8=>'MacOSX'),array(3=>4178,8=>'MacOSX',12=>'false'),array(3=>4198,8=>'Linux',12=>'false'),array(3=>4373,8=>'Linux',12=>'false'),array(3=>4177,8=>'MacOSX',12=>'false'),array(3=>3933,8=>'WinVista'),array(3=>4527,4=>'Yahoo!-AdCrawler'),array(3=>3755,8=>'WinXP'),array(3=>4367,8=>'Linux',12=>'false'),array(3=>3755,8=>'WinNT'),array(3=>3933,8=>'Win7'),array(3=>4212,8=>'SymbianOS',12=>'false',24=>'true'),array(3=>3755,8=>'WinXP'),array(3=>3755,8=>'Win2000'),array(3=>4492,5=>'3.0',6=>3,7=>0),array(3=>4374,8=>'Linux',12=>'false'),array(3=>4168,8=>'Win8'),array(3=>4168,8=>'Win7'),array(3=>4168,8=>'WinVista'),array(3=>4165,8=>'WinXP'),array(3=>4165,8=>'WinXP'),array(3=>4165,8=>'Win8'),array(3=>4162,8=>'WinVista'),array(3=>4165,8=>'WinVista'),array(3=>4168,8=>'WinXP'),array(3=>4168,8=>'WinXP'),array(3=>4162,8=>'WinXP'),array(3=>4162,8=>'WinXP'),array(3=>4162,8=>'Win7'),array(3=>4157,8=>'Win7'),array(3=>4157,8=>'WinVista'),array(3=>4157,8=>'WinXP'),array(3=>4157,8=>'WinXP'),array(3=>3755,8=>'WinVista'),array(3=>4211,8=>'SymbianOS',12=>'false',24=>'true'),array(3=>4165,8=>'Win7'),array(3=>4192,8=>'Linux',12=>'false'),array(3=>4213,8=>'SymbianOS',12=>'false',24=>'true'),array(3=>4211,8=>'MacOSX',12=>'false'),array(3=>4213,8=>'MacOSX',12=>'false'),array(3=>4210,8=>'MacOSX',12=>'false'),array(3=>4210,8=>'SymbianOS',12=>'false',24=>'true'),array(3=>4199,8=>'Linux',12=>'false'),array(3=>3755,8=>'Win7'),array(3=>4212,8=>'MacOSX',12=>'false'),array(3=>3998,8=>'Linux',12=>'false'),array(3=>4043,8=>'Linux',12=>'false'),array(3=>4283,8=>'Linux',12=>'false'),array(3=>4015,8=>'Linux',12=>'false'),array(3=>4037,8=>'Linux',12=>'false'),array(3=>3872,8=>'MacOSX',12=>'false'),array(3=>4277,8=>'Linux',12=>'false'),array(3=>4275,8=>'Linux',12=>'false'),array(3=>4024,8=>'Linux',12=>'false'),array(3=>4026,8=>'Linux',12=>'false'),array(3=>3994,8=>'Linux',12=>'false'),array(3=>4274,8=>'MacOSX',12=>'false'),array(3=>4044,8=>'Linux',12=>'false'),array(3=>4010,8=>'Linux',12=>'false'),array(3=>4273,8=>'MacOSX',12=>'false'),array(3=>4282,8=>'Linux',12=>'false'),array(3=>4276,8=>'Linux',12=>'false'),array(3=>4288,8=>'Linux',12=>'false'),array(3=>4256,8=>'Linux',12=>'false'),array(3=>4287,8=>'Linux',12=>'false'),array(3=>4289,8=>'Linux',12=>'false'),array(3=>4286,8=>'Linux',12=>'false'),array(3=>4045,8=>'Linux',12=>'false'),array(3=>4367,8=>'Linux',12=>'false'),array(3=>4093,8=>'Win7',12=>'false',13=>'true'),array(3=>3755,8=>'Linux'),array(3=>4093,8=>'WinXP',12=>'false',13=>'true'),array(3=>4093,8=>'Win2003',12=>'false',13=>'true'),array(3=>4093,8=>'WinVista',12=>'false',13=>'true'),array(3=>4366,8=>'Linux',12=>'false'),array(3=>4252,8=>'MacOSX',12=>'false'),array(3=>4238,8=>'MacOSX',12=>'false'),array(3=>3933,8=>'Linux',12=>'false'),array(3=>4192,8=>'Linux',12=>'false'),array(3=>4520,5=>'1.7',6=>1,7=>7,8=>'Linux'),array(3=>4198,8=>'Linux',12=>'false'),array(3=>4199,8=>'Linux',12=>'false'),array(3=>4374,8=>'Linux',12=>'false'),array(3=>4373,8=>'Linux',12=>'false'),array(3=>4205,8=>'Linux',12=>'false'),array(3=>3777,4=>'Setooz'),array(3=>4212,8=>'CentOS',12=>'false'),array(3=>4213,8=>'CentOS',12=>'false'),array(3=>4478,8=>'WinVista',12=>'false',13=>'true'),array(3=>4478,8=>'Win7',12=>'false',13=>'true'),array(3=>4485,8=>'WinVista',12=>'false',13=>'true'),array(3=>4049,8=>'WinXP',12=>'false',13=>'true'),array(3=>4478,8=>'WinXP',12=>'false',13=>'true'),array(3=>4211,8=>'CentOS',12=>'false'),array(3=>4049,8=>'Win2003',12=>'false',13=>'true'),array(3=>4252,8=>'WinME'),array(3=>3603,4=>'Podtech Network'),array(3=>4177,8=>'Linux',12=>'false'),array(3=>3953,8=>'MacOSX',12=>'false'),array(3=>4049,8=>'WinVista',12=>'false',13=>'true'),array(3=>4478,8=>'Win2000',12=>'false',13=>'true'),array(3=>4485,8=>'Win7',12=>'false',13=>'true'),array(3=>4478,8=>'WinXP',12=>'false',13=>'true'),array(3=>4049,8=>'Win7',12=>'false',13=>'true'),array(3=>4178,8=>'Linux',12=>'false'),array(3=>4238,8=>'WinME'),array(3=>4210,8=>'CentOS',12=>'false'),array(3=>4130,8=>'WinVista',12=>'false',13=>'true'),array(3=>3296,8=>'Win7'),array(3=>3714,8=>'Win7'),array(3=>4130,8=>'Win2003',12=>'false',13=>'true'),array(3=>4130,8=>'Win7',12=>'false',13=>'true'),array(3=>4211,8=>'Linux'),array(3=>4273,8=>'Linux',12=>'false'),array(3=>4210,8=>'Linux'),array(3=>3872,8=>'Linux',12=>'false'),array(3=>4130,8=>'WinXP',12=>'false',13=>'true'),array(3=>3714,8=>'Win2000'),array(3=>3714,8=>'WinXP'),array(3=>4274,8=>'Linux',12=>'false'),array(3=>3714,8=>'Win2003'),array(3=>3714,8=>'WinVista'),array(3=>3299,8=>'Win7'),array(3=>3299,8=>'WinNT'),array(3=>3299,8=>'Win2003'),array(3=>3296,8=>'WinVista'),array(3=>3705,8=>'Win2000'),array(3=>3705,8=>'Win7'),array(3=>4168,8=>'MacOSX',12=>'false'),array(3=>3755,8=>'Linux'),array(3=>3713,8=>'Win2000'),array(3=>3705,8=>'WinVista'),array(3=>3705,8=>'Win2003'),array(3=>3933,8=>'Linux',12=>'false'),array(3=>3705,8=>'WinXP'),array(3=>3713,8=>'WinVista'),array(3=>4157,8=>'MacOSX',12=>'false'),array(3=>4121,8=>'Win7',12=>'false',13=>'true'),array(3=>3713,8=>'WinXP'),array(3=>4212,8=>'Linux'),array(3=>3713,8=>'Win2003'),array(3=>4121,8=>'WinXP',12=>'false',13=>'true'),array(3=>4162,8=>'MacOSX',12=>'false'),array(3=>4121,8=>'WinVista',12=>'false',13=>'true'),array(3=>4121,8=>'Win2003',12=>'false',13=>'true'),array(3=>3606,4=>'FriendFeedBot'),array(3=>4213,8=>'Linux'),array(3=>4165,8=>'MacOSX',12=>'false'),array(3=>3713,8=>'Win7'),array(3=>3296,8=>'Win7'),array(3=>4293,5=>'2.0',6=>2,7=>0),array(3=>3657,4=>'SuchbaerBot'),array(3=>4293,5=>'3.0',6=>3,7=>0,8=>'Debian',27=>2),array(3=>4527,4=>'Yahoo-MMCrawler',5=>'4.0',6=>4,7=>0),array(3=>3296,8=>'WinXP'),array(3=>3296,8=>'Win7'),array(3=>3875,8=>'WinXP'),array(3=>3875,8=>'Win2000'),array(3=>4093,8=>'Win2003'),array(3=>3799,8=>'Win2000'),array(3=>4093,8=>'WinXP'),array(3=>3852,8=>'Linux'),array(3=>3875,8=>'Win7'),array(3=>3799,8=>'Win2003'),array(3=>3799,8=>'WinXP'),array(3=>3799,8=>'WinVista'),array(3=>3799,8=>'Win7'),array(3=>3875,8=>'Win2003'),array(3=>3875,8=>'WinVista'),array(3=>4093,8=>'Win2000'),array(3=>4093,8=>'WinVista'),array(3=>4093,8=>'Win7'),array(3=>3833,8=>'WinVista'),array(3=>3855,4=>'BinaryCanary',5=>'1.0',6=>1,7=>0),array(3=>3833,8=>'Win2003'),array(3=>3833,8=>'WinXP'),array(3=>3833,8=>'Win2000'),array(3=>4472,8=>'Win7',12=>'false',13=>'true'),array(3=>3279,4=>'HistoryHound'),array(3=>3833,8=>'Win7'),array(3=>4293,5=>'3.5',6=>3,7=>5),array(3=>4049,8=>'Win7'),array(3=>3800,8=>'Linux'),array(3=>4049,8=>'Win2000'),array(3=>3603,4=>'NewsMonster'),array(3=>3713,8=>'MacOSX',12=>'false'),array(3=>4049,8=>'Win2003'),array(3=>3770,8=>'WinVista'),array(3=>3800,8=>'FreeBSD'),array(3=>4049,8=>'WinXP'),array(3=>3792,8=>'Linux'),array(3=>3792,8=>'FreeBSD'),array(3=>4049,8=>'WinVista'),array(3=>3657,4=>'Adobe Dialog Manager',8=>'MacOSX'),array(3=>3770,8=>'Win2000'),array(3=>3836,4=>'Yahoo!',23=>'true',26=>'true'),array(3=>4472,8=>'Win2003',12=>'false',13=>'true'),array(3=>3606,4=>'Cocoalicious'),array(3=>4474,5=>'2.0',6=>2,7=>0),array(3=>3770,8=>'WinXP'),array(3=>3705,8=>'MacOSX',12=>'false'),array(3=>3770,8=>'Win7'),array(3=>4112,5=>'5.0',6=>5,7=>0),array(3=>3714,8=>'MacOSX',12=>'false'),array(3=>3770,8=>'WinXP'),array(3=>3833,8=>'MacOSX',12=>'false'),array(3=>3875,8=>'MacOSX',12=>'false'),array(3=>4490,5=>'1.0',6=>1,7=>0),array(3=>4490,5=>'2.0',6=>2,7=>0),array(3=>3792,8=>'Win',12=>'true'),array(3=>4130,8=>'WinXP'),array(3=>3792,8=>'NetBSD'),array(3=>4130,8=>'Win2003'),array(3=>4130,8=>'Win2000'),array(3=>4478,8=>'Win7',12=>'false',13=>'true'),array(3=>3831,4=>'Simpy'),array(3=>3777,4=>'ActiveTouristBot'),array(3=>4121,8=>'WinVista'),array(3=>4261),array(3=>4121,8=>'Win2003'),array(3=>4121,8=>'WinXP'),array(3=>4485,8=>'Win7',12=>'false',13=>'true'),array(3=>3606,4=>'OneRiot',23=>'true'),array(3=>4478,8=>'WinXP',12=>'false',13=>'true'),array(3=>3924,5=>'1.0',6=>1,7=>0,8=>'WinXP'),array(3=>3777,4=>'Vagabondo'),array(3=>3924,5=>'1.0',6=>1,7=>0,8=>'Win2000'),array(3=>4478,8=>'Win2000',12=>'false',13=>'true'),array(3=>4130,8=>'WinVista'),array(3=>3924,5=>'1.0',6=>1,7=>0,8=>'Win2003'),array(3=>4130,8=>'Win7'),array(3=>3911,5=>'1.0',6=>1,7=>0,8=>'Win2000'),array(3=>4478,8=>'WinXP',12=>'false',13=>'true'),array(3=>3916,8=>'Win7'),array(3=>3792,8=>'Debian'),array(3=>3916,8=>'WinVista'),array(3=>3911,5=>'1.0',6=>1,7=>0,8=>'WinXP'),array(3=>3800,8=>'Debian'),array(3=>3800,8=>'Win'),array(3=>3911,8=>'WinVista'),array(3=>3911,5=>'1.0',6=>1,7=>0,8=>'WinXP'),array(3=>3911,8=>'Win7'),array(3=>3800,8=>'NetBSD'),array(3=>4485,8=>'WinVista',12=>'false',13=>'true'),array(3=>3915,5=>'1.0',6=>1,7=>0,8=>'WinXP'),array(3=>3915,5=>'1.0',6=>1,7=>0,8=>'Win2000'),array(3=>4478,8=>'WinVista',12=>'false',13=>'true'),array(3=>3799,8=>'MacOSX',12=>'false'),array(3=>3603,4=>'FeedParser'),array(3=>4093,8=>'MacOSX',12=>'false'),array(3=>3915,5=>'1.0',6=>1,7=>0,8=>'Win2003'),array(3=>3916,5=>'1.0',6=>1,7=>0,8=>'Win2003'),array(3=>3916,5=>'1.0',6=>1,7=>0,8=>'WinXP'),array(3=>3916,5=>'1.0',6=>1,7=>0,8=>'Win2000'),array(3=>4156,8=>'WinVista'),array(3=>4156,8=>'Win7'),array(3=>4083,8=>'WinVista'),array(3=>4158,8=>'WinVista'),array(3=>3833,8=>'WinME'),array(3=>3875,8=>'WinME'),array(3=>3799,8=>'WinME'),array(3=>4069,8=>'WinXP'),array(3=>4069,8=>'Win2003'),array(3=>4158,8=>'Win7'),array(3=>4069,8=>'WinVista'),array(3=>4156,8=>'WinXP'),array(3=>4069,8=>'Win7'),array(3=>3770,12=>'false'),array(3=>4121,8=>'Win7'),array(3=>4121,8=>'Win2000'),array(3=>4521,8=>'SymbianOS'),array(3=>4376,4=>'FacebookExternalHit'),array(3=>4432,4=>'Webaroo'),array(3=>4049,8=>'MacOSX',12=>'false'),array(3=>3821,8=>'Win7'),array(3=>3754,8=>'WinME'),array(3=>3737),array(3=>3657,4=>'LegalAnalysisAgent',23=>'true'),array(3=>4130,8=>'MacOSX',12=>'false'),array(3=>3825,8=>'WinXP'),array(3=>3824,8=>'Debian'),array(3=>3825,8=>'Win7'),array(3=>3657,4=>'80Legs'),array(3=>3762,8=>'WinME'),array(3=>4083,8=>'Win2000'),array(3=>3603,4=>'Tumblr RSS syndication'),array(3=>3299,8=>'WinVista',12=>'false',13=>'true'),array(3=>3794,8=>'Win7'),array(3=>3832,8=>'WinXP'),array(3=>4121,8=>'MacOSX',12=>'false'),array(3=>3780,8=>'WinME'),array(3=>3794,8=>'WinXP'),array(3=>3794,8=>'WinVista'),array(3=>3832,8=>'WinVista'),array(3=>3657,4=>'Plukkie'),array(3=>3563,4=>'Webscan'),array(3=>3821,8=>'WinVista'),array(3=>3821,8=>'WinXP'),array(3=>4083,8=>'Win2003'),array(3=>3832,8=>'Win7'),array(3=>4083,8=>'WinXP'),array(3=>3825,8=>'WinVista'),array(3=>3748,8=>'WinME'),array(3=>3830,8=>'WinVista'),array(3=>3830,8=>'Win7'),array(3=>3784,8=>'WinME'),array(3=>4069,8=>'Win2000'),array(3=>3830,8=>'WinXP'),array(3=>3824,8=>'FreeBSD'),array(3=>4069,8=>'MacOSX',12=>'false'),array(3=>3824,8=>'Linux'),array(3=>3824,8=>'NetBSD'),array(3=>3603,4=>'Newz Crawler'),array(3=>3833,8=>'Linux',12=>'false'),array(3=>3713,8=>'Linux',12=>'false'),array(3=>3714,8=>'Linux',12=>'false'),array(3=>3705,8=>'Linux',12=>'false'),array(3=>3788,4=>'Pandora'),array(3=>3799,8=>'Linux',12=>'false'),array(3=>4083,8=>'MacOSX',12=>'false'),array(3=>3770,8=>'MacOSX',12=>'false'),array(3=>4112,27=>1),array(3=>3770,8=>'SymbianOS',12=>'false',24=>'true'),array(3=>3604,8=>'Win7',12=>'false',13=>'true'),array(3=>4533,5=>'2.1',6=>2,7=>1,27=>1),array(3=>4302,4=>'MS IPPPD'),array(3=>4069,8=>'WinME'),array(3=>3657,4=>'JadynAveBot',23=>'true'),array(3=>4083,8=>'WinME'),array(3=>4533,5=>'3.0',6=>3,7=>1,27=>1),array(3=>4533,5=>'2.0',6=>2,7=>0,27=>1),array(3=>3777,4=>'Lipperhey Spider'),array(3=>4533,5=>'3.1',6=>3,7=>1,27=>1),array(3=>4339,4=>'NetcraftSurveyAgent'),array(3=>3777,4=>'MojeekBot'),array(3=>3797,4=>'RealPlayer',8=>'MacOSX'),array(3=>4083,8=>'WinXP'),array(3=>3657,4=>'SEOprofiler'),array(3=>4549,4=>'BingBot'),array(3=>3777,4=>'Atrax Solutions'),array(3=>4421,8=>'MacOSX'),array(3=>3924,5=>'1.0',6=>1,7=>0,8=>'WinNT'),array(3=>3603,4=>'Rojo'),array(3=>4032,8=>'MacOSX',12=>'false'),array(3=>3603,4=>'Rojo'),array(3=>3915,5=>'1.0',6=>1,7=>0,8=>'WinNT'),array(3=>3916,5=>'1.0',6=>1,7=>0,8=>'WinNT'),array(3=>3777,4=>'DBLBot',5=>'1.0',6=>1,7=>0),array(3=>4131,4=>'CC Metadata Scaper'),array(3=>3777,4=>'Inxight Software'),array(3=>4165,8=>'Android',12=>'false'),array(3=>3770,8=>'CentOS',12=>'false'),array(3=>4478,8=>'WinXP'),array(3=>4478,8=>'WinVista'),array(3=>4478,8=>'Win7'),array(3=>4478,8=>'Win2000'),array(3=>3831,4=>'Web Link Validator',12=>'true'),array(3=>4032,8=>'Win7',12=>'false',13=>'true'),array(3=>3788,4=>'rssImagesBot'),array(3=>4485,8=>'WinVista'),array(3=>4485,8=>'WinXP'),array(3=>4032,8=>'Win2003',12=>'false',13=>'true'),array(3=>4472,8=>'WinXP'),array(3=>4485,8=>'WinXP'),array(3=>4485,8=>'Win7'),array(3=>4032,8=>'WinVista',12=>'false',13=>'true'),array(3=>3875,8=>'Win98',12=>'false'),array(3=>4478,8=>'WinXP'),array(3=>4472,8=>'WinXP'),array(3=>3833,8=>'Win98'),array(3=>3799,8=>'Win98'),array(3=>4032,8=>'WinXP',12=>'false',13=>'true'),array(3=>4069,8=>'WinNT'),array(3=>4472,8=>'WinVista'),array(3=>4478,8=>'Win7'),array(3=>3961,8=>'Win2000'),array(3=>3961,8=>'WinXP'),array(3=>3770,8=>'Linux',12=>'false'),array(3=>4503),array(3=>4093,8=>'OpenBSD',12=>'false'),array(3=>3961,8=>'WinVista'),array(3=>3961,8=>'Win7'),array(3=>3961,8=>'WinNT'),array(3=>4083,8=>'WinNT'),array(3=>4093,8=>'FreeBSD',12=>'false'),array(3=>3961,8=>'Win2003'),array(3=>3953,8=>'WinVista'),array(3=>3960,8=>'Win2003'),array(3=>3960,8=>'WinXP'),array(3=>3960,8=>'Win2000'),array(3=>3960,8=>'WinVista'),array(3=>3875,8=>'FreeBSD',12=>'false'),array(3=>3953,8=>'WinXP'),array(3=>3953,8=>'Win2000'),array(3=>3953,8=>'WinNT'),array(3=>3960,8=>'WinNT'),array(3=>3935,8=>'Win7'),array(3=>3935,8=>'WinNT'),array(3=>4422,5=>'1.5',6=>1,7=>5),array(3=>3833,8=>'FreeBSD',12=>'false'),array(3=>3792),array(3=>3935,8=>'Win2000'),array(3=>3935,8=>'WinVista'),array(3=>3935,8=>'WinXP'),array(3=>3935,8=>'WinXP'),array(3=>3953,8=>'Win2003'),array(3=>3960,8=>'Win7'),array(3=>4032,8=>'OpenBSD',12=>'false'),array(3=>4032,8=>'FreeBSD',12=>'false'),array(3=>3953,8=>'Win7'),array(3=>3799,8=>'FreeBSD',12=>'false'),array(3=>3800),array(3=>4385,8=>'WinXP'),array(3=>4385,8=>'Win2000'),array(3=>4385,8=>'Win2003'),array(3=>4385,8=>'WinVista'),array(3=>3299,8=>'WinVista'),array(3=>3960,8=>'MacOSX'),array(3=>4413,8=>'WinME'),array(3=>3657,4=>'Twingly Recon'),array(3=>3916,5=>'1.0',6=>1,7=>0,8=>'Win95'),array(3=>4011,8=>'Win7',12=>'false',13=>'true'),array(3=>4472,8=>'WinME'),array(3=>4011,8=>'WinVista',12=>'false',13=>'true'),array(3=>4011,8=>'Win2003',12=>'false',13=>'true'),array(3=>4021,8=>'MacOSX',12=>'false'),array(3=>4049,8=>'OpenBSD',12=>'false'),array(3=>4011,8=>'WinXP',12=>'false',13=>'true'),array(3=>4385,8=>'Win7'),array(3=>3924,5=>'1.0',6=>1,7=>0,8=>'Win98'),array(3=>4049,8=>'FreeBSD',12=>'false'),array(3=>3953,8=>'MacOSX',12=>'false'),array(3=>4302,4=>'MS IPP'),array(3=>3299,8=>'WinXP'),array(3=>4093,8=>'Linux',12=>'false'),array(3=>4093,8=>'IRIX64',12=>'false'),array(3=>3924,5=>'1.0',6=>1,7=>0,8=>'Win95'),array(3=>3915,5=>'1.0',6=>1,7=>0,8=>'Win98'),array(3=>3915,5=>'1.0',6=>1,7=>0,8=>'Win95'),array(3=>3916,5=>'1.0',6=>1,7=>0,8=>'Win98'),array(3=>4032,8=>'IRIX64',12=>'false'),array(3=>3777,4=>'Knight'),array(3=>4419,8=>'WinME'),array(3=>3833,8=>'SunOS',12=>'false'),array(3=>3799,8=>'SunOS',12=>'false'),array(3=>4021,8=>'WinVista',12=>'false',13=>'true'),array(3=>4032,8=>'SunOS',12=>'false'),array(3=>3875,8=>'Linux',12=>'false'),array(3=>4021,8=>'WinXP',12=>'false',13=>'true'),array(3=>4021,8=>'Win2003',12=>'false',13=>'true'),array(3=>4032,8=>'HP-UX',12=>'false'),array(3=>3875,8=>'SunOS',12=>'false'),array(3=>4021,8=>'Win7',12=>'false',13=>'true'),array(3=>4508,8=>'WinME'),array(3=>3883),array(3=>3657,4=>'Europe Web Archive'),array(3=>4130,8=>'OpenBSD',12=>'false'),array(3=>3868),array(3=>4049,8=>'Linux',12=>'false'),array(3=>4130,8=>'FreeBSD',12=>'false'),array(3=>4121,8=>'OpenBSD',12=>'false'),array(3=>4069,8=>'Win98'),array(3=>4121,8=>'FreeBSD',12=>'false'),array(3=>4069,8=>'Win95'),array(3=>3831,4=>'LinkTiger',23=>'true'),array(3=>3831,4=>'NetPromoter Link Utility'),array(3=>4049,8=>'IRIX64',12=>'false'),array(3=>3657,4=>'UnWrap'),array(3=>3657,4=>'roboo'),array(3=>4093,8=>'SunOS',12=>'false'),array(3=>3874),array(3=>4093,8=>'HP-UX',12=>'false'),array(3=>4083,12=>'false'),array(3=>3824),array(3=>3754,8=>'WinNT'),array(3=>3855,4=>'Gomez Site Monitor'),array(3=>3960,8=>'WinME'),array(3=>3754,8=>'Win2000'),array(3=>3784,8=>'Win7'),array(3=>3784,8=>'WinVista'),array(3=>3784,8=>'WinXP'),array(3=>3784,8=>'Win2000'),array(3=>3748,8=>'WinVista'),array(3=>3953,8=>'WinME'),array(3=>4021,8=>'OpenBSD',12=>'false'),array(3=>3780,8=>'WinXP'),array(3=>3961,8=>'WinME'),array(3=>3780,8=>'Win2000'),array(3=>3780,8=>'WinNT'),array(3=>3784,8=>'WinNT'),array(3=>3737,8=>'Win7'),array(3=>3780,8=>'Win7'),array(3=>3737,8=>'Win2000'),array(3=>3780,8=>'WinVista'),array(3=>3737,8=>'WinXP'),array(3=>3737,8=>'WinVista'),array(3=>3737,8=>'WinNT'),array(3=>3754,8=>'Win7'),array(3=>3657,4=>'ClixSense',23=>'true'),array(3=>4099,8=>'Win7'),array(3=>3762,8=>'Win7'),array(3=>4130,8=>'IRIX64',12=>'false'),array(3=>4099,8=>'Win2000'),array(3=>4496,8=>'WinME'),array(3=>4049,8=>'HP-UX',12=>'false'),array(3=>4479,8=>'WinME'),array(3=>3604,8=>'Win7'),array(3=>4049,8=>'SunOS',12=>'false'),array(3=>3762,8=>'WinVista'),array(3=>3657,4=>'Diffbot'),array(3=>3748,8=>'Win2000'),array(3=>3657,4=>'Healthdash'),array(3=>4099,8=>'WinXP'),array(3=>4130,8=>'Linux',12=>'false'),array(3=>3604,8=>'WinXP'),array(3=>4099,8=>'WinXP'),array(3=>3603,4=>'TailRank'),array(3=>3754,8=>'WinXP'),array(3=>3657,4=>'SEODat'),array(3=>4099,8=>'WinVista'),array(3=>3748,8=>'WinNT'),array(3=>3748,8=>'WinXP'),array(3=>3762,8=>'WinXP'),array(3=>4121,8=>'IRIX64',12=>'false'),array(3=>3788,4=>'WebImages'),array(3=>4472,8=>'WinXP',12=>'false',13=>'true'),array(3=>3762,8=>'Win2000'),array(3=>4121,8=>'Linux',12=>'false'),array(3=>4069,8=>'OpenBSD',12=>'false'),array(3=>4472,8=>'WinXP',12=>'false',13=>'true'),array(3=>3754,8=>'WinXP'),array(3=>3754,8=>'WinVista'),array(3=>4083,8=>'Win95'),array(3=>3762,8=>'WinNT'),array(3=>4083,8=>'Win98'),array(3=>4069,8=>'FreeBSD',12=>'false'),array(3=>3762,8=>'WinXP'),array(3=>4355,5=>'8.0',6=>8,7=>0),array(3=>4355,5=>'6.0',6=>6,7=>0),array(3=>3914,8=>'Win7',12=>'false',13=>'true'),array(3=>4355,5=>'7.0',6=>7,7=>0),array(3=>3777,4=>'ScoutJet',23=>'true'),array(3=>3892,8=>'WinXP',12=>'false',13=>'true'),array(3=>3892,8=>'Win2003',12=>'false',13=>'true'),array(3=>3914,8=>'Win8',13=>'true'),array(3=>3914,8=>'WinVista',12=>'false',13=>'true'),array(3=>4121,8=>'SunOS',12=>'false'),array(3=>3892,8=>'Win7',12=>'false',13=>'true'),array(3=>3914,8=>'Win2003',12=>'false',13=>'true'),array(3=>3892,8=>'Win8',13=>'true'),array(3=>4121,8=>'HP-UX',12=>'false'),array(3=>3657,4=>'aiHitBot'),array(3=>3914,8=>'WinXP',12=>'false',13=>'true'),array(3=>3935,8=>'WinME'),array(3=>3892,8=>'WinVista',12=>'false',13=>'true'),array(3=>4547,5=>'2.8',6=>2,7=>8,8=>'MacOSX'),array(3=>4130,8=>'HP-UX',12=>'false'),array(3=>4083,8=>'FreeBSD',12=>'false'),array(3=>4069,8=>'IRIX64',12=>'false'),array(3=>3563,4=>'e-SocietyRobot'),array(3=>3984,8=>'WinXP',12=>'false',13=>'true'),array(3=>4130,8=>'SunOS',12=>'false'),array(3=>3953,8=>'WinME'),array(3=>3961,8=>'WinME'),array(3=>4432,4=>'Webaroo'),array(3=>4083,8=>'OpenBSD',12=>'false'),array(3=>3984,8=>'Win2003',12=>'false',13=>'true'),array(3=>3984,8=>'Win7',12=>'false',13=>'true'),array(3=>3984,8=>'Win8',13=>'true'),array(3=>4479,8=>'WinXP',12=>'false',13=>'true'),array(3=>4479,8=>'WinXP',12=>'false',13=>'true'),array(3=>4021,8=>'IRIX64',12=>'false'),array(3=>4069,8=>'Linux',12=>'false'),array(3=>3707,4=>'BOTW Feed Grabber',25=>'true'),array(3=>3984,8=>'WinVista',12=>'false',13=>'true'),array(3=>3708,4=>'Search Engine World HTML Validator'),array(3=>4069,8=>'SunOS',12=>'false'),array(3=>4001,8=>'WinVista',12=>'false',13=>'true'),array(3=>4001,8=>'Win8',13=>'true'),array(3=>4069,8=>'OS/2',12=>'false'),array(3=>4124,8=>'WinXP',12=>'false',13=>'true'),array(3=>4001,8=>'Win2003',12=>'false',13=>'true'),array(3=>4124,8=>'WinVista',12=>'false',13=>'true'),array(3=>4124,8=>'Win8',13=>'true'),array(3=>4006,8=>'WinXP',12=>'false',13=>'true'),array(3=>4006,8=>'Win2003',12=>'false',13=>'true'),array(3=>4069,8=>'Linux',12=>'false'),array(3=>4006,8=>'WinVista',12=>'false',13=>'true'),array(3=>4124,8=>'Win7',12=>'false',13=>'true'),array(3=>4001,8=>'WinXP',12=>'false',13=>'true'),array(3=>4124,8=>'Win2003',12=>'false',13=>'true'),array(3=>4006,8=>'Win7',12=>'false',13=>'true'),array(3=>4069,8=>'HP-UX',12=>'false'),array(3=>4018,8=>'WinVista',12=>'false',13=>'true'),array(3=>4018,8=>'WinXP',12=>'false',13=>'true'),array(3=>4001,8=>'Win7',12=>'false',13=>'true'),array(3=>4083,8=>'Linux',12=>'false'),array(3=>4083,8=>'IRIX64',12=>'false'),array(3=>4006,8=>'Win8',13=>'true'),array(3=>4032,8=>'Win2000'),array(3=>4032,8=>'WinXP'),array(3=>4032,8=>'Win7'),array(3=>4021,8=>'SunOS',12=>'false'),array(3=>4032,8=>'WinVista'),array(3=>4032,8=>'Win2003'),array(3=>3603,4=>'FeedOnFeeds',5=>'0.1',6=>0,7=>1),array(3=>4018,8=>'Win2003',12=>'false',13=>'true'),array(3=>3961,8=>'MacOSX',12=>'false'),array(3=>3831,4=>'Link Commander',5=>'3.0',6=>3,7=>0,8=>'Win32'),array(3=>4018,8=>'Win8',13=>'true'),array(3=>4018,8=>'Win7',12=>'false',13=>'true'),array(3=>3657,4=>'Crawly',23=>'true'),array(3=>3777,4=>'TwengaBot-Discover'),array(3=>3784,8=>'WinME'),array(3=>3748,8=>'WinME'),array(3=>3762,8=>'WinME'),array(3=>3780,8=>'WinME'),array(3=>3657,4=>'Seznam screenshot-generator',23=>'true'),array(3=>3657,4=>'OpenTaggerBot'),array(3=>3754,8=>'WinME'),array(3=>3737,8=>'WinME'),array(3=>3953,8=>'Win7'),array(3=>3960,8=>'Win2003'),array(3=>3960,8=>'WinXP'),array(3=>3960,8=>'WinVista'),array(3=>3960,8=>'Win7'),array(3=>3953,8=>'WinNT'),array(3=>3960,8=>'Win2000'),array(3=>3960,8=>'WinNT'),array(3=>3935,8=>'WinXP'),array(3=>3935,8=>'Win2000'),array(3=>3935,8=>'WinXP'),array(3=>3935,8=>'WinVista'),array(3=>3935,8=>'Win7'),array(3=>3953,8=>'Win2000'),array(3=>3953,8=>'WinXP'),array(3=>4083,8=>'MacPPC',12=>'false'),array(3=>3961,8=>'Win7'),array(3=>4083,8=>'OS/2',12=>'false'),array(3=>4083,8=>'HP-UX',12=>'false'),array(3=>4083,8=>'SunOS',12=>'false'),array(3=>3961,8=>'Win2003'),array(3=>3961,8=>'WinXP'),array(3=>3953,8=>'WinVista'),array(3=>3953,8=>'Win2003'),array(3=>3961,8=>'WinNT'),array(3=>3961,8=>'Win2000'),array(3=>4414,4=>'OffByOne',5=>'3.0',6=>3,7=>0),array(3=>3935,8=>'WinNT'),array(3=>3961,8=>'WinVista'),array(3=>4079,8=>'WinXP'),array(3=>4079,8=>'Win2000'),array(3=>3606,4=>'Twitturls',23=>'true'),array(3=>3777,4=>'InfociousBot',23=>'true'),array(3=>3737),array(3=>3754,8=>'Win95'),array(3=>4089,8=>'Win2000'),array(3=>4092,8=>'Win2000'),array(3=>3603,4=>'RSSMicro'),array(3=>3737,8=>'Win95'),array(3=>3784,8=>'Win98'),array(3=>4094,8=>'WinXP'),array(3=>3762,8=>'Win98'),array(3=>4135,8=>'Win2003'),array(3=>4135,8=>'WinXP'),array(3=>4135,8=>'Win2000'),array(3=>3762,8=>'Win95'),array(3=>3780,8=>'Win98'),array(3=>4092,8=>'WinXP'),array(3=>4094,8=>'Win2003'),array(3=>3780,8=>'Win95'),array(3=>4089,8=>'WinXP'),array(3=>4094,8=>'Win2000'),array(3=>4032,8=>'Linux',12=>'false'),array(3=>4011,8=>'Win7'),array(3=>3754,8=>'Win98'),array(3=>4056,8=>'Win2003'),array(3=>4056,8=>'WinXP'),array(3=>4257),array(3=>4011,8=>'WinVista'),array(3=>4011,8=>'WinXP'),array(3=>4011,8=>'Win2003'),array(3=>3748,8=>'Win98'),array(3=>3748,8=>'Win95'),array(3=>3831,4=>'onCHECK Linkchecker'),array(3=>3784,8=>'Win95'),array(3=>4547,5=>'4.2',6=>4,7=>2,8=>'MacOSX'),array(3=>4011,8=>'Win2000'),array(3=>3657,4=>'Ezooms',5=>'1.0',6=>1,7=>0),array(3=>4547,5=>'2.9',6=>2,7=>9,8=>'MacOSX'),array(3=>4056,8=>'Win2000'),array(3=>3548,5=>'1.0',6=>1,7=>0,8=>'Linux'),array(3=>3831,4=>'smartBot'),array(3=>3039,12=>'true'),array(3=>4021,8=>'WinXP'),array(3=>4021,8=>'Win2003'),array(3=>4083,8=>'Linux',12=>'false'),array(3=>4021,8=>'HP-UX',12=>'false'),array(3=>4257),array(3=>4021,8=>'WinVista'),array(3=>3657,4=>'Healthbot',23=>'true'),array(3=>3777,4=>'Linguee Bot'),array(3=>4021,8=>'Win2000'),array(3=>3603,4=>'FeedFetcher',5=>'0.0',6=>0,7=>0),array(3=>4021,8=>'Win7'),array(3=>4079,8=>'MacOSX',12=>'false'),array(3=>4549,4=>'msnbot-webmaster tools'),array(3=>4089,8=>'MacOSX',12=>'false'),array(3=>4094,8=>'MacOSX',12=>'false'),array(3=>4056,8=>'MacOSX',12=>'false'),array(3=>4021,8=>'FreeBSD',12=>'false'),array(3=>4549,4=>'msnbot-NewsBlogs',5=>'2.0',6=>2,7=>0),array(3=>4135,8=>'MacOSX',12=>'false'),array(3=>4092,8=>'MacOSX',12=>'false'),array(3=>3741,5=>'4.0',6=>4,7=>0),array(3=>3693,8=>'MacOSX'),array(3=>3953,8=>'Win98'),array(3=>3960,8=>'Win98'),array(3=>3961,8=>'Win98'),array(3=>4547,5=>'3.0',6=>3,7=>0,8=>'MacOSX',27=>2),array(3=>3777,4=>'DuckDuckBot'),array(3=>3935,8=>'Win98'),array(3=>3892,8=>'Win7'),array(3=>3892,8=>'Win8'),array(3=>3914,8=>'Win8'),array(3=>3892,8=>'Win2003'),array(3=>3892,8=>'WinVista'),array(3=>3914,8=>'Win7'),array(3=>3914,8=>'WinXP'),array(3=>3914,8=>'Win2003'),array(3=>3892,8=>'WinXP'),array(3=>3914,8=>'Win2000'),array(3=>4419,8=>'Win2000'),array(3=>3914,8=>'WinVista'),array(3=>3603,4=>'Mobitype',8=>'Win32'),array(3=>4474,5=>'1.0',6=>1,7=>0),array(3=>3984,8=>'Win2000'),array(3=>4472,8=>'Win2000'),array(3=>4474,5=>'0.9',6=>0,7=>9,10=>'true'),array(3=>3707,4=>'BOTW Spider',23=>'true'),array(3=>4135,8=>'WinME'),array(3=>3984,8=>'WinXP'),array(3=>3984,8=>'Win2003'),array(3=>4413,8=>'Win2000'),array(3=>4302,4=>'MS IPP DAV'),array(3=>3984,8=>'Win8'),array(3=>3984,8=>'Win7'),array(3=>3984,8=>'WinVista'),array(3=>3892,8=>'Win2000'),array(3=>4089,8=>'WinME'),array(3=>4092,8=>'WinME'),array(3=>3961,8=>'Win95'),array(3=>4547,5=>'2.8',6=>2,7=>8,8=>'MacPPC'),array(3=>4547,5=>'2.7',6=>2,7=>7,8=>'MacPPC'),array(3=>4474,5=>'0.7',6=>0,7=>7,10=>'true'),array(3=>4547,5=>'2.7',6=>2,7=>7,8=>'Mac68K'),array(3=>3961,8=>'MacPPC',12=>'false'),array(3=>4547,5=>'2.9',6=>2,7=>9,8=>'MacPPC'),array(3=>3953,8=>'MacPPC',12=>'false'),array(3=>4474,5=>'0.8',6=>0,7=>8,10=>'true'),array(3=>3953,8=>'Win95'),array(3=>3960,8=>'Win95'),array(3=>4094,8=>'WinME'),array(3=>3960,8=>'MacPPC',12=>'false'),array(3=>4474,5=>'1.5',6=>1,7=>5,8=>'MacOSX'),array(3=>4474,5=>'1.6',6=>1,7=>6,8=>'MacOSX'),array(3=>3039,12=>'true'),array(3=>3935,8=>'MacPPC',12=>'false'),array(3=>4021,8=>'Linux',12=>'false'),array(3=>3935,8=>'Win95'),array(3=>4056,8=>'WinME'),array(3=>4079,8=>'WinME'),array(3=>4474,5=>'1.2',6=>1,7=>2),array(3=>4474,5=>'1.4',6=>1,7=>4,8=>'MacOSX'),array(3=>4474,5=>'1.3',6=>1,7=>3,8=>'MacOSX'),array(3=>4124,8=>'Win7'),array(3=>4496,8=>'Win2000'),array(3=>4006,8=>'Win7'),array(3=>4006,8=>'WinXP'),array(3=>4001,8=>'Win2000'),array(3=>4124,8=>'Win8'),array(3=>4006,8=>'Win8'),array(3=>4006,8=>'WinVista'),array(3=>4006,8=>'Win2003'),array(3=>4006,8=>'Win2000'),array(3=>4018,8=>'Win8'),array(3=>3657,4=>'Reddit'),array(3=>4419,8=>'WinNT'),array(3=>4419,8=>'Win2000'),array(3=>4479,8=>'Win2000'),array(3=>4124,8=>'WinXP'),array(3=>4018,8=>'Win2000'),array(3=>4001,8=>'WinVista'),array(3=>4018,8=>'WinXP'),array(3=>4001,8=>'Win2003'),array(3=>4018,8=>'Win2003'),array(3=>4001,8=>'Win7'),array(3=>4472,8=>'WinXP'),array(3=>4472,8=>'WinVista'),array(3=>4413,8=>'WinNT'),array(3=>4413,8=>'Win2000'),array(3=>4472,8=>'WinXP'),array(3=>4472,8=>'Win2000'),array(3=>4472,8=>'WinNT'),array(3=>4124,8=>'Win2003'),array(3=>4257),array(3=>4018,8=>'Win7'),array(3=>4124,8=>'WinVista'),array(3=>4001,8=>'WinXP'),array(3=>4124,8=>'Win2000'),array(3=>4472,8=>'Win7'),array(3=>4508,8=>'Win2000'),array(3=>4001,8=>'Win8'),array(3=>4018,8=>'WinVista'),array(3=>3775,4=>'FAST MetaWeb Crawler'),array(3=>4496,8=>'WinNT'),array(3=>4479,8=>'WinXP'),array(3=>4479,8=>'WinXP'),array(3=>4479,8=>'Win2000'),array(3=>4496,8=>'WinXP'),array(3=>4496,8=>'WinXP'),array(3=>4479,8=>'WinVista'),array(3=>4547,5=>'3.0',6=>3,7=>0,8=>'MacPPC',27=>2),array(3=>4478,5=>'7.0',6=>7,7=>0,8=>'WinVista'),array(3=>4478,5=>'7.0',6=>7,7=>0,8=>'Win7'),array(3=>4519,5=>'1.0',6=>1,7=>0),array(3=>3777,4=>'Voyager'),array(3=>4478,5=>'7.0',6=>7,7=>0,8=>'WinXP'),array(3=>4496,8=>'Win2000'),array(3=>4479,8=>'WinNT'),array(3=>4414,4=>'eStyleSearch',12=>'true'),array(3=>3693,8=>'WinNT',12=>'true'),array(3=>4508,8=>'Win2000'),array(3=>4508,8=>'WinNT'),array(3=>3695,8=>'WinNT'),array(3=>4478,5=>'7.0',6=>7,7=>0,8=>'Win2000'),array(3=>3279,4=>'1st ZipCommander'),array(3=>4504,4=>'Yandex MirrorDetector'),array(3=>4478,5=>'7.0',6=>7,7=>0,8=>'WinXP'),array(3=>4418,5=>'4.0',6=>4,7=>0),array(3=>4089,8=>'WinNT'),array(3=>4094,8=>'WinNT'),array(3=>4433,8=>'Win7',12=>'false',13=>'true'),array(3=>4056,8=>'WinNT'),array(3=>4509,5=>'0.9',6=>0,7=>9),array(3=>4509,5=>'1.2',6=>1,7=>2),array(3=>4092,8=>'WinNT'),array(3=>4079,8=>'WinNT'),array(3=>3777,4=>'Busiversebot',23=>'true'),array(3=>4135,8=>'WinNT'),array(3=>4509,5=>'2.2',6=>2,7=>2),array(3=>4509,5=>'1.1',6=>1,7=>1),array(3=>4433,8=>'WinVista',12=>'false',13=>'true'),array(3=>4509,5=>'2.1',6=>2,7=>1),array(3=>4509,5=>'1.0',6=>1,7=>0),array(3=>4549,4=>'Danger'),array(3=>3603,4=>'Strategic Board Bot',23=>'true'),array(3=>4549,4=>'renlifangbot'),array(3=>4497),array(3=>4131,4=>'Inclue'),array(3=>3657,4=>'Vonna.com',23=>'true'),array(3=>3657,4=>'Gnomit',23=>'true'),array(3=>3615,4=>'Browscap Mirror System'),array(3=>3657,4=>'AdHitz'),array(3=>3657,4=>'neTVision'),array(3=>4499,5=>'3.1',6=>3,7=>1),array(3=>4499,5=>'3.0',6=>3,7=>0),array(3=>4451,4=>'FeedHub MetaDataFetcher',5=>'1.0',6=>1,7=>0),array(3=>3855,4=>'Pingdom'),array(3=>4079,8=>'Win31',11=>'true',12=>'false'),array(3=>3657,4=>'MapoftheInternet',23=>'true'),array(3=>4089,8=>'Win31',11=>'true',12=>'false'),array(3=>4056,8=>'Win31',11=>'true',12=>'false'),array(3=>4549,4=>'msnbot-mobile'),array(3=>4011,8=>'MacOSX',12=>'false'),array(3=>4011,8=>'OpenBSD',12=>'false'),array(3=>4094,8=>'Win31',11=>'true',12=>'false'),array(3=>4011,8=>'FreeBSD',12=>'false'),array(3=>3600,4=>'Advanced Email Extractor'),array(3=>4092,8=>'Win31',11=>'true',12=>'false'),array(3=>4135,8=>'Win31',11=>'true',12=>'false'),array(3=>4131,4=>'Windows-RSS-Platform',5=>'2.0',6=>2,7=>0,8=>'Win32'),array(3=>3379,5=>'1.3',6=>1,7=>3),array(3=>3379,5=>'1.0',6=>1,7=>0),array(3=>3379,5=>'1.1',6=>1,7=>1),array(3=>4472,8=>'Win98'),array(3=>4419,8=>'Win98'),array(3=>4413,8=>'Win98'),array(3=>3379,5=>'1.2',6=>1,7=>2),array(3=>4413,8=>'Win95'),array(3=>3379,5=>'1.7',6=>1,7=>7),array(3=>3379,5=>'1.6',6=>1,7=>6),array(3=>3379,5=>'1.5',6=>1,7=>5),array(3=>3379,5=>'1.4',6=>1,7=>4),array(3=>3379,5=>'1.8',6=>1,7=>8),array(3=>4419,8=>'Win95'),array(3=>3953,8=>'SunOS',12=>'false'),array(3=>3960,8=>'SunOS',12=>'false'),array(3=>4011,8=>'IRIX64',12=>'false'),array(3=>3831,4=>'Dead-Links.com',23=>'true'),array(3=>4089,8=>'Win31',11=>'true',12=>'false'),array(3=>4092,8=>'Win31',11=>'true',12=>'false'),array(3=>4135,11=>'true',12=>'false'),array(3=>3961,8=>'SunOS',12=>'false'),array(3=>4079,8=>'Win31',11=>'true',12=>'false'),array(3=>3279,4=>'Godzilla'),array(3=>4094,11=>'true',12=>'false'),array(3=>4451,4=>'FeedHub FeedDiscovery',5=>'1.0',6=>1,7=>0),array(3=>4056,8=>'Win31',11=>'true',12=>'false'),array(3=>4302,4=>'Microsoft Excel',5=>'12.0',6=>12,7=>0,8=>'MacOSX'),array(3=>4079,8=>'Win95'),array(3=>4079,8=>'Win98'),array(3=>4479,8=>'Win98'),array(3=>4467,5=>'5.0',6=>5,7=>0),array(3=>4479,8=>'Win95'),array(3=>4094,8=>'Win98'),array(3=>3601,4=>'Bluecoat'),array(3=>4011,8=>'SunOS',12=>'false'),array(3=>4508,8=>'Win95'),array(3=>3657,4=>'Patwebbot'),array(3=>4414,4=>'FindFiles',23=>'true'),array(3=>4011,8=>'Linux',12=>'false'),array(3=>4011,8=>'HP-UX',12=>'false'),array(3=>4508,8=>'Win98'),array(3=>4135,8=>'Win95'),array(3=>4056,8=>'Win95'),array(3=>4094,8=>'Win95'),array(3=>4414,4=>'IPCheck Server Monitor'),array(3=>4467,5=>'5.1',6=>5,7=>1),array(3=>3918,4=>'DataFountains/DMOZ Feature Vector Corpus'),array(3=>3615,4=>'WCC Browscap Updater'),array(3=>4433,8=>'WinXP'),array(3=>4135,8=>'Win98'),array(3=>4496,8=>'Win98'),array(3=>4467,5=>'4.5',6=>4,7=>5),array(3=>4092,8=>'Win95'),array(3=>4467,5=>'4.0',6=>4,7=>0),array(3=>4433,8=>'Win7'),array(3=>4433,8=>'WinVista'),array(3=>4433,8=>'Win8'),array(3=>4092,8=>'Win98'),array(3=>4467,5=>'5.2',6=>5,7=>2),array(3=>4496,8=>'Win95'),array(3=>4433,8=>'WinXP'),array(3=>4089,8=>'Win95'),array(3=>4056,8=>'Win98',12=>'true'),array(3=>4089,8=>'Win98'),array(3=>3601,4=>'Cerberian'),array(3=>3563,4=>'wwwster',10=>'true'),array(3=>4451,4=>'FeedHub FeedFetcher',5=>'1.0',6=>1,7=>0),array(3=>3708,4=>'WebmasterWorld Server Header Checker'),array(3=>3831,4=>'SafariBookmarkChecker',8=>'MacOSX',27=>2),array(3=>3777,4=>'Sosospider'),array(3=>4549,4=>'adidxbot'),array(3=>3657,4=>'GosoSpider'),array(3=>4527,4=>'YahooSeeker-Mobile'),array(3=>4257),array(3=>4527,4=>'Y!J-AGENT/BMI'),array(3=>4131,4=>'UniversalFeedParser'),array(3=>3657,4=>'FirstSearchBot'),array(3=>4527,4=>'Y!J'),array(3=>4413,8=>'WinNT'),array(3=>4483,5=>'1.0',6=>1,7=>0),array(3=>4549,4=>'Windows-Live-Social-Object-Extractor-Eng'),array(3=>4483,5=>'2.0',6=>2,7=>0),array(3=>4504,4=>'YandexImageResizer'),array(3=>3657,4=>'TinyURL'),array(3=>3657,4=>'ZmEu',23=>'true'),array(3=>4094,8=>'OpenBSD',12=>'false'),array(3=>4056,8=>'OpenBSD',12=>'false'),array(3=>4089,8=>'FreeBSD',12=>'false'),array(3=>4094,8=>'FreeBSD',12=>'false'),array(3=>3657,4=>'Generic Crawler',12=>'true'),array(3=>3797,4=>'Microsoft NetShow'),array(3=>4135,8=>'FreeBSD',12=>'false'),array(3=>4418,5=>'2.3',6=>2,7=>3),array(3=>3851),array(3=>3836,4=>'SaferSurf'),array(3=>4135,8=>'OpenBSD',12=>'false'),array(3=>4418,5=>'2.1',6=>2,7=>1),array(3=>4092,8=>'OpenBSD',12=>'false'),array(3=>4418,5=>'2.2',6=>2,7=>2),array(3=>4092,8=>'FreeBSD',12=>'false'),array(3=>4056,8=>'FreeBSD',12=>'false'),array(3=>4542,4=>'SnapPreviewBot'),array(3=>3894,4=>'exactseek-pagereaper',23=>'true'),array(3=>3603,4=>'Liferea',23=>'true'),array(3=>4089,8=>'OpenBSD',12=>'false'),array(3=>4079,8=>'OpenBSD',12=>'false'),array(3=>4079,8=>'FreeBSD',12=>'false'),array(3=>4504,4=>'YandexBlogs'),array(3=>4527,4=>'Yahoo! Search Monkey'),array(3=>4527,4=>'Yahoo! Media',23=>'true'),array(3=>3961,8=>'Linux',12=>'false'),array(3=>3892,8=>'MacOSX',12=>'false'),array(3=>3699,4=>'Trend Micro'),array(3=>4414,4=>'NEWT ActiveX',8=>'Win32'),array(3=>3914,8=>'MacOSX',12=>'false'),array(3=>3984,8=>'MacOSX',12=>'false'),array(3=>3935,8=>'Linux',12=>'false'),array(3=>3960,8=>'Linux',12=>'false'),array(3=>3953,8=>'Linux',12=>'false'),array(3=>4079,8=>'Linux',12=>'false'),array(3=>4515,5=>'2.6',6=>2,7=>6,27=>1),array(3=>3984,8=>'OpenBSD',12=>'false'),array(3=>3777,4=>'GoForIt'),array(3=>3788,4=>'PicSearchBot'),array(3=>4079,8=>'SunOS',12=>'false'),array(3=>3563,4=>'inetbot'),array(3=>4094,8=>'SunOS',12=>'false'),array(3=>4094,8=>'Linux',12=>'false'),array(3=>4089,8=>'Linux',12=>'false'),array(3=>3657,4=>'Generic Crawler',23=>'true'),array(3=>4018,8=>'MacOSX',12=>'false'),array(3=>4135,8=>'Linux',12=>'false'),array(3=>3914,8=>'OpenBSD',12=>'false'),array(3=>4092,8=>'SunOS',12=>'false'),array(3=>4135,8=>'SunOS',12=>'false'),array(3=>4408,4=>'Exabot-Images',5=>'3.0',6=>3,7=>0),array(3=>4006,8=>'MacOSX',12=>'false'),array(3=>4092,8=>'Linux',12=>'false'),array(3=>3892,8=>'OpenBSD',12=>'false'),array(3=>3777,4=>'CipinetBot'),array(3=>3657,4=>'Tasap-image-robot',23=>'true'),array(3=>4056,8=>'SunOS',12=>'false'),array(3=>4124,8=>'MacOSX',12=>'false'),array(3=>4056,8=>'Linux',12=>'false'),array(3=>3615,4=>'BCP - PHP Browscap',5=>'1.0',6=>1,7=>0),array(3=>4089,8=>'SunOS',12=>'false'),array(3=>4515,5=>'2.3',6=>2,7=>3),array(3=>4515,5=>'2.1',6=>2,7=>1),array(3=>4515,5=>'2.2',6=>2,7=>2),array(3=>4515,5=>'2.8',6=>2,7=>8,20=>'true',27=>1),array(3=>4515,5=>'2.9',6=>2,7=>9,20=>'true',27=>1),array(3=>4515,5=>'2.0',6=>2,7=>0),array(3=>4515,5=>'2.4',6=>2,7=>4),array(3=>4001,8=>'MacOSX',12=>'false'),array(3=>4475,4=>'BecomeJPBot'),array(3=>4515,5=>'2.5',6=>2,7=>5,27=>1),array(3=>4515,5=>'2.7',6=>2,7=>7,27=>1),array(3=>3563,4=>'UofTDB Experiment'),array(3=>4012,8=>'Win2000'),array(3=>4124,8=>'OpenBSD',12=>'false'),array(3=>4046,8=>'WinNT'),array(3=>4012,8=>'WinNT'),array(3=>3657,4=>'ddetailsbot'),array(3=>4012,8=>'WinXP'),array(3=>4001,8=>'OpenBSD',12=>'false'),array(3=>4012,8=>'WinXP'),array(3=>3777,4=>'Qihoo'),array(3=>3563),array(3=>4018,8=>'OpenBSD',12=>'false'),array(3=>3991,8=>'WinXP'),array(3=>3991,8=>'Win7'),array(3=>3991,8=>'WinVista'),array(3=>4357,4=>'YodaoBot-Image'),array(3=>4527,4=>'Y!J-AGENT/BMF'),array(3=>4527,4=>'Y!J-AGENT/BMC'),array(3=>3984,8=>'IRIX64',12=>'false'),array(3=>4527,4=>'Yahoo! Verifier',5=>'1.1',6=>1,7=>1),array(3=>4504,4=>'YandexFavicons'),array(3=>3991,8=>'Win2000'),array(3=>4046,8=>'Win2000'),array(3=>3991,8=>'WinXP'),array(3=>3984,8=>'FreeBSD',12=>'false'),array(3=>3991,8=>'WinNT'),array(3=>4500,8=>'Linux'),array(3=>3831,4=>'Susie'),array(3=>4046,8=>'WinXP'),array(3=>4257),array(3=>4046,8=>'Win7'),array(3=>4548,4=>'Teoma'),array(3=>4012,8=>'WinVista'),array(3=>4006,8=>'OpenBSD',12=>'false'),array(3=>3892,8=>'FreeBSD',12=>'false'),array(3=>3892,8=>'IRIX64',12=>'false'),array(3=>4012,8=>'Win7'),array(3=>4046,8=>'WinVista'),array(3=>3914,8=>'FreeBSD',12=>'false'),array(3=>3914,8=>'IRIX64',12=>'false'),array(3=>4515,5=>'1.0',6=>1,7=>0),array(3=>3777,4=>'Butterfly'),array(3=>4046,8=>'WinXP'),array(3=>3914,8=>'Linux',12=>'false'),array(3=>4007,8=>'WinXP'),array(3=>3892,8=>'SunOS',12=>'false'),array(3=>4014,8=>'Win7'),array(3=>3643),array(3=>4379,4=>'fantomas shadowMaker Browser'),array(3=>3601,4=>'Cerberian'),array(3=>3657,4=>'Viralheat',23=>'true'),array(3=>4124,8=>'IRIX64',12=>'false'),array(3=>4124,8=>'FreeBSD',12=>'false'),array(3=>4357),array(3=>4014,8=>'WinNT'),array(3=>4014,8=>'WinVista'),array(3=>3892,8=>'HP-UX',12=>'false'),array(3=>3892,8=>'Linux',12=>'false'),array(3=>4006,8=>'FreeBSD',12=>'false'),array(3=>4029,8=>'WinXP'),array(3=>4029,8=>'WinVista'),array(3=>4029,8=>'Win7'),array(3=>4029,8=>'WinXP'),array(3=>4029,8=>'Win2000'),array(3=>4014,8=>'Win2000'),array(3=>4029,8=>'WinNT'),array(3=>4007,8=>'Win2000'),array(3=>3914,8=>'HP-UX',12=>'false'),array(3=>4014,8=>'WinXP'),array(3=>4007,8=>'WinXP'),array(3=>4014,8=>'WinXP'),array(3=>3657,4=>'Tecomi'),array(3=>4006,8=>'IRIX64',12=>'false'),array(3=>3788,4=>'HTML2JPG'),array(3=>3914,8=>'SunOS',12=>'false'),array(3=>4007,8=>'WinNT'),array(3=>3984,8=>'SunOS',12=>'false'),array(3=>4007,8=>'Win7'),array(3=>4030,8=>'Win7'),array(3=>3777,4=>'ZoomInfo',23=>'true'),array(3=>4030,8=>'WinNT'),array(3=>4001,8=>'FreeBSD',12=>'false'),array(3=>4017,8=>'Win2000'),array(3=>4017,8=>'WinXP'),array(3=>4018,8=>'IRIX64',12=>'false'),array(3=>4018,8=>'FreeBSD',12=>'false'),array(3=>4017,8=>'Win7'),array(3=>4017,8=>'WinVista'),array(3=>4017,8=>'WinXP'),array(3=>3777,4=>'Quantcastbot'),array(3=>4030,8=>'Win2000'),array(3=>4030,8=>'WinVista'),array(3=>4019,8=>'WinXP'),array(3=>4019,8=>'WinXP'),array(3=>4019,8=>'Win2000'),array(3=>4019,8=>'WinNT'),array(3=>4007,8=>'WinVista'),array(3=>4030,8=>'WinXP'),array(3=>4030,8=>'WinXP'),array(3=>3855,4=>'ChangeDetection'),array(3=>4001,8=>'IRIX64',12=>'false'),array(3=>4019,8=>'Win7'),array(3=>4019,8=>'WinVista'),array(3=>3657,4=>'BuzzRankingBot',23=>'true'),array(3=>4017,8=>'WinNT'),array(3=>4504,4=>'YandexMetrika'),array(3=>3600,4=>'ZIBB Crawler'),array(3=>4504,4=>'YandexCatalog'),array(3=>3984,8=>'Linux',12=>'false'),array(3=>3984,8=>'HP-UX',12=>'false'),array(3=>4046,8=>'Win2000'),array(3=>3991,8=>'Win2000'),array(3=>4046,8=>'WinNT'),array(3=>3991,8=>'WinNT'),array(3=>4012,8=>'Win7'),array(3=>3991,8=>'WinXP'),array(3=>4046,8=>'WinXP'),array(3=>4012,8=>'WinXP'),array(3=>4046,8=>'WinXP'),array(3=>3813,8=>'Win2000'),array(3=>3991,8=>'Win2000'),array(3=>4012,8=>'WinXP'),array(3=>4046,8=>'Win2000'),array(3=>4046,8=>'WinXP'),array(3=>4046,8=>'WinVista'),array(3=>4012,8=>'Win2000'),array(3=>3813,8=>'Win7'),array(3=>3813,8=>'WinXP'),array(3=>4046,8=>'Win7'),array(3=>4046,8=>'WinXP'),array(3=>4001,8=>'HP-UX',12=>'false'),array(3=>3813,8=>'WinXP'),array(3=>4012,8=>'WinNT'),array(3=>4006,8=>'SunOS',12=>'false'),array(3=>3813,8=>'WinVista'),array(3=>4012,8=>'Win2000'),array(3=>4012,8=>'WinNT'),array(3=>3708,4=>'Search Engine World Robots.txt Validator'),array(3=>3991,8=>'WinXP'),array(3=>4012,8=>'Win7'),array(3=>3991,8=>'WinVista'),array(3=>3991,8=>'WinXP'),array(3=>4018,8=>'Linux',12=>'false'),array(3=>3991,8=>'Win2000'),array(3=>4012,8=>'WinXP'),array(3=>4012,8=>'WinVista'),array(3=>3991,8=>'WinNT'),array(3=>4046,8=>'Win2000'),array(3=>4018,8=>'HP-UX',12=>'false'),array(3=>4046,8=>'WinNT'),array(3=>3991,8=>'Win7'),array(3=>4001,8=>'Linux',12=>'false'),array(3=>3777,4=>'EARTHCOM'),array(3=>4012,8=>'WinXP'),array(3=>4046,8=>'WinVista'),array(3=>3991,8=>'WinXP'),array(3=>4012,8=>'Win2000'),array(3=>4001,8=>'SunOS',12=>'false'),array(3=>3991,8=>'Win7'),array(3=>4012,8=>'WinVista'),array(3=>3831,4=>'SuperCleaner'),array(3=>3991,8=>'WinVista'),array(3=>4018,8=>'SunOS',12=>'false'),array(3=>4046,8=>'Win7'),array(3=>3831,4=>'HTML Link Validator'),array(3=>4504,4=>'YandexImages'),array(3=>3836,4=>'Anonymizer'),array(3=>4223,8=>'WinNT'),array(3=>3813,8=>'WinNT'),array(3=>4504,4=>'YandexDirect-Dyatel'),array(3=>4504,4=>'YandexAddURL'),array(3=>4497),array(3=>4006,8=>'HP-UX',12=>'false'),array(3=>4124,8=>'SunOS',12=>'false'),array(3=>4223,8=>'Win7'),array(3=>4223,8=>'WinVista'),array(3=>4223,8=>'Win7'),array(3=>4223,8=>'WinXP'),array(3=>4223,8=>'WinXP'),array(3=>4223,8=>'Win2000'),array(3=>4223,8=>'WinVista'),array(3=>4223,8=>'WinXP'),array(3=>4223,8=>'WinNT'),array(3=>4223,8=>'Win2000'),array(3=>4223,8=>'WinXP'),array(3=>4006,8=>'Linux',12=>'false'),array(3=>3563,4=>'nextthing.org',5=>'1.0',6=>1,7=>0),array(3=>4124,8=>'HP-UX',12=>'false'),array(3=>4124,8=>'Linux',12=>'false'),array(3=>4007,8=>'WinXP'),array(3=>4017,8=>'Win2000'),array(3=>4007,8=>'WinXP'),array(3=>4007,8=>'WinXP'),array(3=>4017,8=>'WinXP'),array(3=>4017,8=>'WinNT'),array(3=>4017,8=>'WinXP'),array(3=>4017,8=>'Win7'),array(3=>4017,8=>'WinVista'),array(3=>4007,8=>'Win7'),array(3=>4007,8=>'Win2000'),array(3=>3777,4=>'FatAssANT'),array(3=>4007,8=>'WinNT'),array(3=>4017,8=>'Win7'),array(3=>4017,8=>'WinVista'),array(3=>4017,8=>'WinXP'),array(3=>4017,8=>'WinXP'),array(3=>4030,8=>'WinXP'),array(3=>4030,8=>'WinXP'),array(3=>3777,4=>'Charlotte',10=>'true',23=>'true'),array(3=>4030,8=>'WinNT'),array(3=>4030,8=>'Win2000'),array(3=>4226,8=>'WinNT'),array(3=>4414,4=>'Novell BorderManager'),array(3=>4017,8=>'Win2000'),array(3=>3814,8=>'WinXP'),array(3=>4234,8=>'WinXP'),array(3=>4182,8=>'Win7'),array(3=>4234,8=>'WinVista'),array(3=>4234,8=>'WinXP'),array(3=>4174,8=>'WinXP'),array(3=>4174,8=>'WinXP'),array(3=>4219,8=>'Win2000'),array(3=>4219,8=>'WinNT'),array(3=>4234,8=>'Win2000'),array(3=>4182,8=>'WinVista'),array(3=>4182,8=>'WinXP'),array(3=>4007,8=>'WinVista'),array(3=>4007,8=>'WinXP'),array(3=>4046,8=>'WinME'),array(3=>4017,8=>'Win2000'),array(3=>4234,8=>'WinXP'),array(3=>4182,8=>'Win2000'),array(3=>4182,8=>'WinXP'),array(3=>3563,4=>'Theophrastus'),array(3=>4174,8=>'WinVista'),array(3=>4234,8=>'Win7'),array(3=>4174,8=>'Win7'),array(3=>4226,8=>'Win2000'),array(3=>4019,8=>'WinXP'),array(3=>4019,8=>'WinXP'),array(3=>4030,8=>'Win2000'),array(3=>4019,8=>'Win2000'),array(3=>4226,8=>'WinXP'),array(3=>4019,8=>'WinVista'),array(3=>4030,8=>'WinXP'),array(3=>4030,8=>'WinVista'),array(3=>4030,8=>'Win7'),array(3=>4019,8=>'Win7'),array(3=>4226,8=>'WinXP'),array(3=>4019,8=>'WinNT'),array(3=>4029,8=>'WinXP'),array(3=>4029,8=>'WinVista'),array(3=>4029,8=>'Win7'),array(3=>4234,8=>'Win7'),array(3=>4029,8=>'WinXP'),array(3=>4029,8=>'Win2000'),array(3=>4226,8=>'WinVista'),array(3=>4226,8=>'Win7'),array(3=>4029,8=>'WinNT'),array(3=>3814,8=>'Win7'),array(3=>3752,8=>'WinMobile'),array(3=>4030,8=>'WinXP'),array(3=>3777,4=>'ParchBot'),array(3=>4226,8=>'WinVista'),array(3=>4226,8=>'Win7'),array(3=>4007,8=>'Win2000'),array(3=>3606,4=>'BookmarkBase'),array(3=>4226,8=>'WinXP'),array(3=>3814,8=>'WinXP'),array(3=>4226,8=>'WinXP'),array(3=>4030,8=>'WinVista'),array(3=>4030,8=>'Win7'),array(3=>4226,8=>'WinNT'),array(3=>4019,8=>'Win2000'),array(3=>4030,8=>'WinNT'),array(3=>4019,8=>'Win2000'),array(3=>4019,8=>'WinNT'),array(3=>4030,8=>'Win2000'),array(3=>4019,8=>'WinXP'),array(3=>4019,8=>'WinXP'),array(3=>4226,8=>'Win2000'),array(3=>3814,8=>'WinVista'),array(3=>4019,8=>'Win7'),array(3=>4019,8=>'WinVista'),array(3=>4017,8=>'WinNT'),array(3=>4182,8=>'WinNT'),array(3=>4014,8=>'WinNT'),array(3=>4174,8=>'WinNT'),array(3=>4234,8=>'WinVista'),array(3=>4234,8=>'WinXP'),array(3=>4182,8=>'WinNT'),array(3=>4131,4=>'AideRSS',5=>'1.0',6=>1,7=>0),array(3=>4029,8=>'Win2000'),array(3=>4007,8=>'WinNT'),array(3=>4014,8=>'Win2000'),array(3=>4007,8=>'WinVista'),array(3=>4219,8=>'WinNT'),array(3=>4174,8=>'WinXP'),array(3=>4219,8=>'WinXP'),array(3=>4174,8=>'WinVista'),array(3=>4503),array(3=>3831,4=>'JRTwine'),array(3=>4174,8=>'Win2000'),array(3=>4219,8=>'Win2000'),array(3=>4174,8=>'WinXP'),array(3=>4219,8=>'Win7'),array(3=>4014,8=>'WinXP'),array(3=>3760,8=>'WinXP'),array(3=>4182,8=>'WinVista'),array(3=>3760,8=>'WinVista'),array(3=>4182,8=>'Win7'),array(3=>3760,8=>'WinXP'),array(3=>3760,8=>'WinNT'),array(3=>4014,8=>'Win7'),array(3=>3760,8=>'Win2000'),array(3=>3760,8=>'Win7'),array(3=>4182,8=>'WinXP'),array(3=>3991,8=>'WinME'),array(3=>4219,8=>'WinXP'),array(3=>4182,8=>'Win2000'),array(3=>4014,8=>'WinXP'),array(3=>4014,8=>'WinVista'),array(3=>4014,8=>'Win2000'),array(3=>4182,8=>'WinXP'),array(3=>3831,4=>'DocWeb Link Crawler'),array(3=>4174,8=>'Win7'),array(3=>4219,8=>'WinXP'),array(3=>4174,8=>'WinNT'),array(3=>3814,8=>'WinNT'),array(3=>3814,8=>'Win2000'),array(3=>4029,8=>'WinXP'),array(3=>4014,8=>'WinNT'),array(3=>4029,8=>'WinVista'),array(3=>4029,8=>'WinXP'),array(3=>4174,8=>'Win2000'),array(3=>4504,4=>'YandexMedia'),array(3=>4234,8=>'Win2000'),array(3=>4219,8=>'WinXP'),array(3=>4234,8=>'WinNT'),array(3=>3775,4=>'FAST Data Search Document Retriever'),array(3=>4029,8=>'Win2000'),array(3=>4504,4=>'YandexVideo'),array(3=>4014,8=>'WinXP'),array(3=>4014,8=>'Win2000'),array(3=>4007,8=>'Win2000'),array(3=>4029,8=>'Win7'),array(3=>4007,8=>'Win7'),array(3=>4219,8=>'WinVista'),array(3=>4219,8=>'Win7'),array(3=>4234,8=>'WinNT'),array(3=>4012,8=>'WinME'),array(3=>4014,8=>'WinXP'),array(3=>4014,8=>'Win7'),array(3=>4029,8=>'WinNT'),array(3=>4219,8=>'WinVista'),array(3=>4014,8=>'WinVista'),array(3=>4012,8=>'Win98'),array(3=>4222,8=>'Win2000'),array(3=>4229,8=>'WinNT'),array(3=>3991,8=>'Win2000'),array(3=>3991,8=>'Win2000'),array(3=>4231,8=>'WinVista'),array(3=>4231,8=>'Win7'),array(3=>4222,8=>'WinNT'),array(3=>4218,8=>'WinXP'),array(3=>4218,8=>'Win2000'),array(3=>4065),array(3=>4413),array(3=>4030,8=>'WinME'),array(3=>4222,8=>'WinXP'),array(3=>4222,8=>'WinXP'),array(3=>4012,8=>'Win2000'),array(3=>4218,8=>'WinVista'),array(3=>4218,8=>'WinNT'),array(3=>4230,8=>'Win2000'),array(3=>4230,8=>'WinNT'),array(3=>4218,8=>'Win7'),array(3=>4012,8=>'WinME'),array(3=>4229,8=>'WinXP'),array(3=>4222,8=>'WinXP'),array(3=>4229,8=>'WinNT'),array(3=>4222,8=>'WinXP'),array(3=>4222,8=>'WinVista'),array(3=>4046,8=>'Win95'),array(3=>4046,8=>'Win98'),array(3=>4222,8=>'WinNT'),array(3=>4012,8=>'Win95'),array(3=>4222,8=>'Win2000'),array(3=>4046,8=>'WinME'),array(3=>4222,8=>'Win7'),array(3=>4229,8=>'Win2000'),array(3=>4216,8=>'WinVista'),array(3=>4216,8=>'Win7'),array(3=>4046,8=>'Win2000'),array(3=>4229,8=>'Win7'),array(3=>4229,8=>'WinVista'),array(3=>4229,8=>'WinXP'),array(3=>4229,8=>'WinXP'),array(3=>4046,8=>'Win2000'),array(3=>4218,8=>'WinXP'),array(3=>4218,8=>'WinVista'),array(3=>4007,8=>'WinME'),array(3=>4216,8=>'WinXP'),array(3=>4222,8=>'Win7'),array(3=>4231,8=>'Win7'),array(3=>4231,8=>'WinVista'),array(3=>4231,8=>'WinXP'),array(3=>4216,8=>'WinNT'),array(3=>4222,8=>'WinVista'),array(3=>4231,8=>'WinXP'),array(3=>4231,8=>'WinXP'),array(3=>4231,8=>'Win2000'),array(3=>4231,8=>'WinNT'),array(3=>4231,8=>'WinXP'),array(3=>4231,8=>'Win2000'),array(3=>4229,8=>'Win7'),array(3=>3991,8=>'WinME'),array(3=>4218,8=>'WinXP'),array(3=>4216,8=>'WinXP'),array(3=>4229,8=>'WinVista'),array(3=>3991,8=>'Win98'),array(3=>4231,8=>'WinNT'),array(3=>4229,8=>'WinXP'),array(3=>4216,8=>'Win2000'),array(3=>3991,8=>'Win95'),array(3=>4229,8=>'Win2000'),array(3=>4230,8=>'Win7'),array(3=>3657,4=>'Generic Crawler',23=>'true'),array(3=>4224,8=>'WinXP'),array(3=>4224,8=>'WinXP'),array(3=>4216,8=>'WinNT'),array(3=>4017,8=>'WinME'),array(3=>4158,8=>'WinXP'),array(3=>4224,8=>'Win2000'),array(3=>4218,8=>'Win7'),array(3=>3995,4=>'BlogLines Web'),array(3=>4504,4=>'YandexNews'),array(3=>4217,8=>'WinXP'),array(3=>4224,8=>'WinNT'),array(3=>3777,4=>'ayna-crawler'),array(3=>4224,8=>'WinVista'),array(3=>4217,8=>'Win7'),array(3=>4107,4=>'PlayStation Portable'),array(3=>3657,4=>'MyFamilyBot'),array(3=>4216,8=>'WinXP'),array(3=>4216,8=>'WinXP'),array(3=>4216,8=>'Win2000'),array(3=>4549,4=>'Microsoft Bing Mobile SocialStreams Bot'),array(3=>4217,8=>'WinVista'),array(3=>4224,8=>'Win7'),array(3=>3920,8=>'Win'),array(3=>3657,4=>'ACONTBOT',23=>'true'),array(3=>4224,8=>'Win7'),array(3=>4224,8=>'WinVista'),array(3=>4419),array(3=>3885,8=>'WinNT'),array(3=>3845,8=>'Win7'),array(3=>3845,8=>'WinVista'),array(3=>3845,8=>'WinXP'),array(3=>3885,8=>'Win2000'),array(3=>3885,8=>'WinXP'),array(3=>4217,8=>'Win2000'),array(3=>3885,8=>'Win7'),array(3=>3885,8=>'WinVista'),array(3=>3885,8=>'WinXP'),array(3=>3845,8=>'WinXP'),array(3=>3845,8=>'Win2000'),array(3=>4217,8=>'WinXP'),array(3=>4224,8=>'Win2000'),array(3=>3603,4=>'NewsTin'),array(3=>4224,8=>'WinXP'),array(3=>4224,8=>'WinXP'),array(3=>4012,8=>'Win2000'),array(3=>4224,8=>'WinNT'),array(3=>3845,8=>'WinNT'),array(3=>4029,8=>'WinME'),array(3=>4014,8=>'WinME'),array(3=>4217,8=>'WinNT'),array(3=>4216,8=>'WinVista'),array(3=>3657,4=>'JS-Kit/Echo'),array(3=>4217,8=>'WinVista'),array(3=>3759,8=>'WinMobile'),array(3=>4230,8=>'WinXP'),array(3=>4218,8=>'WinNT'),array(3=>4217,8=>'WinNT'),array(3=>3657,4=>'Mahalobot'),array(3=>4223,8=>'Win2000'),array(3=>4218,8=>'Win2000'),array(3=>4218,8=>'WinXP'),array(3=>4217,8=>'WinXP'),array(3=>4217,8=>'Win2000'),array(3=>4217,8=>'Win7'),array(3=>4230,8=>'WinVista'),array(3=>4217,8=>'WinXP'),array(3=>3756,8=>'WinMobile'),array(3=>3733,8=>'WinMobile'),array(3=>4019,8=>'WinME'),array(3=>3657,4=>'WIRE',23=>'true'),array(3=>4230,8=>'WinXP'),array(3=>4223,8=>'Win2000'),array(3=>4216,8=>'Win7'),array(3=>3785,8=>'WinMobile'),array(3=>4230,8=>'WinXP'),array(3=>4230,8=>'WinXP'),array(3=>4230,8=>'Win2000'),array(3=>4230,8=>'WinNT'),array(3=>4230,8=>'Win7'),array(3=>4230,8=>'WinVista'),array(3=>4029,8=>'WinME'),array(3=>4029,8=>'Win98'),array(3=>4012,8=>'WinME'),array(3=>4007,8=>'Win2000'),array(3=>4030,8=>'Win95'),array(3=>4030,8=>'WinME'),array(3=>4030,8=>'Win98'),array(3=>4479),array(3=>4174,8=>'Win2000'),array(3=>4014,8=>'Win2000'),array(3=>4496),array(3=>4012,8=>'WinME'),array(3=>4234,8=>'Win2000'),array(3=>3991,8=>'WinME'),array(3=>4029,8=>'Win2000'),array(3=>4302,4=>'Microsoft Office Picture Manager'),array(3=>4223,8=>'WinME'),array(3=>4029,8=>'Win2000'),array(3=>3991,8=>'WinME'),array(3=>4007,8=>'WinME'),array(3=>4019,8=>'Win2000'),array(3=>4223,8=>'WinME'),array(3=>4014,8=>'Win98'),array(3=>4219,8=>'Win2000'),array(3=>4029,8=>'Win95'),array(3=>4014,8=>'WinME'),array(3=>3657,4=>'Willow Internet Crawler'),array(3=>4007,8=>'Win95'),array(3=>3657,4=>'geek-tools.org'),array(3=>4357),array(3=>4014,8=>'Win95'),array(3=>4504,4=>'YandexBot'),array(3=>4017,8=>'Win95'),array(3=>4030,8=>'Win2000'),array(3=>4318,4=>'OpenDNS Domain Crawler'),array(3=>4268),array(3=>4182,8=>'Win2000'),array(3=>4007,8=>'Win98'),array(3=>3563,4=>'Annotate Google'),array(3=>4017,8=>'WinME'),array(3=>4017,8=>'Win98'),array(3=>4318,4=>'DNS-Digger'),array(3=>4019,8=>'Win95'),array(3=>4226,8=>'Win2000'),array(3=>3399,4=>'DKIMRepBot'),array(3=>3657,4=>'www.fi crawler'),array(3=>4226,8=>'Win2000'),array(3=>4017,8=>'Win2000'),array(3=>4414,17=>'true'),array(3=>4019,8=>'Win98'),array(3=>4030,8=>'Win2000'),array(3=>4019,8=>'WinME'),array(3=>3563,4=>'Amico Alpha'),array(3=>4219,8=>'Win2000'),array(3=>4019,8=>'Win2000'),array(3=>4234,8=>'Win2000'),array(3=>4017,8=>'Win2000'),array(3=>4508),array(3=>3777,4=>'Kolinka Forum Search',23=>'true'),array(3=>3657,4=>'MJ12bot',23=>'true'),array(3=>4014,8=>'Win2000'),array(3=>4007,8=>'Win2000'),array(3=>4046,8=>'WinME'),array(3=>4046,8=>'WinME'),array(3=>4182,8=>'Win2000'),array(3=>3657,4=>'AboutUsBot',23=>'true'),array(3=>4174,8=>'Win2000'),array(3=>4318,4=>'Best Whois'),array(3=>4012,8=>'Win95'),array(3=>4216,8=>'Win2000'),array(3=>4012,8=>'Win95'),array(3=>4012),array(3=>4483,5=>'1.0',6=>1,7=>0),array(3=>4483,5=>'2.0',6=>2,7=>0),array(3=>4012,8=>'Win98'),array(3=>4012,8=>'WinME'),array(3=>4012,8=>'Win98'),array(3=>4216,8=>'Win2000'),array(3=>4012,8=>'MacOSX',12=>'false'),array(3=>3995,4=>'BlogPulseLive'),array(3=>3777,4=>'Ah-Ha'),array(3=>3279,4=>'ibisBrowser'),array(3=>4174,8=>'WinME'),array(3=>3990,4=>'DSi'),array(3=>4224,8=>'Win2000'),array(3=>4226,8=>'WinME'),array(3=>4223,8=>'Win98'),array(3=>4223,8=>'Win95'),array(3=>3615,4=>'Decode Framework browscap library'),array(3=>4226,8=>'WinME'),array(3=>3777,4=>'AnswerBus'),array(3=>4174,8=>'WinME'),array(3=>4029,8=>'WinME'),array(3=>3831,4=>'!Susie'),array(3=>4131,4=>'RSS Panel'),array(3=>4014,8=>'WinME'),array(3=>3813,8=>'WinME'),array(3=>3813,8=>'Win98'),array(3=>4217,8=>'Win2000'),array(3=>4224,8=>'Win2000'),array(3=>4029,8=>'WinME'),array(3=>3813,8=>'Win95'),array(3=>4223),array(3=>4223,8=>'Win95'),array(3=>3838,8=>'WinXP'),array(3=>3838,8=>'WinXP'),array(3=>3838,8=>'WinVista'),array(3=>3838,8=>'Win7'),array(3=>3838,8=>'Win2000'),array(3=>3838,8=>'WinNT'),array(3=>4234,8=>'WinME'),array(3=>4408,4=>'Exabot/BiggerBetter',5=>'3.0',6=>3,7=>0),array(3=>4234,8=>'WinME'),array(3=>4219,8=>'WinME'),array(3=>4219,8=>'WinME'),array(3=>3838,8=>'WinNT'),array(3=>4222,8=>'Win2000'),array(3=>4222,8=>'Win2000'),array(3=>4223,8=>'WinME'),array(3=>4223,8=>'Win98'),array(3=>3838,8=>'Win7'),array(3=>3838,8=>'WinVista'),array(3=>3838,8=>'Win2000'),array(3=>3838,8=>'WinXP'),array(3=>3838,8=>'WinXP'),array(3=>3991,8=>'Win95'),array(3=>4014,8=>'WinME'),array(3=>4046,8=>'WinME'),array(3=>4046,8=>'Win98'),array(3=>4046,8=>'Win95'),array(3=>4046),array(3=>4046,8=>'MacOSX',12=>'false'),array(3=>4218,8=>'Win2000'),array(3=>4182,8=>'WinME'),array(3=>4231,8=>'Win2000'),array(3=>4030,8=>'WinME'),array(3=>4046,8=>'Win98'),array(3=>4046,8=>'Win95'),array(3=>3991,8=>'Win98'),array(3=>3991,8=>'Win95'),array(3=>3991),array(3=>3991,8=>'Win98'),array(3=>3991,8=>'WinME'),array(3=>4229,8=>'Win2000'),array(3=>4007,8=>'WinME'),array(3=>4229,8=>'Win2000'),array(3=>3991,8=>'MacOSX',12=>'false'),array(3=>4231,8=>'Win2000'),array(3=>4030,8=>'WinME'),array(3=>4019,8=>'WinME'),array(3=>3556,8=>'WinMobile'),array(3=>4230,8=>'Win2000'),array(3=>4017,8=>'WinME'),array(3=>4217,8=>'Win2000'),array(3=>4182,8=>'WinME'),array(3=>4218,8=>'Win2000'),array(3=>4017,8=>'WinME'),array(3=>4019,8=>'WinME'),array(3=>3657,4=>'Microsoft Windows Network Diagnostics',23=>'true'),array(3=>4007,8=>'WinME'),array(3=>4230,8=>'Win2000'),array(3=>4217,8=>'WinME'),array(3=>4217,8=>'WinME'),array(3=>4547,5=>'3.0',6=>3,7=>0,8=>'MacOSX',27=>2),array(3=>3777,4=>'Northern Light Web Search'),array(3=>4007,8=>'Win98'),array(3=>4007,8=>'Win95'),array(3=>4007,8=>'Win95'),array(3=>4548,4=>'AskJeeves'),array(3=>4547,5=>'2.9',6=>2,7=>9,8=>'MacOSX'),array(3=>4007,8=>'Win98'),array(3=>4547,5=>'2.8',6=>2,7=>8,8=>'MacOSX'),array(3=>3777,4=>'CatchBot',5=>'1.0',6=>1,7=>0),array(3=>4007,8=>'WinME'),array(3=>4007),array(3=>4017,8=>'Win98'),array(3=>4029,8=>'Win98'),array(3=>4029,8=>'WinME'),array(3=>4029,8=>'Win95'),array(3=>4029),array(3=>4029,8=>'Win95'),array(3=>4029,8=>'Win98'),array(3=>3814,8=>'WinME'),array(3=>3814,8=>'Win98'),array(3=>3760,8=>'Win95'),array(3=>4224,8=>'WinME'),array(3=>3760,8=>'Win98'),array(3=>3760,8=>'WinME'),array(3=>4029,8=>'MacOSX',12=>'false'),array(3=>4302,4=>'Microsoft Office Existence Discovery'),array(3=>4014,8=>'MacOSX',12=>'false'),array(3=>4218,8=>'WinME'),array(3=>4182,8=>'Win98'),array(3=>4182,8=>'Win95'),array(3=>4182),array(3=>4182,8=>'Win98'),array(3=>4014,8=>'Win95'),array(3=>4014,8=>'Win98'),array(3=>4014,8=>'Win98'),array(3=>4014,8=>'WinME'),array(3=>4014,8=>'Win95'),array(3=>3603,4=>'Feedster'),array(3=>4182,8=>'WinME'),array(3=>4174,8=>'Win95'),array(3=>4174,8=>'Win98'),array(3=>4219,8=>'Win95'),array(3=>4219,8=>'Win98'),array(3=>4219),array(3=>4219,8=>'Win98'),array(3=>4219,8=>'Win95'),array(3=>4219,8=>'WinME'),array(3=>4234,8=>'WinME'),array(3=>4234,8=>'Win98'),array(3=>4234),array(3=>4234,8=>'Win95'),array(3=>4234,8=>'Win95'),array(3=>4234,8=>'Win98'),array(3=>4222,8=>'WinME'),array(3=>4222,8=>'WinME'),array(3=>4174,8=>'Win98'),array(3=>4224,8=>'WinME'),array(3=>4174,8=>'Win95'),array(3=>3741,4=>'ZuneHD',5=>4,6=>4),array(3=>4174),array(3=>4174,8=>'WinME'),array(3=>4226,8=>'Win95'),array(3=>4226,8=>'Win98'),array(3=>4226,8=>'WinME'),array(3=>4226,8=>'Win95'),array(3=>4226),array(3=>4226,8=>'Win98'),array(3=>4182,8=>'Win95'),array(3=>4014),array(3=>4030,8=>'WinME'),array(3=>4017,8=>'MacOSX',12=>'false'),array(3=>4030,8=>'Win98'),array(3=>4030,8=>'Win95'),array(3=>4231,8=>'WinME'),array(3=>4030,8=>'MacOSX',12=>'false'),array(3=>4230,8=>'MacPPC',12=>'false'),array(3=>4019,8=>'Win98'),array(3=>4019,8=>'Win95'),array(3=>4230,8=>'WinME'),array(3=>4230,8=>'WinME'),array(3=>4231,8=>'WinME'),array(3=>4030),array(3=>4012,8=>'FreeBSD',12=>'false'),array(3=>4216,8=>'WinME'),array(3=>4216,8=>'WinME'),array(3=>4007,8=>'MacOSX',12=>'false'),array(3=>4229,8=>'WinME'),array(3=>3991,8=>'FreeBSD',12=>'false'),array(3=>4030,8=>'Win98'),array(3=>4030,8=>'Win95'),array(3=>4046,8=>'FreeBSD',12=>'false'),array(3=>4229,8=>'WinME'),array(3=>4019),array(3=>4218,8=>'WinME'),array(3=>4017,8=>'Win98'),array(3=>4017,8=>'Win95'),array(3=>3920,8=>'WinCE'),array(3=>4017,8=>'WinME'),array(3=>4017),array(3=>4017,8=>'Win95'),array(3=>4257),array(3=>4019,8=>'MacOSX',12=>'false'),array(3=>3596,4=>'A1 Website Download'),array(3=>4019,8=>'WinME'),array(3=>4019,8=>'Win95'),array(3=>3752,8=>'BlackBerry OS'),array(3=>4019,8=>'Win98'),array(3=>4222,8=>'WinME'),array(3=>4222,8=>'Win95'),array(3=>4222,8=>'Win98'),array(3=>4222),array(3=>4046,8=>'MacOSX',12=>'false'),array(3=>4222,8=>'Win98'),array(3=>3657,4=>'N-Stealth'),array(3=>3991,8=>'MacOSX',12=>'false'),array(3=>4012,8=>'MacOSX',12=>'false'),array(3=>4218,8=>'Win98'),array(3=>3991,8=>'MacOSX',12=>'false'),array(3=>4222,8=>'Win95'),array(3=>4218,8=>'Win95'),array(3=>4017,8=>'FreeBSD',12=>'false'),array(3=>4012,8=>'MacOSX',12=>'false'),array(3=>4218,8=>'WinME'),array(3=>4218,8=>'Win95'),array(3=>3657,4=>'WebCapture'),array(3=>4218),array(3=>3657,4=>'DepSpid'),array(3=>4030,8=>'FreeBSD',12=>'false'),array(3=>4224),array(3=>4019,8=>'FreeBSD',12=>'false'),array(3=>4224,8=>'Win95'),array(3=>4224,8=>'Win98'),array(3=>4014,8=>'FreeBSD',12=>'false'),array(3=>4224,8=>'Win95'),array(3=>4223,8=>'MacOSX',12=>'false'),array(3=>4223,8=>'MacOSX',12=>'false'),array(3=>4046,8=>'MacOSX',12=>'false'),array(3=>4218,8=>'Win98'),array(3=>4029,8=>'FreeBSD',12=>'false'),array(3=>4224,8=>'Win98'),array(3=>4224,8=>'WinME'),array(3=>4007,8=>'FreeBSD',12=>'false'),array(3=>3657,4=>'RixBot'),array(3=>4217,8=>'Win95'),array(3=>4231),array(3=>4231,8=>'Win98'),array(3=>4231,8=>'Win95'),array(3=>3785,8=>'BlackBerry OS'),array(3=>4231,8=>'WinME'),array(3=>4231,8=>'Win98'),array(3=>4231,8=>'Win95'),array(3=>3603,4=>'Newsbrain'),array(3=>4302,4=>'MS OPD'),array(3=>3814,8=>'Win95'),array(3=>4230,8=>'Win98'),array(3=>4217),array(3=>4229,8=>'WinME'),array(3=>4229,8=>'Win98'),array(3=>3733,8=>'BlackBerry OS'),array(3=>4230,8=>'Win95'),array(3=>3752,8=>'JAVA'),array(3=>4230,8=>'Win95'),array(3=>3752,8=>'SymbianOS'),array(3=>4488,4=>'Google Keyword Tool'),array(3=>3777,4=>'Pogodak'),array(3=>4230,8=>'WinME'),array(3=>4217,8=>'WinME'),array(3=>4217,8=>'Win98'),array(3=>3759,8=>'BlackBerry OS'),array(3=>4230,8=>'Win98'),array(3=>3756,8=>'BlackBerry OS'),array(3=>4217,8=>'Win95'),array(3=>4230),array(3=>3885,8=>'WinME'),array(3=>4217,8=>'Win98'),array(3=>4229,8=>'Win95'),array(3=>4229,8=>'Win98'),array(3=>4216,8=>'WinME'),array(3=>4229),array(3=>3885,8=>'Win98'),array(3=>3569,4=>'',14=>'true',16=>'true',26=>'true'),array(3=>4477,5=>'1.4',6=>1,7=>4),array(3=>4477,5=>'1.3',6=>1,7=>3),array(3=>4477,5=>'1.2',6=>1,7=>2),array(3=>4477,5=>'1.1',6=>1,7=>1),array(3=>3838,8=>'Win2000'),array(3=>4216,8=>'Win98'),array(3=>3845,8=>'Win95'),array(3=>3845,8=>'Win98'),array(3=>3845,8=>'WinME'),array(3=>3885,8=>'Win95'),array(3=>4216,8=>'Win95'),array(3=>4229,8=>'Win95'),array(3=>4216),array(3=>4216,8=>'Win98'),array(3=>4216,8=>'Win95'),array(3=>3838,8=>'Win2000'),array(3=>4012,8=>'SunOS'),array(3=>4012,8=>'FreeBSD',12=>'false'),array(3=>4012,8=>'Linux',12=>'false'),array(3=>3991,8=>'FreeBSD',12=>'false'),array(3=>4046,8=>'Linux',12=>'false'),array(3=>3991,8=>'SunOS'),array(3=>4046,8=>'FreeBSD',12=>'false'),array(3=>4046,8=>'FreeBSD',12=>'false'),array(3=>4046,8=>'SunOS'),array(3=>4030,8=>'MacOSX',12=>'false'),array(3=>4019,8=>'MacOSX',12=>'false'),array(3=>3991,8=>'FreeBSD',12=>'false'),array(3=>3991,8=>'Linux',12=>'false'),array(3=>4030,8=>'MacOSX',12=>'false'),array(3=>4019,8=>'MacOSX',12=>'false'),array(3=>3733,8=>'JAVA'),array(3=>3615,4=>'PHP Browser Capabilities Project'),array(3=>4223,8=>'FreeBSD',12=>'false'),array(3=>4223,8=>'FreeBSD',12=>'false'),array(3=>3615,4=>'Mono Browser Capabilities Updater',23=>'true'),array(3=>4226,8=>'MacOSX',12=>'false'),array(3=>4174,8=>'MacOSX',12=>'false'),array(3=>4174,8=>'MacOSX',12=>'false'),array(3=>4226,8=>'MacOSX',12=>'false'),array(3=>3838,8=>'WinME'),array(3=>4219,8=>'MacOSX',12=>'false'),array(3=>4234,8=>'MacOSX',12=>'false'),array(3=>4234,8=>'MacOSX',12=>'false'),array(3=>3838,8=>'WinME'),array(3=>4494,12=>'true'),array(3=>4494,8=>'Win31'),array(3=>4219,8=>'MacOSX',12=>'false'),array(3=>3657,4=>'Spinn3r'),array(3=>4029,8=>'MacOSX',12=>'false'),array(3=>4029,8=>'MacOSX',12=>'false'),array(3=>3785,8=>'SymbianOS'),array(3=>3657,4=>'Superpages'),array(3=>4017,8=>'MacOSX',12=>'false'),array(3=>4012,8=>'FreeBSD',12=>'false'),array(3=>3733,8=>'SymbianOS'),array(3=>3756,8=>'JAVA'),array(3=>3759,8=>'SymbianOS'),array(3=>3759,8=>'JAVA'),array(3=>4017,8=>'MacOSX',12=>'false'),array(3=>4182,8=>'MacOSX',12=>'false'),array(3=>3995,4=>'kinjabot'),array(3=>4131,4=>'BlijbolReallySimpleAggregator'),array(3=>3831,4=>'URLBase'),array(3=>3596,4=>'Getleft'),array(3=>4014,8=>'MacOSX',12=>'false'),array(3=>4182,8=>'MacOSX',12=>'false'),array(3=>4014,8=>'MacOSX',12=>'false'),array(3=>3756,8=>'SymbianOS'),array(3=>3785,8=>'JAVA'),array(3=>3657,4=>'Webbot.ru',23=>'true'),array(3=>4488,4=>'Google Feedfetcher'),array(3=>4007,8=>'MacOSX',12=>'false'),array(3=>4007,8=>'MacOSX',12=>'false'),array(3=>4547,5=>'4.0',6=>4,7=>0,8=>'MacOSX'),array(3=>4488,4=>'iGoogleGadgets',23=>'true',25=>'true'),array(3=>4030,8=>'FreeBSD',12=>'false'),array(3=>4182,8=>'FreeBSD',12=>'false'),array(3=>4014,8=>'SunOS'),array(3=>4029,8=>'FreeBSD',12=>'false'),array(3=>3657,4=>'Vermut'),array(3=>4029,8=>'FreeBSD',12=>'false'),array(3=>3777,4=>'Pagebull'),array(3=>4231,8=>'MacOSX',12=>'false'),array(3=>4222,8=>'MacOSX',12=>'false'),array(3=>4226,8=>'FreeBSD',12=>'false'),array(3=>4226,8=>'FreeBSD',12=>'false'),array(3=>3813,8=>'MacOSX',12=>'false'),array(3=>4222,8=>'MacOSX',12=>'false'),array(3=>4017,8=>'Linux',12=>'false'),array(3=>3838,8=>'Win95'),array(3=>4182,8=>'FreeBSD',12=>'false'),array(3=>4017,8=>'SunOS'),array(3=>4219,8=>'FreeBSD',12=>'false'),array(3=>3838,8=>'Win98'),array(3=>3838),array(3=>4477,5=>'1.0',6=>1,7=>0),array(3=>4017,8=>'FreeBSD',12=>'false'),array(3=>4229,8=>'MacOSX',12=>'false'),array(3=>4229,8=>'MacOSX',12=>'false'),array(3=>3838,8=>'WinXP'),array(3=>4014,8=>'Linux',12=>'false'),array(3=>3279,4=>'Wipeout Pure'),array(3=>4174,8=>'FreeBSD',12=>'false'),array(3=>3777,4=>'Arachmo'),array(3=>4029,8=>'Linux',12=>'false'),array(3=>4029,8=>'SunOS'),array(3=>4007,8=>'FreeBSD',12=>'false'),array(3=>4019,8=>'FreeBSD',12=>'false'),array(3=>4408,4=>'NGBot'),array(3=>4019,8=>'SunOS'),array(3=>4218,8=>'MacOSX',12=>'false'),array(3=>3657,4=>'Nozilla/P.N',23=>'true'),array(3=>3752,8=>'Android'),array(3=>4019,8=>'Linux',12=>'false'),array(3=>3556,8=>'BlackBerry OS'),array(3=>4019,8=>'FreeBSD',12=>'false'),array(3=>4230,8=>'MacOSX',12=>'false'),array(3=>4174,8=>'FreeBSD',12=>'false'),array(3=>4224,8=>'MacOSX',12=>'false'),array(3=>4007,8=>'FreeBSD',12=>'false'),array(3=>4017,8=>'FreeBSD',12=>'false'),array(3=>4231,8=>'MacOSX',12=>'false'),array(3=>4219,8=>'FreeBSD',12=>'false'),array(3=>4224,8=>'MacOSX',12=>'false'),array(3=>4217,8=>'MacOSX',12=>'false'),array(3=>4030,8=>'SunOS'),array(3=>4230,8=>'MacOSX',12=>'false'),array(3=>4030,8=>'Linux',12=>'false'),array(3=>3760,8=>'MacOSX',12=>'false'),array(3=>3813,8=>'MacPPC',12=>'false'),array(3=>4030,8=>'FreeBSD',12=>'false'),array(3=>3920,4=>'Opera Mobile',8=>'WinCE'),array(3=>4217,8=>'MacOSX',12=>'false'),array(3=>4234,8=>'FreeBSD',12=>'false'),array(3=>3838,8=>'WinCE'),array(3=>4014,8=>'FreeBSD',12=>'false'),array(3=>3838,8=>'Win95'),array(3=>4007,8=>'SunOS'),array(3=>3838,8=>'WinME'),array(3=>4218,8=>'MacOSX',12=>'false'),array(3=>4216,8=>'MacOSX',12=>'false'),array(3=>4007,8=>'Linux',12=>'false'),array(3=>3838,8=>'WinXP'),array(3=>4014,8=>'FreeBSD',12=>'false'),array(3=>4484,8=>'Win31'),array(3=>4234,8=>'FreeBSD',12=>'false'),array(3=>4216,8=>'MacOSX',12=>'false'),array(3=>3838,8=>'Win98'),array(3=>3785,8=>'Android'),array(3=>4224,8=>'FreeBSD',12=>'false'),array(3=>4012,8=>'SunOS',12=>'false'),array(3=>4223,8=>'SunOS',12=>'false'),array(3=>4230,8=>'FreeBSD',12=>'false'),array(3=>4216,8=>'FreeBSD',12=>'false'),array(3=>3760,8=>'MacPPC',12=>'false'),array(3=>4222,8=>'FreeBSD',12=>'false'),array(3=>3845,8=>'MacOSX',12=>'false'),array(3=>3838,8=>'MacPPC',12=>'false'),array(3=>4222,8=>'FreeBSD',12=>'false'),array(3=>4230,8=>'FreeBSD',12=>'false'),array(3=>3556,8=>'JAVA'),array(3=>3733,8=>'Android'),array(3=>4216,8=>'SymbianOS',12=>'false',24=>'true'),array(3=>4224,8=>'FreeBSD',12=>'false'),array(3=>3752,8=>'iPhone OSX'),array(3=>4217,8=>'FreeBSD',12=>'false'),array(3=>3556,8=>'SymbianOS'),array(3=>4012,8=>'Linux',12=>'false'),array(3=>4231,8=>'FreeBSD',12=>'false'),array(3=>4012,8=>'SunOS',12=>'false'),array(3=>4231,8=>'FreeBSD',12=>'false'),array(3=>4484,8=>'WinCE',24=>'true'),array(3=>4012,8=>'Linux',12=>'false'),array(3=>4046,8=>'SunOS',12=>'false'),array(3=>4223,8=>'Linux',12=>'false'),array(3=>4046,8=>'Linux',12=>'false'),array(3=>4046,8=>'Linux',12=>'false'),array(3=>4046,8=>'SunOS',12=>'false'),array(3=>4216,8=>'FreeBSD',12=>'false'),array(3=>4218,8=>'FreeBSD',12=>'false'),array(3=>4223,8=>'Linux',12=>'false'),array(3=>4223,8=>'SunOS',12=>'false'),array(3=>3777,4=>'ScorpionBot',23=>'true'),array(3=>3756,8=>'Android'),array(3=>4279,4=>'NewsGator FetchLinks'),array(3=>4229,8=>'FreeBSD',12=>'false'),array(3=>4484,8=>'Win98'),array(3=>4379,4=>'fantomas fantomCrew Browser'),array(3=>4484,8=>'Win95'),array(3=>3759,8=>'Android'),array(3=>3814,8=>'MacOSX',12=>'false'),array(3=>3838,8=>'MacPPC',12=>'false'),array(3=>3991,8=>'Linux',12=>'false'),array(3=>3991,8=>'Linux',12=>'false'),array(3=>3991,8=>'SunOS',12=>'false'),array(3=>4217,8=>'FreeBSD',12=>'false'),array(3=>3885,8=>'MacOSX',12=>'false'),array(3=>4484,8=>'WinNT'),array(3=>4229,8=>'FreeBSD',12=>'false'),array(3=>4218,8=>'FreeBSD',12=>'false'),array(3=>3991,8=>'SunOS',12=>'false'),array(3=>4007,8=>'SunOS',12=>'false'),array(3=>4017,8=>'SunOS',12=>'false'),array(3=>4219,8=>'Linux',12=>'false'),array(3=>3657,4=>'Unknown Crawler',23=>'true'),array(3=>4226,8=>'SunOS',12=>'false'),array(3=>4017,8=>'SunOS',12=>'false'),array(3=>4174,8=>'SunOS',12=>'false'),array(3=>4029,8=>'Linux',12=>'false'),array(3=>4086),array(3=>4019,8=>'SunOS',12=>'false'),array(3=>4029,8=>'SunOS',12=>'false'),array(3=>4226,8=>'SunOS',12=>'false'),array(3=>4029,8=>'Linux',12=>'false'),array(3=>4007,8=>'Linux',12=>'false'),array(3=>4226,8=>'Linux',12=>'false'),array(3=>4174,8=>'SunOS',12=>'false'),array(3=>3563,4=>'AcadiaUniversityWebCensusClient'),array(3=>4234,8=>'Linux',12=>'false'),array(3=>4014,8=>'SunOS',12=>'false'),array(3=>4182,8=>'SunOS',12=>'false'),array(3=>4219,8=>'SunOS',12=>'false'),array(3=>4182,8=>'Linux',12=>'false'),array(3=>3596,4=>'Download Express'),array(3=>4219,8=>'Linux',12=>'false'),array(3=>4182,8=>'SunOS',12=>'false'),array(3=>4226,8=>'Linux',12=>'false'),array(3=>4030,8=>'SunOS',12=>'false'),array(3=>3814,8=>'MacPPC',12=>'false'),array(3=>4029,8=>'SunOS',12=>'false'),array(3=>4019,8=>'SunOS',12=>'false'),array(3=>4017,8=>'Linux',12=>'false'),array(3=>4030,8=>'SunOS',12=>'false'),array(3=>4030,8=>'Linux',12=>'false'),array(3=>4014,8=>'Linux',12=>'false'),array(3=>4019,8=>'Linux',12=>'false'),array(3=>4182,8=>'Linux',12=>'false'),array(3=>3845,8=>'MacPPC',12=>'false'),array(3=>4058),array(3=>4007,8=>'SunOS',12=>'false'),array(3=>4007,8=>'Linux',12=>'false'),array(3=>3777,4=>'goliat',23=>'true'),array(3=>3756,8=>'iPhone OSX'),array(3=>4174,8=>'Linux',12=>'false'),array(3=>4052),array(3=>4030,8=>'Linux',12=>'false'),array(3=>3838,8=>'MacOSX',12=>'false'),array(3=>4537),array(3=>3885,8=>'MacPPC',12=>'false'),array(3=>4234,8=>'SunOS',12=>'false'),array(3=>4014,8=>'Linux',12=>'false'),array(3=>3838,8=>'MacOSX',12=>'false'),array(3=>4234,8=>'Linux',12=>'false'),array(3=>4019,8=>'Linux',12=>'false'),array(3=>4234,8=>'SunOS',12=>'false'),array(3=>4174,8=>'Linux',12=>'false'),array(3=>4219,8=>'SunOS',12=>'false'),array(3=>4085),array(3=>4014,8=>'SunOS',12=>'false'),array(3=>4017,8=>'Linux',12=>'false'),array(3=>4224,8=>'SunOS',12=>'false'),array(3=>3657,4=>'Lorkyll',23=>'true'),array(3=>4135,12=>'false'),array(3=>4224,8=>'Linux',12=>'false'),array(3=>4224,8=>'Linux',12=>'false'),array(3=>4218,8=>'SunOS',12=>'false'),array(3=>4216,8=>'Linux',12=>'false'),array(3=>4230,8=>'SunOS',12=>'false'),array(3=>3775,4=>'FAST PartnerSite'),array(3=>4230,8=>'Linux',12=>'false'),array(3=>4089,12=>'false'),array(3=>4224,8=>'SunOS',12=>'false'),array(3=>4094,12=>'false'),array(3=>3279,4=>'Escape',8=>'Win32'),array(3=>3777,4=>'CostaCider Search'),array(3=>3997,8=>'Digital Unix'),array(3=>4230,8=>'SunOS',12=>'false'),array(3=>4231,8=>'SunOS',12=>'false'),array(3=>4230,8=>'Linux',12=>'false'),array(3=>4217,8=>'SunOS',12=>'false'),array(3=>4216,8=>'Linux',12=>'false'),array(3=>4231,8=>'SunOS',12=>'false'),array(3=>4079,12=>'false'),array(3=>4222,8=>'Linux',12=>'false'),array(3=>4223,8=>'Win7'),array(3=>4223,8=>'WinVista'),array(3=>4218,8=>'Linux',12=>'false'),array(3=>4222,8=>'Linux',12=>'false'),array(3=>4229,8=>'SunOS',12=>'false'),array(3=>4222,8=>'SunOS',12=>'false'),array(3=>4223,8=>'WinXP'),array(3=>4223,8=>'WinXP'),array(3=>3991,8=>'WinVista'),array(3=>3991,8=>'Win7'),array(3=>4223,8=>'Win2000'),array(3=>3991,8=>'WinXP'),array(3=>3991,8=>'WinXP'),array(3=>3991,8=>'WinNT'),array(3=>3991,8=>'Win2000'),array(3=>4229,8=>'Linux',12=>'false'),array(3=>3918,4=>'DataFountains/DMOZ Downloader',23=>'true'),array(3=>4012,8=>'WinVista'),array(3=>4012,8=>'Win7'),array(3=>3838,8=>'FreeBSD',12=>'false'),array(3=>4012,8=>'WinXP'),array(3=>4012,8=>'WinXP'),array(3=>4012,8=>'WinNT'),array(3=>4012,8=>'Win2000'),array(3=>3838,8=>'WinCE'),array(3=>3838,8=>'FreeBSD',12=>'false'),array(3=>4229,8=>'Linux',12=>'false'),array(3=>4098,8=>'Digital Unix'),array(3=>4222,8=>'SunOS',12=>'false'),array(3=>4217,8=>'SunOS',12=>'false'),array(3=>4218,8=>'Linux',12=>'false'),array(3=>4217,8=>'Linux',12=>'false'),array(3=>4056,12=>'false'),array(3=>4216,8=>'SunOS',12=>'false'),array(3=>4547,5=>'2.7',6=>2,7=>7,8=>'Mac68K'),array(3=>3777,4=>'Octopodus',23=>'true'),array(3=>4046,8=>'WinNT'),array(3=>4046,8=>'Win2000'),array(3=>3603,4=>'RSS Reader Panel'),array(3=>3838,8=>'Win7'),array(3=>3838,8=>'WinXP'),array(3=>3838,8=>'WinVista'),array(3=>4046,8=>'WinXP'),array(3=>4046,8=>'WinXP'),array(3=>4231,8=>'Linux',12=>'false'),array(3=>4414,4=>'Kapere'),array(3=>4231,8=>'Linux',12=>'false'),array(3=>4092,12=>'false'),array(3=>3556,8=>'Android'),array(3=>4046,8=>'WinVista'),array(3=>4046,8=>'Win7'),array(3=>4547,5=>'2.7',6=>2,7=>7,8=>'MacPPC'),array(3=>4111,8=>'Digital Unix'),array(3=>4547,5=>'2.9',6=>2,7=>9,8=>'MacPPC'),array(3=>4547,5=>'3.0',6=>3,7=>0,8=>'MacPPC',27=>2),array(3=>3838,8=>'WinXP'),array(3=>4488,4=>'Google Desktop'),array(3=>4547,5=>'2.9',6=>2,7=>9,8=>'Mac68K'),array(3=>4229,8=>'SunOS',12=>'false'),array(3=>4547,5=>'2.8',6=>2,7=>8,8=>'Mac68K'),array(3=>4223,8=>'WinNT'),array(3=>3838,8=>'WinNT'),array(3=>4216,8=>'SunOS',12=>'false'),array(3=>3838,8=>'Win2000'),array(3=>4218,8=>'SunOS',12=>'false'),array(3=>3920,8=>'SymbianOS'),array(3=>4217,8=>'Linux',12=>'false'),array(3=>3752,8=>'iPhone OSX'),array(3=>4105,8=>'Digital Unix'),array(3=>4019,8=>'Win7'),array(3=>4019,8=>'WinVista'),array(3=>4019,8=>'WinXP'),array(3=>4426,4=>'Polaris Samsung',5=>'6.0',6=>6,7=>0),array(3=>4017,8=>'Win2000'),array(3=>4017,8=>'WinNT'),array(3=>4014,8=>'WinNT'),array(3=>4014,8=>'WinXP'),array(3=>4017,8=>'WinXP'),array(3=>4017,8=>'WinXP'),array(3=>4014,8=>'Win2000'),array(3=>4014,8=>'WinXP'),array(3=>4017,8=>'Win7'),array(3=>4017,8=>'WinVista'),array(3=>4014,8=>'WinVista'),array(3=>4014,8=>'Win7'),array(3=>4426,4=>'Polaris Samsung',5=>'7.0',6=>7,7=>0),array(3=>4182,8=>'Win2000'),array(3=>4182,8=>'WinXP'),array(3=>4182,8=>'WinXP'),array(3=>4426,4=>'Polaris Samsung',5=>'5.0',6=>5,7=>0),array(3=>4182,8=>'WinNT'),array(3=>4019,8=>'WinXP'),array(3=>3920,8=>'Android'),array(3=>4302,4=>'MFC Foundation Class Library'),array(3=>3831,4=>'Bookmark Renewal Check Agent'),array(3=>4182,8=>'WinVista'),array(3=>3997,8=>'Digital Unix'),array(3=>4551,4=>'Jigsaw_W3C_CSS_Validator'),array(3=>4547,5=>'2.8',6=>2,7=>8,8=>'MacPPC'),array(3=>3657,4=>'Versatel',23=>'true'),array(3=>4174,8=>'WinNT'),array(3=>4105,8=>'Digital Unix'),array(3=>4174,8=>'WinXP'),array(3=>4174,8=>'WinXP'),array(3=>4174,8=>'Win2000'),array(3=>4111,8=>'Digital Unix'),array(3=>4226,8=>'Win7'),array(3=>4226,8=>'WinNT'),array(3=>3657,4=>'YooW!',23=>'true'),array(3=>4022,4=>'WorldLingo'),array(3=>4226,8=>'Win2000'),array(3=>4226,8=>'WinXP'),array(3=>4226,8=>'WinVista'),array(3=>4019,8=>'Win2000'),array(3=>4174,8=>'WinVista'),array(3=>4098,8=>'Digital Unix'),array(3=>4007,8=>'Win7'),array(3=>3657,4=>'SynapticSearch',23=>'true'),array(3=>4421),array(3=>4007,8=>'WinVista'),array(3=>4007,8=>'WinXP'),array(3=>4007,8=>'WinNT'),array(3=>4007,8=>'Win2000'),array(3=>4007,8=>'WinXP'),array(3=>4219,8=>'Win7'),array(3=>4219,8=>'WinVista'),array(3=>3775,4=>'FAST-WebCrawler/Multimedia'),array(3=>4236,8=>'Digital Unix'),array(3=>4174,8=>'Win7'),array(3=>4219,8=>'WinNT'),array(3=>4219,8=>'Win2000'),array(3=>4219,8=>'WinXP'),array(3=>4219,8=>'WinXP'),array(3=>4414,4=>'PigBlock',12=>'true'),array(3=>4226,8=>'WinXP'),array(3=>4030,8=>'WinVista'),array(3=>4030,8=>'Win7'),array(3=>3950),array(3=>4030,8=>'WinXP'),array(3=>4030,8=>'WinXP'),array(3=>4234,8=>'WinNT'),array(3=>4030,8=>'WinNT'),array(3=>4030,8=>'Win2000'),array(3=>4029,8=>'Win7'),array(3=>4029,8=>'WinVista'),array(3=>4029,8=>'WinNT'),array(3=>4182,8=>'Win7'),array(3=>4019,8=>'WinNT'),array(3=>4029,8=>'Win2000'),array(3=>4029,8=>'WinXP'),array(3=>4029,8=>'WinXP'),array(3=>3946),array(3=>3556,8=>'iPhone OSX'),array(3=>4430,4=>'ConveraMultiMediaCrawler',5=>'0.1',6=>0,7=>1),array(3=>4234,8=>'Win7'),array(3=>3777,4=>'GurujiBot'),array(3=>4234,8=>'WinVista'),array(3=>4234,8=>'Win2000'),array(3=>4234,8=>'WinXP'),array(3=>4234,8=>'WinXP'),array(3=>4302,4=>'Microsoft-WebDAV'),array(3=>4224,8=>'Win2000'),array(3=>4224,8=>'WinNT'),array(3=>3775,4=>'FAST-WebCrawler/FirstPage'),array(3=>4224,8=>'WinXP'),array(3=>4218,8=>'Win7'),array(3=>3838,8=>'SunOS',12=>'false'),array(3=>4218,8=>'WinXP'),array(3=>4224,8=>'Win7'),array(3=>4224,8=>'WinVista'),array(3=>3995,4=>'Irish Blogs Aggregator',5=>'1.0',6=>1,7=>0),array(3=>4218,8=>'WinVista'),array(3=>4224,8=>'WinXP'),array(3=>3838,8=>'Win2000'),array(3=>4222,8=>'Win2000'),array(3=>4222,8=>'WinXP'),array(3=>4222,8=>'WinNT'),array(3=>3838,8=>'SunOS',12=>'false'),array(3=>3279,4=>'ogeb browser',5=>'1.1',6=>1,7=>1),array(3=>3990,4=>'Wii'),array(3=>4222,8=>'WinXP'),array(3=>4222,8=>'WinVista'),array(3=>3838,8=>'Linux',12=>'false'),array(3=>4223,8=>'Win2000'),array(3=>3838,8=>'Linux',12=>'false'),array(3=>3657,4=>'KakleBot'),array(3=>4222,8=>'Win7'),array(3=>4339,4=>'Netcraft Webserver Survey',23=>'true'),array(3=>4218,8=>'WinXP'),array(3=>4217,8=>'WinXP'),array(3=>4231,8=>'Win7'),array(3=>4216,8=>'WinVista'),array(3=>4217,8=>'WinVista'),array(3=>4230,8=>'WinXP'),array(3=>4229,8=>'WinNT'),array(3=>4218,8=>'WinNT'),array(3=>4514,5=>'1.0',6=>1,7=>0,8=>'WinXP'),array(3=>4230,8=>'WinXP'),array(3=>4229,8=>'WinVista'),array(3=>4216,8=>'Win7'),array(3=>4231,8=>'WinVista'),array(3=>4046,8=>'Win2000'),array(3=>4231,8=>'WinNT'),array(3=>4230,8=>'Win7'),array(3=>4231,8=>'Win2000'),array(3=>4230,8=>'WinVista'),array(3=>4231,8=>'WinXP'),array(3=>4217,8=>'Win7'),array(3=>4231,8=>'WinXP'),array(3=>3991,8=>'Win2000'),array(3=>4218,8=>'Win2000'),array(3=>3920,8=>'SymbianOS'),array(3=>4229,8=>'Win2000'),array(3=>3777,4=>'HolmesBot'),array(3=>3777,4=>'Norbert the Spider'),array(3=>4229,8=>'WinXP'),array(3=>4230,8=>'WinNT'),array(3=>4229,8=>'Win7'),array(3=>3946),array(3=>4216,8=>'Win2000'),array(3=>4216,8=>'WinNT'),array(3=>3600,4=>'MailMunky'),array(3=>3950),array(3=>3657,4=>'Miva'),array(3=>4236,8=>'Digital Unix'),array(3=>4217,8=>'Win2000'),array(3=>4217,8=>'WinXP'),array(3=>4514,5=>'0.9',6=>0,7=>9,8=>'WinXP'),array(3=>4379,4=>'fantomas stealthBrowser'),array(3=>4217,8=>'WinNT'),array(3=>4229,8=>'WinXP'),array(3=>4216,8=>'WinXP'),array(3=>4216,8=>'WinXP'),array(3=>4230,8=>'Win2000'),array(3=>4012,8=>'Win2000'),array(3=>4219,8=>'Win2000'),array(3=>3657,4=>'Internetseer'),array(3=>3657,4=>'PDFBot'),array(3=>4029,8=>'Win2000'),array(3=>3838,8=>'Unix',12=>'false'),array(3=>3991,8=>'WinME'),array(3=>4019,8=>'Win2000'),array(3=>3775,4=>'FastSearch Web Crawler'),array(3=>3279,4=>'BrowseX'),array(3=>4046,8=>'WinME'),array(3=>4414,4=>'POE-Component-Client-HTTP'),array(3=>4012,8=>'WinME'),array(3=>4302,4=>'Microsoft Live',23=>'false',25=>'true'),array(3=>4014,8=>'Win2000'),array(3=>3838,8=>'WinME'),array(3=>4174,8=>'Win2000'),array(3=>4234,8=>'Win2000'),array(3=>4379,4=>'fantomas fantomBrowser'),array(3=>4339,4=>'Netcraft Webserver Survey',23=>'true'),array(3=>3838,8=>'Unix',12=>'false'),array(3=>3657,4=>'Yellow Pages'),array(3=>4226,8=>'Win2000'),array(3=>4017,8=>'Win2000'),array(3=>4007,8=>'Win2000'),array(3=>4223,8=>'WinME'),array(3=>4030,8=>'Win2000'),array(3=>4302,4=>'Fake IE'),array(3=>4182,8=>'Win2000'),array(3=>3657,4=>'YellowPages'),array(3=>3831,4=>'Newsgroupreporter LinkCheck'),array(3=>3836,4=>'Squid'),array(3=>4224,8=>'Win2000'),array(3=>3838,8=>'Win95'),array(3=>4223,8=>'Win95'),array(3=>3838,8=>'Win98'),array(3=>4046,8=>'Win95'),array(3=>3838,8=>'WinCE'),array(3=>4012,8=>'WinME'),array(3=>3699,4=>'JoeDog',23=>'false'),array(3=>4030,8=>'WinME'),array(3=>4012,8=>'Win95'),array(3=>4222,8=>'Win2000'),array(3=>4046,8=>'Win98'),array(3=>4216,8=>'Win2000'),array(3=>4046,8=>'WinME'),array(3=>4223,8=>'WinME'),array(3=>4012,8=>'Win98'),array(3=>3838,8=>'WinME'),array(3=>4231,8=>'Win2000'),array(3=>3838,8=>'WinXP'),array(3=>4182,8=>'WinME'),array(3=>3838,8=>'Win7'),array(3=>4007,8=>'WinME'),array(3=>3991,8=>'Win95'),array(3=>4527,4=>'Yahoo! Site Explorer'),array(3=>4217,8=>'Win2000'),array(3=>3838,8=>'WinXP'),array(3=>4017,8=>'WinME'),array(3=>4379,4=>'fantomas cloakBrowser'),array(3=>4226,8=>'WinME'),array(3=>3788,4=>'Gallery Grabber'),array(3=>4527,4=>'Yahoo-Test'),array(3=>4014,8=>'WinME'),array(3=>3657,4=>'searchbot',23=>'true'),array(3=>4229,8=>'Win2000'),array(3=>4234,8=>'WinME'),array(3=>3991,8=>'Win98'),array(3=>4223,8=>'Win98'),array(3=>4218,8=>'Win2000'),array(3=>3838,8=>'WinVista'),array(3=>4029,8=>'WinME'),array(3=>3838,8=>'WinXP'),array(3=>4019,8=>'WinME'),array(3=>3600,4=>'E-Mail Address Extractor'),array(3=>4230,8=>'Win2000'),array(3=>3991,8=>'WinME'),array(3=>4174,8=>'WinME'),array(3=>4219,8=>'WinME'),array(3=>3657,4=>'DomainsDB'),array(3=>3838,8=>'Win2000'),array(3=>3838,8=>'WinNT'),array(3=>3603,4=>'AideRSS'),array(3=>4234,8=>'Win95'),array(3=>4226,8=>'Win98'),array(3=>4226,8=>'Win95'),array(3=>4224,8=>'WinME'),array(3=>4226,8=>'WinME'),array(3=>4222,8=>'WinME'),array(3=>4098,8=>'FreeBSD'),array(3=>4098,8=>'OpenBSD'),array(3=>4098,8=>'Solaris'),array(3=>4111,8=>'FreeBSD'),array(3=>4111,8=>'Solaris'),array(3=>4234,8=>'WinME'),array(3=>4174,8=>'Win95'),array(3=>4105,8=>'Solaris'),array(3=>4234,8=>'Win98'),array(3=>3657,4=>'LucidMedia-ClickSense',23=>'true'),array(3=>3831,4=>'gURLChecker',23=>'true'),array(3=>4182,8=>'Win95'),array(3=>4017,8=>'Win95'),array(3=>4017,8=>'Win98'),array(3=>4017,8=>'WinME'),array(3=>4218,8=>'WinME'),array(3=>4182,8=>'Win98'),array(3=>4219,8=>'Win95'),array(3=>4230,8=>'WinME'),array(3=>4219,8=>'Win98'),array(3=>4219,8=>'WinME'),array(3=>4182,8=>'WinME'),array(3=>4014,8=>'WinME'),array(3=>4014,8=>'Win98'),array(3=>4527,4=>'YahooYSMcm'),array(3=>4007,8=>'Win98'),array(3=>3569,4=>'Motorola Internet Browser',14=>'true',15=>'true',16=>'true',17=>'true',24=>'true'),array(3=>3603,4=>'AideRSS',23=>'true'),array(3=>4007,8=>'Win95'),array(3=>4007,8=>'WinME'),array(3=>3603,4=>'Windows-RSS-Platform',5=>'1.0',6=>1,7=>0,12=>'true'),array(3=>4014,8=>'Win95'),array(3=>4229,8=>'WinME'),array(3=>3775,4=>'FAST PartnerSite'),array(3=>3775,4=>'FAST Enterprise Crawler'),array(3=>3777,4=>'VoilaBot',23=>'true'),array(3=>4019,8=>'WinME'),array(3=>3411,5=>'10.0',6=>10,7=>0),array(3=>4231,8=>'WinME'),array(3=>3411,5=>'11.0',6=>11,7=>0),array(3=>4030,8=>'Win95'),array(3=>4030,8=>'Win98'),array(3=>4105,8=>'OpenBSD'),array(3=>3838,8=>'MacPPC',12=>'false'),array(3=>3997,8=>'OpenBSD'),array(3=>3657,4=>'bot',23=>'true'),array(3=>4174,8=>'Win98'),array(3=>3997,8=>'FreeBSD'),array(3=>4216,8=>'WinME'),array(3=>4030,8=>'WinME'),array(3=>4174,8=>'WinME'),array(3=>4029,8=>'Win95'),array(3=>4488,4=>'Google-Site-Verification'),array(3=>4019,8=>'Win95'),array(3=>4019,8=>'Win98'),array(3=>4029,8=>'Win98'),array(3=>4029,8=>'WinME'),array(3=>4111,8=>'OpenBSD'),array(3=>4105,8=>'FreeBSD'),array(3=>3657,4=>'Lincoln State Web Browser',23=>'true'),array(3=>4217,8=>'WinME'),array(3=>3997,8=>'Solaris'),array(3=>4223,8=>'MacOSX',12=>'false'),array(3=>2404,4=>'ICRA_Semantic_spider'),array(3=>4488,4=>'Google OpenSocial'),array(3=>4012,8=>'MacOSX',12=>'false'),array(3=>4518,4=>'Lycos-Spider_(modspider)'),array(3=>4236,8=>'FreeBSD'),array(3=>2404,4=>'ICRA_label_generator'),array(3=>4098,8=>'Solaris'),array(3=>3657,4=>'ShowXML',23=>'true'),array(3=>4217,8=>'Win95'),array(3=>4065,8=>'MacOSX'),array(3=>4065,8=>'Win'),array(3=>4512),array(3=>3775,4=>'FAST-WebCrawler/Fresh'),array(3=>4217,8=>'WinME'),array(3=>4217,8=>'Win98'),array(3=>4236,8=>'OpenBSD'),array(3=>4236,8=>'Solaris'),array(3=>4418,5=>'1.22',6=>1,7=>22),array(3=>4216,8=>'Win95'),array(3=>3838,8=>'Win2000'),array(3=>4098,8=>'Darwin'),array(3=>4098,8=>'CygWin'),array(3=>4105,8=>'Solaris'),array(3=>4105,8=>'FreeBSD'),array(3=>4105,8=>'OpenBSD'),array(3=>4098,8=>'NetBSD'),array(3=>4222,8=>'Win95'),array(3=>4216,8=>'Win98'),array(3=>4098,8=>'OpenBSD'),array(3=>4216,8=>'WinME'),array(3=>4098,8=>'FreeBSD'),array(3=>4222,8=>'Win98'),array(3=>4222,8=>'WinME'),array(3=>3991,8=>'MacOSX',12=>'false'),array(3=>4111,8=>'Darwin'),array(3=>3657,4=>'Oracle Enterprise Search',23=>'true'),array(3=>4230,8=>'Win95'),array(3=>4414,4=>'Tcl http client package'),array(3=>3777,4=>'Walhello'),array(3=>3997,8=>'Solaris'),array(3=>3997,8=>'OpenBSD'),array(3=>4046,8=>'MacOSX',12=>'false'),array(3=>4230,8=>'Win98'),array(3=>3279,4=>'Kopiczek',8=>'WyderOS',15=>'true',20=>'true',21=>'true',27=>2),array(3=>4426,4=>'Polaris LG',5=>'5.0',6=>5,7=>0),array(3=>4229,8=>'WinME'),array(3=>3411,5=>'7.0',6=>7,7=>0),array(3=>4426,4=>'Polaris LG',5=>'7.0',6=>7,7=>0),array(3=>4230,8=>'WinME'),array(3=>3399,4=>'IPiumBot'),array(3=>4224,8=>'WinME'),array(3=>4224,8=>'Win98'),array(3=>3411,5=>'9.0',6=>9,7=>0),array(3=>4218,8=>'Win95'),array(3=>3997,8=>'CygWin'),array(3=>4231,8=>'Win95'),array(3=>4231,8=>'Win98'),array(3=>3411,5=>'8.0',6=>8,7=>0),array(3=>4231,8=>'WinME'),array(3=>3997,8=>'Darwin'),array(3=>4218,8=>'Win98'),array(3=>4464,8=>'OpenVMS'),array(3=>4224,8=>'Win95'),array(3=>3997,8=>'FreeBSD'),array(3=>4218,8=>'WinME'),array(3=>4105,8=>'NetBSD'),array(3=>3997,8=>'NetBSD'),array(3=>4229,8=>'Win98'),array(3=>4426,4=>'Polaris LG',5=>'6.0',6=>6,7=>0),array(3=>4111,8=>'Solaris'),array(3=>4111,8=>'FreeBSD'),array(3=>4105,8=>'Darwin'),array(3=>3039),array(3=>3039),array(3=>4111,8=>'OpenBSD'),array(3=>4111,8=>'NetBSD'),array(3=>3838,8=>'MacOSX',12=>'false'),array(3=>4105,8=>'CygWin'),array(3=>3039),array(3=>3995,4=>'BlogPulse'),array(3=>4107,4=>'Sony PlayStation 3',14=>'false'),array(3=>4111,8=>'CygWin'),array(3=>4229,8=>'Win95'),array(3=>4236,8=>'NetBSD'),array(3=>3039),array(3=>3657,4=>'spider (tspyyp@tom.com)',23=>'true'),array(3=>4236,8=>'Darwin'),array(3=>4012,8=>'FreeBSD',12=>'false'),array(3=>3603,4=>'PubSub-RSS-Reader'),array(3=>3777,4=>'gazz'),array(3=>3995,4=>'blogsearchbot-pumpkin',25=>'false'),array(3=>4236,8=>'CygWin'),array(3=>3039),array(3=>4007,8=>'MacOSX',12=>'false'),array(3=>4182,8=>'MacOSX',12=>'false'),array(3=>4219,8=>'MacOSX',12=>'false'),array(3=>3831,4=>'WebTrends Link Analyzer'),array(3=>4318,4=>'Domain Dossier'),array(3=>4236,8=>'OpenBSD'),array(3=>4236,8=>'Solaris'),array(3=>4017,8=>'MacOSX',12=>'false'),array(3=>3569,4=>'Openwave Mobile Browser',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true'),array(3=>4236,8=>'FreeBSD'),array(3=>3831,4=>'Favorites Sweeper'),array(3=>4029,8=>'MacOSX',12=>'false'),array(3=>3039),array(3=>4022,4=>'ATA-Translation-Service'),array(3=>4019,8=>'MacOSX',12=>'false'),array(3=>4014,8=>'MacOSX',12=>'false'),array(3=>3831,4=>'CyberSpyder Link Test'),array(3=>3699,4=>'Panda Antivirus Titanium'),array(3=>3657,4=>'XML Sitemaps Generator'),array(3=>4105,8=>'NetBSD'),array(3=>4418,5=>'2.2',6=>2,7=>3),array(3=>4226,8=>'MacOSX',12=>'false'),array(3=>3995,4=>'Bloglines Title Fetch'),array(3=>3657,4=>'Shelob',23=>'true'),array(3=>3944,5=>'4.03',7=>3,8=>'MacPPC',12=>'false'),array(3=>4098,8=>'Linux'),array(3=>3606,4=>'SocialSpider-Finder'),array(3=>4030,8=>'MacOSX',12=>'false'),array(3=>4111,8=>'Linux'),array(3=>3991,8=>'FreeBSD',12=>'false'),array(3=>3838,8=>'FreeBSD',12=>'false'),array(3=>4234,8=>'MacOSX',12=>'false'),array(3=>4105,8=>'Linux'),array(3=>4223,8=>'FreeBSD',12=>'false'),array(3=>4105,8=>'CygWin'),array(3=>4111,8=>'NetBSD'),array(3=>4105,8=>'Darwin'),array(3=>4111,8=>'CygWin'),array(3=>4111,8=>'Darwin'),array(3=>3855,4=>'ZoneEdit Failover Monitor',23=>'false'),array(3=>3838,8=>'WinME'),array(3=>3855,4=>'Myst Monitor Service'),array(3=>3997,8=>'NetBSD'),array(3=>4098,8=>'NetBSD'),array(3=>3699,4=>'Morfeus Fucking Scanner'),array(3=>4098,8=>'CygWin'),array(3=>4098,8=>'Darwin'),array(3=>3997,8=>'CygWin'),array(3=>3997,8=>'Darwin'),array(3=>3836,4=>'Anonymouse'),array(3=>4046,8=>'FreeBSD',12=>'false'),array(3=>4418,5=>'2.1',6=>2,7=>1),array(3=>4418,5=>'2.2',6=>2,7=>2),array(3=>4174,8=>'MacOSX',12=>'false'),array(3=>4414,4=>'Open Web Analytics Bot'),array(3=>3777,4=>'Twiceler',23=>'true'),array(3=>3997,8=>'Linux'),array(3=>4216,8=>'MacOSX',12=>'false'),array(3=>3838,8=>'WinXP'),array(3=>4231,8=>'MacOSX',12=>'false'),array(3=>4234,8=>'FreeBSD',12=>'false'),array(3=>4182,8=>'FreeBSD',12=>'false'),array(3=>3838,8=>'WinCE'),array(3=>3838,8=>'Win98'),array(3=>3838,8=>'Win95'),array(3=>4230,8=>'MacOSX',12=>'false'),array(3=>4174,8=>'FreeBSD',12=>'false'),array(3=>4217,8=>'MacOSX',12=>'false'),array(3=>3838,8=>'WinME'),array(3=>4218,8=>'MacOSX',12=>'false'),array(3=>4229,8=>'MacOSX',12=>'false'),array(3=>4506,5=>'4.3',6=>4,7=>3,8=>'Win32',12=>'true'),array(3=>3788,4=>'Extreme Picture Finder'),array(3=>4111,8=>'RISC OS'),array(3=>3603,4=>'TargetYourNews'),array(3=>4111,8=>'OS/2'),array(3=>4111,8=>'Unix'),array(3=>4111,8=>'Linux'),array(3=>4105,8=>'BeOS'),array(3=>3828,5=>'3.0',6=>3,7=>0,8=>'FreeBSD',15=>'false'),array(3=>3828,5=>'3.0',6=>3,7=>0,8=>'OpenBSD'),array(3=>3777,4=>'Iltrovatore-Setaccio'),array(3=>3603,4=>'Omea Reader',23=>'true'),array(3=>4111,8=>'IRIX'),array(3=>3997,8=>'RISC OS'),array(3=>3997,8=>'OS/2'),array(3=>3997,8=>'IRIX'),array(3=>3997,8=>'HP-UX'),array(3=>3997,8=>'Unix'),array(3=>3997,8=>'Linux'),array(3=>4236,8=>'NetBSD'),array(3=>4111,8=>'BeOS'),array(3=>4007,8=>'FreeBSD',12=>'false'),array(3=>4105,8=>'HP-UX'),array(3=>4105,8=>'IRIX'),array(3=>4098,8=>'RISC OS'),array(3=>4098,8=>'OS/2'),array(3=>4098,8=>'IRIX'),array(3=>4098,8=>'HP-UX'),array(3=>4098,8=>'Unix'),array(3=>4098,8=>'Linux'),array(3=>4236,8=>'Darwin'),array(3=>4236,8=>'CygWin'),array(3=>4236,8=>'Linux'),array(3=>4098,8=>'BeOS'),array(3=>4506,5=>'4.0',6=>4,7=>0,8=>'Win32',12=>'true'),array(3=>4302,4=>'Microsoft URL Control'),array(3=>4105,8=>'Unix'),array(3=>4105,8=>'RISC OS'),array(3=>4105,8=>'OS/2'),array(3=>3569,4=>'Miscellaneous Browsers',26=>'true'),array(3=>3836,4=>'Squid'),array(3=>4506,5=>'4.1',6=>4,7=>1,8=>'Win32',12=>'true'),array(3=>4506,5=>'4.2',6=>4,7=>2,8=>'Win32',12=>'true'),array(3=>4105,8=>'Linux'),array(3=>3997,8=>'BeOS'),array(3=>4111,8=>'HP-UX'),array(3=>4514,5=>'1.0',6=>1,7=>0,8=>'FreeBSD'),array(3=>4514,5=>'0.9',6=>0,7=>9,8=>'FreeBSD'),array(3=>4226,8=>'FreeBSD',12=>'false'),array(3=>4514,5=>'2.1',6=>2,7=>1,8=>'FreeBSD'),array(3=>4029,8=>'FreeBSD',12=>'false'),array(3=>4014,8=>'FreeBSD',12=>'false'),array(3=>4514,5=>'2.2',6=>2,7=>2,8=>'FreeBSD'),array(3=>4514,5=>'2.1',6=>2,7=>1,8=>'OpenBSD'),array(3=>4527,4=>'YahooSeeker/CafeKelsa'),array(3=>3950),array(3=>3569,4=>'Microsoft Outlook',5=>2010,6=>2010,14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',27=>2),array(3=>4222,8=>'MacOSX',12=>'false'),array(3=>4219,8=>'FreeBSD',12=>'false'),array(3=>3569,4=>'Microsoft Outlook',5=>2007,6=>2007,14=>'true',16=>'true',27=>2),array(3=>3596,4=>'Android Download Manager'),array(3=>3946),array(3=>4523,4=>'Sogou Develop Spider'),array(3=>4514,5=>'2.2',6=>2,7=>2,8=>'OpenBSD'),array(3=>4224,8=>'MacOSX',12=>'false'),array(3=>4414,4=>'WinScripter iNet Tools'),array(3=>4030,8=>'FreeBSD',12=>'false'),array(3=>4019,8=>'FreeBSD',12=>'false'),array(3=>4514,5=>'2.3',6=>2,7=>3,8=>'OpenBSD'),array(3=>3855,4=>'websitepulse checker'),array(3=>3657,4=>'HuaweiSymantecSpider'),array(3=>4017,8=>'FreeBSD',12=>'false'),array(3=>4514,5=>'2.3',6=>2,7=>3,8=>'Linux'),array(3=>4098,8=>'HP-UX'),array(3=>4098,8=>'IRIX'),array(3=>4105,8=>'RISC OS'),array(3=>4105,8=>'Unix'),array(3=>4098,8=>'BeOS'),array(3=>4172),array(3=>3855,4=>'maxamine.com--robot',23=>'true'),array(3=>4230,8=>'FreeBSD',12=>'false'),array(3=>4098,8=>'AIX'),array(3=>4534),array(3=>4098,8=>'RISC OS'),array(3=>4236,8=>'RISC OS'),array(3=>4236,8=>'OS/2'),array(3=>4236,8=>'Unix'),array(3=>3039),array(3=>4236,8=>'Linux'),array(3=>3039),array(3=>3997,8=>'AIX'),array(3=>4236,8=>'IRIX'),array(3=>3657,4=>'Netchart Adv Crawler',23=>'true'),array(3=>3039),array(3=>4216,8=>'FreeBSD',12=>'false'),array(3=>4236,8=>'BeOS'),array(3=>4236,8=>'HP-UX'),array(3=>4098,8=>'OS/2'),array(3=>3997,8=>'HP-UX'),array(3=>4514,5=>'2.1',6=>2,7=>1,8=>'Linux'),array(3=>3997,8=>'Unix'),array(3=>4111,8=>'OS/2'),array(3=>4111,8=>'RISC OS'),array(3=>4111,8=>'Unix'),array(3=>3997,8=>'RISC OS'),array(3=>4111,8=>'IRIX'),array(3=>4111,8=>'HP-UX'),array(3=>4514,5=>'2.2',6=>2,7=>2,8=>'Linux'),array(3=>4514,8=>'NetBSD'),array(3=>4111,8=>'AIX'),array(3=>4229,8=>'FreeBSD',12=>'false'),array(3=>4111,8=>'BeOS'),array(3=>4514,8=>'NetBSD'),array(3=>3997,8=>'OS/2'),array(3=>4105,8=>'AIX'),array(3=>4105,8=>'HP-UX'),array(3=>4475,4=>'BecomeBot'),array(3=>3838,8=>'MacPPC',12=>'false'),array(3=>4105,8=>'IRIX'),array(3=>3997,8=>'BeOS'),array(3=>4231,8=>'FreeBSD',12=>'false'),array(3=>4105,8=>'BeOS'),array(3=>3997,8=>'IRIX'),array(3=>3615,4=>'Browscap Mirror'),array(3=>4514,5=>'0.9',6=>0,7=>9,8=>'MacPPC'),array(3=>4549,4=>'MSNBot-NewsBlogs',5=>1,6=>1,7=>0),array(3=>3838,8=>'SunOS',12=>'false'),array(3=>3838,8=>'Linux',12=>'false'),array(3=>4105,8=>'OS/2'),array(3=>4098,8=>'Unix'),array(3=>3831,4=>'Bookmark search tool'),array(3=>4488,4=>'Googlebot-Mobile',14=>'false',15=>'false',16=>'false'),array(3=>3777,4=>'Infoseek'),array(3=>3603,4=>'NewsFox'),array(3=>3603,4=>'Cocoal.icio.us',23=>'true'),array(3=>4414,4=>'Ezic.com'),array(3=>4217,8=>'FreeBSD',12=>'false'),array(3=>4379,4=>'fantomas multiBlocker browser'),array(3=>4414,4=>'arachnode'),array(3=>3569,4=>'HP Secure Web Browser',8=>'OpenVMS',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>4488,4=>'AdsBot-Google-Mobile'),array(3=>4218,8=>'FreeBSD',12=>'false'),array(3=>3600,4=>'Atomic Email Hunter'),array(3=>4223,8=>'Linux',12=>'false'),array(3=>3399,4=>'copyright sheriff'),array(3=>4223,8=>'SunOS',12=>'false'),array(3=>4222,8=>'FreeBSD',12=>'false'),array(3=>3399,4=>'iCopyright Conductor'),array(3=>4224,8=>'FreeBSD',12=>'false'),array(3=>4046,8=>'SunOS',12=>'false'),array(3=>4012,8=>'Linux',12=>'false'),array(3=>4012,8=>'SunOS',12=>'false'),array(3=>3991,8=>'Linux',12=>'false'),array(3=>4046,8=>'Linux',12=>'false'),array(3=>4488,4=>'Google Enterprise'),array(3=>3991,8=>'SunOS',12=>'false'),array(3=>4488,4=>'Mediapartners-Google'),array(3=>3657,4=>'NSO_Debugger_User',23=>'true'),array(3=>4030,8=>'SunOS',12=>'false'),array(3=>3569,4=>'Copyright/Plagiarism',23=>'true',26=>'true'),array(3=>4030,8=>'Linux',12=>'false'),array(3=>3944,5=>'4.03',7=>3,8=>'Win98'),array(3=>3944,8=>'Win95'),array(3=>4514,5=>'2.3',6=>2,7=>3,8=>'Linux'),array(3=>4019,8=>'SunOS',12=>'false'),array(3=>4019,8=>'Linux',12=>'false'),array(3=>4549,4=>'MSNBot-Academic',5=>'1.0',6=>1,7=>0),array(3=>4488,4=>'Google Friend Connect'),array(3=>4518,4=>'Lycos-Spider_(T-Rex)'),array(3=>4007,8=>'SunOS',12=>'false'),array(3=>4007,8=>'Linux',12=>'false'),array(3=>3569,4=>'Windows Media Player',12=>'true',14=>'true',15=>'true',16=>'true',17=>'true'),array(3=>4488,4=>'googlebot-urlconsole'),array(3=>3997,8=>'AIX'),array(3=>4174,8=>'Linux',12=>'false'),array(3=>4236,8=>'BeOS'),array(3=>3600,4=>'8484 Boston Project'),array(3=>4234,8=>'Linux',12=>'false'),array(3=>4017,8=>'Linux',12=>'false'),array(3=>4523,4=>'Sogou Orion spider'),array(3=>4236,8=>'HP-UX'),array(3=>4514,5=>'0.9',6=>0,7=>9,8=>'Linux'),array(3=>4514,5=>'0.9',6=>0,7=>9,8=>'Win32',12=>'true'),array(3=>3838,8=>'Unix',12=>'false'),array(3=>4236,8=>'IRIX'),array(3=>4234,8=>'SunOS',12=>'false'),array(3=>3838,8=>'MacOSX',12=>'false'),array(3=>4226,8=>'SunOS',12=>'false'),array(3=>4226,8=>'Linux',12=>'false'),array(3=>4510,4=>'Baidu Mobile search'),array(3=>4022,4=>'TeragramWebcrawler',5=>'1.0',6=>1,7=>0),array(3=>4014,8=>'SunOS',12=>'false'),array(3=>4014,8=>'Linux',12=>'false'),array(3=>4174,8=>'SunOS',12=>'false'),array(3=>4017,8=>'SunOS',12=>'false'),array(3=>4029,8=>'Linux',12=>'false'),array(3=>4029,8=>'SunOS',12=>'false'),array(3=>4514,5=>'1.0',6=>1,7=>0,8=>'Linux'),array(3=>4514,5=>'1.0',6=>1,7=>0,8=>'Win32',12=>'true'),array(3=>4514,5=>'2.0',6=>2,7=>0,8=>'Linux'),array(3=>4236,8=>'OS/2'),array(3=>4236,8=>'Unix'),array(3=>3657,4=>'NetCarta_WebMapper',23=>'true'),array(3=>3831,4=>'LinkLint'),array(3=>4488,4=>'Google Web Preview'),array(3=>3831,4=>'Web Link Validator'),array(3=>4414,4=>'Internet Exploiter'),array(3=>3777,4=>'Mirago'),array(3=>4065),array(3=>4236,8=>'RISC OS'),array(3=>4414,4=>'AspTear'),array(3=>4219,8=>'SunOS',12=>'false'),array(3=>4182,8=>'SunOS',12=>'false'),array(3=>3828,5=>'3.0',6=>3,7=>0,8=>'Linux'),array(3=>3831,4=>'Funnel Web Profiler'),array(3=>4182,8=>'Linux',12=>'false'),array(3=>4111,8=>'AIX'),array(3=>3657,4=>'Radiation Retriever',23=>'true'),array(3=>4302,4=>'Microsoft Visio'),array(3=>3653,4=>'BackStreet Browser'),array(3=>4219,8=>'Linux',12=>'false'),array(3=>4105,8=>'AIX'),array(3=>3603,4=>'Wizz'),array(3=>3657,4=>'Poodle Predictor'),array(3=>3788,4=>'Web Image Collector'),array(3=>4098,8=>'AIX'),array(3=>4236,8=>'AIX'),array(3=>4412,4=>'GigabotSiteSearch'),array(3=>4216,8=>'Linux',12=>'false'),array(3=>4217,8=>'Linux',12=>'false'),array(3=>4514,5=>'1.0',6=>1,7=>0,8=>'Unix'),array(3=>4514,5=>'1.0',6=>1,7=>0,8=>'OS/2'),array(3=>3657,4=>'Semantic Discovery'),array(3=>3838,8=>'FreeBSD',12=>'false'),array(3=>4378,5=>'4.0',6=>4,7=>0,8=>'Unix'),array(3=>4523,4=>'Sogou Push Spider'),array(3=>3777,4=>'wadaino.jp',23=>'true'),array(3=>3950),array(3=>3946),array(3=>4488,4=>'Feedfetcher-Google',23=>'true',25=>'true'),array(3=>3657,4=>'Dumbfind'),array(3=>4216,8=>'SunOS',12=>'false'),array(3=>4514,5=>'0.9',6=>0,7=>9,8=>'OS/2'),array(3=>4514,5=>'0.9',6=>0,7=>9,8=>'Unix'),array(3=>4510,4=>'Baidu Image search'),array(3=>4224,8=>'Linux',12=>'false'),array(3=>4224,8=>'SunOS',12=>'false'),array(3=>3657,4=>'LookSeek',23=>'true'),array(3=>4217,8=>'SunOS',12=>'false'),array(3=>3831,4=>'Z-Add Link Checker'),array(3=>3657,4=>'Oracle Ultra Search'),array(3=>4229,8=>'Linux',12=>'false'),array(3=>4236,8=>'AIX'),array(3=>4414,4=>'Fake IE'),array(3=>4209,4=>'WordPress-Do-P'),array(3=>4523,4=>'Sogou-Test-Spider'),array(3=>3657,4=>'PlantyNet',23=>'true'),array(3=>4218,8=>'Linux',12=>'false'),array(3=>3894,4=>'ExactSeek Crawler'),array(3=>4222,8=>'Linux',12=>'false'),array(3=>4378,5=>'2.0',6=>2,7=>0,8=>'Unix'),array(3=>4218,8=>'SunOS',12=>'false'),array(3=>4229,8=>'SunOS',12=>'false'),array(3=>4510,4=>'Baidu Video search'),array(3=>4222,8=>'SunOS',12=>'false'),array(3=>3944,5=>'4.03',7=>3,8=>'WinNT'),array(3=>3944,8=>'Linux'),array(3=>3831,4=>'MetaGer-LinkChecker'),array(3=>4231,8=>'Linux',12=>'false'),array(3=>3777,4=>'SearchHippo'),array(3=>4231,8=>'SunOS',12=>'false'),array(3=>4230,8=>'Linux',12=>'false'),array(3=>3657,4=>'QuickFinder',23=>'true'),array(3=>4414,4=>'Website Downloader'),array(3=>4230,8=>'SunOS',12=>'false'),array(3=>3596,4=>'LightningDownload'),array(3=>4378,5=>'3.0',6=>3,7=>0,8=>'Unix'),array(3=>3596,4=>'Offline Downloader'),array(3=>4523,4=>'Sogou Pic Spider'),array(3=>4523,4=>'Sogou Head Spider'),array(3=>3855,4=>'Site Valet',23=>'true'),array(3=>3831,4=>'LinksManager'),array(3=>4414,4=>'Twisted PageGetter'),array(3=>3603,4=>'Feed For Free'),array(3=>3603,4=>'Safari RSS',8=>'MacOSX'),array(3=>3569,4=>'',26=>'true'),array(3=>3831,4=>'Link Valet',23=>'true'),array(3=>3831,4=>'Xenu\'s Link Sleuth',23=>'true'),array(3=>4414,4=>'Flaming AttackBot'),array(3=>4414,4=>'Fake IE'),array(3=>4414,4=>'Artera'),array(3=>3563,4=>'Forschungsportal'),array(3=>3657,4=>'masidani_bot'),array(3=>3657,4=>'magpie-crawler'),array(3=>3615,4=>'BrowscapUpdater'),array(3=>3777,4=>'Searchmee!'),array(3=>4551,4=>'W3C-mobileOK/DDC',24=>'true'),array(3=>3657,4=>'DomainWatcher Bot'),array(3=>4414,4=>'PEAR-PHP'),array(3=>3596,4=>'NetZip Downloader'),array(3=>3596,4=>'NexTools WebAgent'),array(3=>3657,4=>'Links4US-Crawler',23=>'true'),array(3=>3657,4=>'LetsCrawl.com',23=>'true'),array(3=>4414,4=>'Website eXtractor'),array(3=>3657,4=>'FollowSite',23=>'true'),array(3=>3657,4=>'A .NET Web Crawler',23=>'true'),array(3=>4475,4=>'Exabot'),array(3=>4510,4=>'Baidu Union'),array(3=>3569,4=>'Lycoris Desktop/LX',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true'),array(3=>4510,4=>'Baidu bookmark'),array(3=>4527,4=>'YahooExternalCache'),array(3=>4505,4=>'boitho.com-robot'),array(3=>4378,5=>'4.0',6=>4,7=>0,8=>'Linux'),array(3=>4510,4=>'Baidu News search'),array(3=>4378,5=>'3.0',6=>3,7=>0,8=>'Linux'),array(3=>4378,5=>'2.0',6=>2,7=>0,8=>'Linux'),array(3=>3569,4=>'Opera Mini',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>1),array(3=>4279,4=>'NewsGatorOnline'),array(3=>3657,4=>'Xerka',23=>'true'),array(3=>4549,4=>'msnbot-media',5=>'1.1',6=>1,7=>1),array(3=>3657,4=>'Keyword Density'),array(3=>4506,5=>'4.3',6=>4,7=>4,8=>'MacOSX'),array(3=>4527,4=>'YahooVideoSearch'),array(3=>3569,4=>'Research Projects',23=>'true',26=>'true'),array(3=>3279,4=>'EVE-minibrowser',15=>'false',16=>'false',18=>'false',19=>'false',20=>'false',21=>'false',22=>'false',23=>'false',26=>'false'),array(3=>4414,4=>'Website eXtractor'),array(3=>4549,4=>'msnbot-media',5=>'1.0',6=>1,7=>0),array(3=>4090,5=>'2.2',6=>2,7=>2),array(3=>4527,4=>'Scooter/3.3Y!CrawlX',5=>'3.3',6=>3,7=>3),array(4=>'DefaultProperties',5=>0,6=>0,7=>0,8=>'unknown',9=>'false',10=>'false',11=>'false',12=>'false',13=>'false',14=>'false',15=>'false',16=>'false',17=>'false',18=>'false',19=>'false',20=>'false',21=>'false',22=>'false',23=>'false',24=>'false',25=>'false',26=>'false',27=>0,28=>0),array(3=>4506,5=>'4.2',6=>4,7=>2,8=>'MacPPC'),array(3=>4491,4=>'HatenaScreenshot'),array(3=>4488,4=>'AppEngine-Google'),array(3=>4414,4=>'Inet - Eureka App'),array(3=>3657,4=>'niXXiebot-Foster'),array(3=>4491,4=>'Hatena Crawler'),array(3=>4523),array(3=>4506,5=>'4.0',6=>4,7=>0,8=>'MacPPC'),array(3=>4506,5=>'4.1',6=>4,7=>1,8=>'MacPPC'),array(3=>3797,4=>'VLC'),array(3=>4523,4=>'sogou web spider'),array(3=>4527,4=>'YahooFeedSeeker',25=>'true'),array(3=>3657,4=>'Talkro Web-Shot',23=>'true'),array(3=>4414,4=>'Crawl_Application'),array(3=>3657,4=>'Tutorial Crawler',23=>'true'),array(3=>3831,4=>'REL Link Checker'),array(3=>3657,4=>'DomainsBotBot',23=>'true'),array(3=>3838,8=>'SunOS',12=>'false'),array(3=>3596,4=>'StarDownloader'),array(3=>3775,4=>'FAST-WebCrawler'),array(3=>3596,4=>'Xaldon WebSpider'),array(3=>4414,4=>'Offline Explorer'),array(3=>3838,8=>'Linux',12=>'false'),array(3=>3657,4=>'BabalooSpider'),array(3=>3777,4=>'World Wide Weasel'),array(3=>4408,4=>'Exabot-Images',5=>'1.0',6=>1,7=>0),array(3=>3569,4=>'Download Managers',23=>'true',26=>'true'),array(3=>4510,4=>'Baidu Business search'),array(3=>3596,4=>'Download Express'),array(3=>3777,4=>'WebAlta Crawler',23=>'true'),array(3=>3569,4=>'E-Mail Harvesters',23=>'true',26=>'true'),array(3=>3569,4=>'Blue Coat Systems',23=>'true',26=>'true'),array(3=>4510,4=>'BaiduImageSpider'),array(3=>3569,4=>'Feeds Syndicators',25=>'true',26=>'true'),array(3=>3569,4=>'Windows Live Mail',5=>'7.0',6=>7,14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',27=>2),array(3=>4491,4=>'Hatena Bookmark'),array(3=>3569,4=>'Social Bookmarkers',26=>'true'),array(3=>3831,4=>'LinkextractorPro',23=>'true'),array(3=>3600,4=>'Franklin Locator'),array(3=>3600,4=>'Missigua Locator'),array(3=>3643,4=>'InternetArchive'),array(3=>4549,4=>'librabot'),array(3=>4549,4=>'MSNBot-News',5=>'1.0',6=>1,7=>0),array(3=>4488,4=>'Google-Video'),array(3=>4414,4=>'Zend_Http_Client'),array(3=>3569,4=>'Version Checkers',26=>'true'),array(3=>4527,4=>'YahooFeedSeeker',25=>'true'),array(3=>4527,4=>'Yahoo-MMCrawler',23=>'true'),array(3=>4551,4=>'W3C-checklink'),array(3=>4414,4=>'Web Downloader'),array(3=>4414,4=>'UtilMind HTTPGet'),array(3=>3615,4=>'Desktop Sidebar',23=>'true'),array(3=>3615,4=>'Browscap updater'),array(3=>3838,8=>'Unix',12=>'false'),array(3=>4491,4=>'Hatena Antenna'),array(3=>3563,4=>'USyd-NLP-Spider'),array(3=>4209,4=>'WordPress-B'),array(3=>3596,4=>'STEROID Download'),array(3=>3777,4=>'nuSearch'),array(3=>3995,4=>'Net::Trackback'),array(3=>3788,4=>'PhotoStickies'),array(3=>3603,4=>'FeedDigest'),array(3=>3601,4=>'BlueCoat ProxySG'),array(3=>3601,4=>'Cerberian'),array(3=>3596,4=>'Download Wonder'),array(3=>3596,4=>'Download Master'),array(3=>3596,4=>'DownloadSession'),array(3=>3777,4=>'URL Spider Pro'),array(3=>3777,4=>'ZE.bz'),array(3=>3777,4=>'SquigglebotBot',23=>'true'),array(3=>3831,4=>'ActiveBookmark'),array(3=>3831,4=>'Bookmark-Manager'),array(3=>4414,4=>'WinHttp'),array(3=>3569,4=>'Internet Archive',14=>'true',15=>'true',16=>'true',23=>'true',26=>'true'),array(3=>3657,4=>'Toata dragostea',23=>'true'),array(3=>3657,4=>'TencentTraveler'),array(3=>4488,4=>'Googlebot-Image'),array(3=>4488,4=>'Google-Sitemaps'),array(3=>3563,4=>'Taiga'),array(3=>3657,4=>'WebFilter Robot'),array(3=>4302,4=>'BITS'),array(3=>3831,4=>'RPT-HTTPClient',23=>'true'),array(3=>4302,4=>'MSN Feed Manager',23=>'false',25=>'true'),array(3=>3569,4=>'Offline Browsers',23=>'true',26=>'true'),array(3=>3653,4=>'Go Ahead Got-It'),array(3=>3657,4=>'PluckItCrawler',24=>'true'),array(3=>4414,4=>'fetch libfetch'),array(3=>3569,4=>'General Crawlers',26=>'true'),array(3=>4107,4=>'Sony PS2',8=>'Linux'),array(3=>3797,4=>'MPlayer'),array(3=>4357),array(3=>3569,4=>'Chromium',8=>'Linux',27=>1),array(3=>3039),array(3=>3569,4=>'VLC Media Player'),array(3=>3039),array(3=>3657,4=>'altervista.org'),array(3=>4430,4=>'ConveraCrawler'),array(3=>4523,4=>'Sogou/Image Crawler'),array(3=>4414,4=>'Web Downloader'),array(3=>3657,4=>'Lsearch/sondeur',23=>'true'),array(3=>3603,4=>'FeedDemon',8=>'Win32'),array(3=>3603,4=>'NewsAlloy'),array(3=>4505,4=>'boitho.com-dc'),array(3=>3603,4=>'MagpieRSS'),array(3=>3603,4=>'Technoratibot'),array(3=>4488,4=>'Googlebot/Test'),array(3=>4414,4=>'Website Quester'),array(3=>3596,4=>'Speed Download'),array(3=>3851),array(3=>3855,4=>'UpTime Checker'),array(3=>3596,4=>'SmartDownload'),array(3=>4549,4=>'MSR-ISRCCrawler'),array(3=>3777,4=>'OpenISearch (Amazon)'),array(3=>3777,4=>'ObjectsSearch'),array(3=>3600,4=>'E-Mail Collector'),array(3=>4414,4=>'MFC_Tear_Sample'),array(3=>4549,4=>'msnbot-products'),array(3=>4414,4=>'WWW-Mechanize'),array(3=>3600,4=>'CherryPickerElite'),array(3=>3657,4=>'LinkedInBot'),array(3=>4488,4=>'Googlebot-News'),array(3=>3777,4=>'HyperEstraier',23=>'true'),array(3=>3912),array(3=>3569,4=>'Lotus Notes',5=>'5.0',6=>5),array(3=>3657,4=>'Webclipping.com',23=>'true'),array(3=>3569,4=>'Lotus Notes',5=>'6.0',6=>6),array(3=>3657,4=>'Visicom Toolbar'),array(3=>3563,4=>'JUST-CRAWLER'),array(3=>4464,5=>'3.8',6=>3,7=>8,8=>'OpenVMS'),array(3=>3569,4=>'Online Scanners',23=>'true'),array(3=>4464,5=>'3.7',6=>3,7=>7,8=>'OpenVMS'),array(3=>3699,4=>'Secure Computing Corporation'),array(3=>3525,4=>'BitTorrentMac'),array(3=>3279,4=>'Enigma Browser'),array(3=>3657,4=>'Tagyu'),array(3=>3569,4=>'Thunderbird',5=>'3.0',6=>3,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true'),array(3=>3708,4=>'FeedValidator'),array(3=>3569,4=>'Best of the Web',14=>'true',16=>'true',26=>'true'),array(3=>3569,4=>'HTML Validators',26=>'true'),array(3=>4414,4=>'libcurl'),array(3=>4414,4=>'libWeb/clsHTTP'),array(3=>4527,4=>'YRL_ODP_CRAWLER',23=>'true'),array(3=>3657,4=>'ScollSpider',23=>'true'),array(3=>3569,4=>'Thunderbird',5=>'1.0',6=>1,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true'),array(3=>3569,4=>'Thunderbird',5=>'2.0',6=>2,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true'),array(3=>3831,4=>'Bookmark Buddy'),array(3=>4488,4=>'Googlebot',5=>'2.1',6=>2,7=>1),array(3=>3788,4=>'FlatArts Favorites Icon Tool'),array(3=>3657,4=>'Pete-Spider',23=>'true'),array(3=>3603,4=>'Protopage'),array(3=>4551,4=>'W3C_Validator'),array(3=>3596,4=>'FreshDownload'),array(3=>3615,4=>'UpdateBrowscap'),array(3=>3596,4=>'Internet Ninja'),array(3=>3777,4=>'Innerprise Enterprise Search'),array(3=>4527,4=>'Yahoo-MMAudVid'),array(3=>3399,4=>'CopyRightCheck'),array(3=>3039),array(3=>3596,4=>'Download Ninja'),array(3=>3039),array(3=>3596,4=>'Kontiki Client'),array(3=>3596,4=>'Download Demon'),array(3=>4414,4=>'ActiveRefresh'),array(3=>3569,4=>'Opera Mini',5=>'3.0',6=>3,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>1),array(3=>3279,4=>'Avant Browser'),array(3=>3894,4=>'Jayde Crawler'),array(3=>3603,4=>'Feedshow'),array(3=>3569,4=>'IE',5=>'7.0',6=>7,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>2,28=>9),array(3=>3777,4=>'ALeadSoftbot'),array(3=>4414,4=>'VCI WebViewer'),array(3=>3657,4=>'Twitterbot'),array(3=>3569,4=>'',12=>'true',24=>'true'),array(3=>4551,4=>'W3C-mobileOK',9=>'false',10=>'false',11=>'false',12=>'false',13=>'false',14=>'false',15=>'false',16=>'false',17=>'false',18=>'false',19=>'false',20=>'false',21=>'false',22=>'false',23=>'false',24=>'false',25=>'false',26=>'true'),array(3=>3603,4=>'NetNewsWire'),array(3=>3603,4=>'NetVisualize'),array(3=>3777,4=>'Cogentbot'),array(3=>3603,4=>'Apple-PubSub'),array(3=>3657,4=>'favorstarbot',23=>'true'),array(3=>3569,4=>'IE',5=>'5.5',6=>5,7=>5,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>2,28=>9),array(3=>4527,4=>'Yahoo! Mindset'),array(3=>3399,4=>'FairAd Client'),array(3=>3525,4=>'Transmission'),array(3=>3569,4=>'Opera Mini',5=>'6.0',6=>6,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>1),array(3=>3039),array(3=>3569,4=>'IE',5=>'7.0',6=>7,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>2,28=>9),array(3=>3569,4=>'Chrome',27=>1),array(3=>3569,4=>'Opera Mini',5=>'5.0',6=>5,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>1),array(3=>3777,4=>'BigClique.com/BigClic.com'),array(3=>3828,5=>'3.0',6=>3,7=>0,15=>'false'),array(3=>3569,4=>'Opera Mini',5=>'4.0',6=>4,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>1),array(3=>3569,4=>'QuickTime',5=>'10.0',6=>10,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true'),array(3=>3657,4=>'NetID.com Bot',23=>'true'),array(3=>3569,4=>'IE',5=>'8.0',6=>8,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>2,28=>9),array(3=>4523,4=>'Sogou/Shaboyi Spider'),array(3=>4414,4=>'WebDownloader'),array(3=>3851),array(3=>3777,4=>'StackRambler'),array(3=>4131,4=>'HiddenMarket',23=>'true'),array(3=>3788,4=>'naoFavicon4IE'),array(3=>3657,4=>'WebCrawler'),array(3=>3569,4=>'Safari',12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>1),array(3=>3855,4=>'Kenjin Spider'),array(3=>3855,4=>'Kevin',23=>'true'),array(3=>4527,4=>'YahooFeedSeeker',25=>'true'),array(3=>3039),array(3=>3569,4=>'Fast/AllTheWeb',14=>'true',16=>'true',26=>'true'),array(3=>4488,4=>'AdsBot-Google'),array(3=>3569,4=>'Search Engines',26=>'true'),array(3=>3657,4=>'hitcrawler',23=>'true'),array(3=>3596,4=>'RealDownload'),array(3=>3569,4=>'IE',5=>'8.0',6=>8,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>2,28=>9),array(3=>3600,4=>'Netprospector'),array(3=>3777,4=>'YadowsCrawler'),array(3=>3039),array(3=>3569,4=>'IE',5=>'6.0',6=>6,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>2,28=>9),array(3=>3569,4=>'Opera Mini',5=>'2.0',6=>2,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>1),array(3=>4279,4=>'NetNewsWire',8=>'MacOSX'),array(3=>3788,4=>'Cydral Web Image Search',23=>'true'),array(3=>3569,4=>'Image Crawlers',23=>'true',26=>'true'),array(3=>3039),array(3=>3836,4=>'Proxomitron'),array(3=>4430,4=>'CrawlConvera'),array(3=>3569,4=>'Konqueror',5=>'4.6',6=>4,7=>6,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>3657,4=>'ShopWiki',5=>'1.0',6=>1,7=>0),array(3=>3569,4=>'SeaMonkey',5=>'2.1',6=>2,7=>1,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3831,4=>'Powermarks'),array(3=>4414,4=>'GameSpyHTTP'),array(3=>3569,4=>'Media Players',24=>'true'),array(3=>4510,4=>'AC-BaiduBot'),array(3=>3569,4=>'SeaMonkey',5=>'2.0',6=>2,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3569,4=>'Konqueror',5=>'4.5',6=>4,7=>5,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>3777,4=>'Zatka'),array(3=>3177),array(3=>3657,4=>'TheInformant',23=>'true'),array(3=>3569,4=>'Chromium',5=>'11.0',6=>11,8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3563,4=>'Theme Spider'),array(3=>3569,4=>'Chromium',5=>'10.0',6=>10,8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4510,4=>'BaiDu'),array(3=>3569,4=>'Chromium',5=>'14.0',6=>14,8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4527,4=>'YahooFeedSeeker',25=>'true'),array(3=>3569,4=>'Chromium',5=>'12.0',6=>12,8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3411,5=>'10.0',6=>10,7=>0),array(3=>3777,4=>'GurujiBot',23=>'true'),array(3=>3569,4=>'QuickTime',5=>'7.6',6=>7,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true'),array(3=>3569,4=>'QuickTime',5=>'7.0',6=>7,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true'),array(3=>3411,5=>'11.0',6=>11,7=>0),array(3=>3563,4=>'Shim Crawler'),array(3=>3777,4=>'GoGuidesBot'),array(3=>3831,4=>'LinkSweeper'),array(3=>3399,4=>'TurnitinBot'),array(3=>4414,4=>'BlockNote.Net'),array(3=>3569,4=>'SeaMonkey',5=>'2.3',6=>2,7=>3,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3831,4=>'JCheckLinks'),array(3=>3399,4=>'TutorGig'),array(3=>3569,4=>'Konqueror',5=>'4.0',6=>4,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>3569,4=>'SeaMonkey',5=>'2.4',6=>2,7=>4,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3777,4=>'i1searchbot'),array(3=>3894,4=>'exactseek.com'),array(3=>3569,4=>'Konqueror',5=>'3.0',6=>3,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>3831,4=>'LinkChecker'),array(3=>3569,4=>'SeaMonkey',5=>'2.5',6=>2,7=>5,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Link Checkers',26=>'true'),array(3=>3569,4=>'SeaMonkey',5=>'2.2',6=>2,7=>2,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'SeaMonkey',5=>'1.0',6=>1,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>4512,4=>'CazoodleBot'),array(3=>3596,4=>'GetRightPro'),array(3=>3569,4=>'Proxy Servers',23=>'true'),array(3=>4551,4=>'P3P Validator'),array(3=>3569,4=>'Opera',12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',27=>1),array(3=>3600,4=>'ProWebWalker'),array(3=>3777,4=>'LocalcomBot'),array(3=>4527,4=>'YahooFeedSeeker',25=>'true'),array(3=>4527,4=>'Yahoo Mindset'),array(3=>3603,4=>'FeedGhost',5=>'1.0',6=>1,7=>0),array(3=>3777,4=>'Twingly Recon',23=>'true'),array(3=>3569,4=>'QuickTime',5=>'5.0',6=>5,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true'),array(3=>3836,4=>'Anonymizied'),array(3=>3777,4=>'TerrawizBot',23=>'true'),array(3=>3855,4=>'URLy Warning'),array(3=>3653,4=>'TweakMASTER'),array(3=>4527,4=>'YahooFeedSeeker',25=>'true'),array(3=>3569,4=>'Avant Browser',12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>2),array(3=>3569,4=>'Navigator',5=>'9.0',6=>9,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3777,4=>'RedCell'),array(3=>3569,4=>'Chromium',5=>'19.0',6=>19,8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Site Monitors',26=>'true'),array(3=>3653,4=>'IE Offline Browser'),array(3=>3569,4=>'Chromium',5=>'17.0',6=>17,8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3600,4=>'ExtractorPro'),array(3=>3569,4=>'Chromium',5=>'18.0',6=>18,8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3600,4=>'EMAILsearcher'),array(3=>3950),array(3=>3603,4=>'GreatNews',5=>'1.0',6=>1,7=>0),array(3=>3657,4=>'metatagsdir',23=>'true'),array(3=>4408,4=>'Exabot-Test'),array(3=>3569,4=>'RockMelt',5=>'0.9',7=>9,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Chromium',5=>'13.0',6=>13,8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4414,4=>'IrssiUrlLog'),array(3=>3569,4=>'Lunascape',5=>'5.1',6=>5,7=>1,8=>'Win32',12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true'),array(3=>4268),array(3=>3569,4=>'Chromium',5=>'15.0',6=>15,8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3596,4=>'Net Vampire'),array(3=>3569,4=>'Arora',12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>3),array(3=>3657,4=>'Covario-IDS/*'),array(3=>3569,4=>'Lunascape',5=>'5.0',6=>5,8=>'Win32',12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true'),array(3=>3569,4=>'SeaMonkey',5=>'1.1',6=>1,7=>1,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>4475,4=>'MonkeyCrawl'),array(3=>3525,4=>'uTorrentMac'),array(3=>3603,4=>'SharpReader'),array(3=>4551,4=>'W3CLineMode'),array(3=>3569,4=>'Chromium',5=>'16.0',6=>16,8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3777,4=>'Flatland'),array(3=>3279,4=>'WWW Browser',5=>'1.69',6=>1,7=>69,8=>'Win16',27=>3),array(3=>3569,4=>'Lunascape',5=>'6.0',6=>6,8=>'Win32',12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true'),array(3=>3946),array(3=>3569,4=>'QuickTime',5=>'6.0',6=>6,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true'),array(3=>4414,4=>'MovableType Web Log'),array(3=>3657,4=>'panscient.com',23=>'true'),array(3=>3777,4=>'FyberSpider',23=>'true'),array(3=>3279,4=>'Ace Explorer'),array(3=>3777,4=>'GroschoBot'),array(3=>3279,4=>'NetRecorder'),array(3=>3569,4=>'Firefox',5=>'11.0',6=>11,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3279,4=>'GreenBrowser',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>2),array(3=>3569,4=>'Jayde Online',14=>'true',16=>'true',26=>'true'),array(3=>3788,4=>'IconSurf'),array(3=>3603,4=>'FeedBurner'),array(3=>3569,4=>'OmniWeb',5=>'5.10',6=>5,7=>10,8=>'MacOSX',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3603,4=>'intraVnews'),array(3=>3603,4=>'Netvibes'),array(3=>3603,4=>'Omnipelagos'),array(3=>4408,4=>'Exalead NG',23=>'true'),array(3=>3569,4=>'OmniWeb',5=>'5.11',6=>5,7=>11,8=>'MacOSX',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3600,4=>'WebEnhancer'),array(3=>3600,4=>'Atomic_Email'),array(3=>3596,4=>'LMQueueBot'),array(3=>3600,4=>'ContactBot'),array(3=>3600,4=>'E-Mail Siphon'),array(3=>3777,4=>'Mnogosearch'),array(3=>3525,4=>'BitTornado'),array(3=>3596,4=>'BitTorrent'),array(3=>3569,4=>'K-Meleon',5=>'1.6',6=>1,7=>6,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>3569,4=>'SEMC Browser',8=>'JAVA',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>1),array(3=>3831,4=>'RLinkCheker'),array(3=>3569,4=>'Firefox',5=>'12.0',6=>12,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'K-Meleon',5=>'1.1',6=>1,7=>1,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>3569,4=>'K-Meleon',5=>'1.5',6=>1,7=>5,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>3831,4=>'CheckLinks'),array(3=>3569,4=>'iVia Project',14=>'true',16=>'true',26=>'true'),array(3=>3596,4=>'Net_Vampire'),array(3=>3569,4=>'Opera Mobi',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>2),array(3=>4172),array(3=>3777,4=>'webcrawl.net'),array(3=>3831,4=>'AgentName'),array(3=>3569,4=>'K-Meleon',5=>'1.0',6=>1,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>3777,4=>'FDSE Robot'),array(3=>3855,4=>'URL Control'),array(3=>4414,4=>'http generic'),array(3=>3855,4=>'URL_Access'),array(3=>4414,4=>'HTMLParser'),array(3=>4549,4=>'msnbot',5=>'2.0',6=>2,7=>0,10=>'true'),array(3=>3855,4=>'NetMechanic'),array(3=>4414,4=>'IP*Works!'),array(3=>3569,4=>'Iron',12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>1),array(3=>4414,4=>'iexplore.exe'),array(3=>3569,4=>'Netscape',5=>'6.0',6=>6,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3797,4=>'MPlayer',5=>'0.9',6=>0,7=>9),array(3=>3525,4=>'libtorrent'),array(3=>3797,4=>'WinAmp'),array(3=>4414,4=>'WebGrabber'),array(3=>3657,4=>'SqwidgeBot'),array(3=>4022,4=>'Seram Server'),array(3=>4414,4=>'DeepIndexer'),array(3=>4527,4=>'YahooFeedSeeker',25=>'true'),array(3=>3569,4=>'Netscape',5=>'4.0',6=>4,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>1),array(3=>4491,4=>'Hatena RSS',25=>'true'),array(3=>3569,4=>'Access NetFront',5=>'2.0',6=>2,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>2),array(3=>4523,4=>'Sogou/Spider'),array(3=>4414,4=>'WebSnatcher'),array(3=>4414,4=>'Webster Pro'),array(3=>3569,4=>'Access NetFront',5=>'3.0',6=>3,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>2),array(3=>4491,4=>'Feed Find',25=>'true'),array(3=>4549,4=>'msnbot-mobile',5=>'1.1',6=>1,7=>1),array(3=>3569,4=>'Netscape',5=>'8.0',6=>8,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>4414,4=>'WebGatherer'),array(3=>4414,4=>'WebStripper'),array(3=>4414,4=>'SiteSucker'),array(3=>3657,4=>'NextopiaBOT'),array(3=>4488,4=>'Google Search Appliance',23=>'true'),array(3=>3657,4=>'Nudelsalat',23=>'true'),array(3=>3569,4=>'Netscape',5=>'7.0',6=>7,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3569,4=>'Netscape',5=>'9.0',6=>9,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3643,4=>'Internet Archive'),array(3=>4414,4=>'SiteSnagger'),array(3=>4414,4=>'SiteParser'),array(3=>4551,4=>'W3C-WebCon'),array(3=>4414,4=>'DISCo Pump'),array(3=>3836,4=>'ProxyTester',23=>'true',26=>'true'),array(3=>4527,4=>'YahooSeeker',24=>'true'),array(3=>3657,4=>'BitlyBot'),array(3=>3563,4=>'Gulper Web Bot'),array(3=>3569,4=>'Chromium',5=>'9.0',6=>9,8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3411,5=>'9.0',6=>9,7=>0),array(3=>3411,5=>'8.0',6=>8,7=>0),array(3=>3657,4=>'CyberPatrol',23=>'true'),array(3=>3569,4=>'Chromium',5=>'6.0',6=>6,8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3411,5=>'4.0',6=>4,7=>0),array(3=>3411,5=>'7.0',6=>7,7=>0),array(3=>4385,12=>'false'),array(3=>3657,4=>'UbiCrawler'),array(3=>3569,4=>'Chromium',5=>'8.0',6=>8,8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4475,4=>'BecomeBot'),array(3=>3657,4=>'Generic Crawler',23=>'true'),array(3=>3569,4=>'Chromium',5=>'7.0',6=>7,8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Firefox',5=>'10.0',6=>10,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4527,4=>'Yahoo-Blogs'),array(3=>4491,4=>'URI::Fetch'),array(3=>3836,4=>'Anonymizer'),array(3=>4527,4=>'Yahoo Pipes'),array(3=>3836,4=>'Anonymizied'),array(3=>3569,4=>'',24=>'true'),array(3=>3569,4=>'Opera',5=>'10.50',6=>10,7=>50,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3600,4=>'www4mail'),array(3=>4279,4=>'NewsGator',23=>'true'),array(3=>3569,4=>'Chrome',5=>'12.0',6=>12,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Feeds Blogs',25=>'true',26=>'true'),array(3=>4549,4=>'msnbot',5=>'1.0',6=>1,7=>0),array(3=>3569,4=>'ELinks',5=>'0.10',7=>10,14=>'true',16=>'true'),array(3=>3569,4=>'Chrome',5=>'11.0',6=>11,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4480,5=>'2.0',6=>2,7=>0),array(3=>3569,4=>'Google Code'),array(3=>3569,4=>'Firefox',5=>'7.0',6=>7,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3657,4=>'KBeeBot',23=>'true'),array(3=>4414,4=>'WebWhacker'),array(3=>3399,4=>'SlySearch'),array(3=>4480,5=>'1.0',6=>1,7=>0),array(3=>3569,4=>'Firefox',5=>'9.0',6=>9,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Opera',5=>'10.00',6=>10,7=>0,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3855,4=>'EasyRider'),array(3=>4534),array(3=>3569,4=>'Chrome',5=>'10.0',6=>10,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Firefox',5=>'4.0',6=>4,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Opera',5=>'10.10',6=>10,7=>10,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3596,4=>'BitBeamer'),array(3=>3569,4=>'Opera',5=>'14.00',6=>14,7=>0,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Chrome',5=>'17.0',6=>17,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3777,4=>'Branzel',23=>'true'),array(3=>3569,4=>'Opera',5=>'13.00',6=>13,7=>0,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Firefox',5=>'6.0',6=>6,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Opera',5=>'12.00',6=>12,7=>0,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3777,4=>'Mail.Ru'),array(3=>3569,4=>'Firefox',5=>'5.0',6=>5,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Translators',14=>'true',16=>'true',26=>'true'),array(3=>3777,4=>'Tarantula',23=>'true'),array(3=>3569,4=>'Chrome',5=>'18.0',6=>18,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4551,4=>'W3C Unicorn'),array(3=>3569,4=>'Chrome',5=>'19.0',6=>19,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4378),array(3=>3657,4=>'Safe-t.net Web Filtering Service',23=>'true'),array(3=>3569,4=>'Opera',5=>'15.00',6=>15,7=>0,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Opera',5=>'11.10',6=>11,7=>10,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Opera',5=>'11.00',6=>11,7=>0,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Firefox',5=>'4.2',6=>4,7=>2,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4408,4=>'NG-Search'),array(3=>3855,4=>'SITECHECKER'),array(3=>3855,4=>'NetReality'),array(3=>3777,4=>'Popdex'),array(3=>3569,4=>'Chrome',5=>'13.0',6=>13,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4549,4=>'msnbot',5=>'1.1',6=>1,7=>1),array(3=>3657,4=>'Cynthia',5=>'1.0',6=>1,7=>0),array(3=>3777,4=>'Search-10'),array(3=>3855,4=>'WebPatrol'),array(3=>3596,4=>'PicaLoader'),array(3=>3569,4=>'Chrome',5=>'16.0',6=>16,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Chrome',5=>'15.0',6=>15,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Chrome',5=>'14.0',6=>14,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Opera',5=>'10.60',6=>10,7=>60,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'NameProtect',23=>'true',26=>'true'),array(3=>3855,4=>'WebMon'),array(3=>3569,4=>'Firefox',5=>'3.5',6=>3,7=>5,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4414,4=>'BasicHTTP'),array(3=>4414,4=>'CFNetwork'),array(3=>3569,4=>'Mozilla',5=>'1.0',6=>1,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>4414,4=>'ColdFusion Task Scheduler'),array(3=>3831,4=>'LinkAlarm'),array(3=>3797,4=>'RealPlayer'),array(3=>3569,4=>'Mozilla',5=>'1.7',6=>1,7=>7,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3831,4=>'LinkWalker'),array(3=>3569,4=>'Mozilla',5=>'1.1',6=>1,7=>1,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>4414,4=>'Ad Muncher'),array(3=>3831,4=>'FindLinks'),array(3=>4414,4=>'ColdFusion'),array(3=>3657,4=>'Sunrise',23=>'true'),array(3=>4414,4=>'DataCha0s'),array(3=>3777,4=>'Indian Language Web Search Engine'),array(3=>3569,4=>'IE',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>1),array(3=>4527,4=>'YahooYSMcm'),array(3=>3657,4=>'Surf Knight',23=>'true'),array(3=>3797,4=>'MPlayer',5=>'1.0',6=>1,7=>0),array(3=>3569,4=>'Firefox',5=>'2.0',6=>2,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3657,4=>'SurveyBot',23=>'true'),array(3=>3831,4=>'Robozilla'),array(3=>3563,4=>'Zao-Crawler'),array(3=>3836,4=>'Anonymous'),array(3=>3777,4=>'Amfibi'),array(3=>3836,4=>'SilentSurf'),array(3=>3836,4=>'SmallProxy'),array(3=>3777,4=>'RawGrunt'),array(3=>3279,4=>'SlimBrowser'),array(3=>3569,4=>'Mozilla',5=>'1.5',6=>1,7=>5,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3777,4=>'Eule-Robot'),array(3=>3653,4=>'Check&Get'),array(3=>3836,4=>'SurfControl'),array(3=>3569,4=>'Firefox',5=>'1.0',6=>1,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3657,4=>'WebTrends'),array(3=>3569,4=>'Mozilla',5=>'1.3',6=>1,7=>3,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3569,4=>'Mozilla',5=>'1.2',6=>1,7=>2,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3657,4=>'WebCollage',23=>'true'),array(3=>3563,4=>'OutfoxBot'),array(3=>3569,4=>'Mozilla',5=>'1.6',6=>1,7=>6,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3569,4=>'NetPositive',8=>'BeOS',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true'),array(3=>3788,4=>'FOTOCHECKER',23=>'true'),array(3=>3569,4=>'Mozilla',5=>'1.4',6=>1,7=>4,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3569,4=>'Firefox',5=>'3.6',6=>3,7=>6,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Mozilla',5=>'1.8',6=>1,7=>8,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3569,4=>'Maxthon',5=>'3.0',6=>3,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3603,4=>'Gregarius'),array(3=>4414,4=>'SiteWinder'),array(3=>3569,4=>'ELinks',5=>'0.13',7=>13,14=>'true',16=>'true'),array(3=>3569,4=>'Maxthon',5=>'2.0',6=>2,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>4414,4=>'ScoutAbout'),array(3=>4549,4=>'llssbot',5=>'1.0',6=>1,7=>0),array(3=>4414,4=>'RepoMonkey'),array(3=>3657,4=>'Mozdex'),array(3=>4414,4=>'SuperHTTP'),array(3=>3569,4=>'ELinks',5=>'0.12',7=>12,14=>'true',16=>'true'),array(3=>4414,4=>'webbandit'),array(3=>3569,4=>'Playstation',8=>'WAP',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true'),array(3=>3995,4=>'WordPress'),array(3=>3657,4=>'MedHunt',5=>'0.3',6=>0,7=>3),array(3=>3603,4=>'Akregator'),array(3=>3569,4=>'ELinks',5=>'0.11',7=>11,14=>'true',16=>'true'),array(3=>3569,4=>'OmniWeb',5=>'5.0',6=>5,8=>'MacOSX',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>4414,4=>'Web Magnet'),array(3=>4414,4=>'gnome-vfs'),array(3=>3603,4=>'RssBandit'),array(3=>4414,4=>'httpclient'),array(3=>4518,4=>'Lycos-Proxy'),array(3=>4414,4=>'HTTPFetch'),array(3=>4414,4=>'HttpSession'),array(3=>3788,4=>'Mister PIX'),array(3=>3569,4=>'Firefox',5=>'3.0',6=>3,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3657,4=>'shelob',23=>'true'),array(3=>3657,4=>'SeznamBot',23=>'true'),array(3=>3569,4=>'Firefox',5=>'8.0',6=>8,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3788,4=>'pixfinder'),array(3=>3603,4=>'RssBar',5=>'1.2',6=>1,7=>2),array(3=>3788,4=>'Camcrawler'),array(3=>3657,4=>'RedCarpet',23=>'true'),array(3=>3603,4=>'SimplePie'),array(3=>3569,4=>'Firefox',5=>'3.1',6=>3,7=>1,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'General RSS',25=>'true',26=>'true'),array(3=>3777,4=>'LapozzBot'),array(3=>3788,4=>'CFNetwork'),array(3=>4414,4=>'ICE_GetFile'),array(3=>3569,4=>'Mozilla',5=>'1.9',6=>1,7=>9,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3777,4=>'ZipppBot'),array(3=>3525,4=>'BitComet'),array(3=>3525,4=>'KTorrent'),array(3=>3657,4=>'Europe Internet Portal'),array(3=>3657,4=>'Search Fst'),array(3=>3657,4=>'Pajaczek',23=>'true'),array(3=>3657,4=>'Generic Crawler',23=>'true'),array(3=>3657,4=>'VengaBot',23=>'true'),array(3=>3777,4=>'DiamondBot'),array(3=>3777,4=>'antibot'),array(3=>3657,4=>'Omea Pro'),array(3=>3657,4=>'Drupal'),array(3=>4408,4=>'Exabot',5=>'2.0',6=>2,7=>0),array(3=>4527,4=>'Yahoo! My Browser'),array(3=>4408,4=>'Exabot',5=>'3.0',6=>3,7=>0,8=>'Liberate'),array(3=>4318,4=>'DNS Group Crawler'),array(3=>3657,4=>'BilgiBot',23=>'true'),array(3=>3603,4=>'TouchStone',25=>'true'),array(3=>3777,4=>'iSEEKbot'),array(3=>3777,4=>'KRetrieve',23=>'true'),array(3=>3569,4=>'Fennec',5=>'1.1',6=>1,7=>1,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>3),array(3=>3569,4=>'Fennec',5=>'4.0',6=>4,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>3),array(3=>3569,4=>'Firefox Mobile',5=>'1.0',6=>1,14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>3),array(3=>3777,4=>'Swiss Search Engine'),array(3=>3777,4=>'Tkensaku'),array(3=>3777,4=>'SiteSpider'),array(3=>3569,4=>'Fennec',5=>'5.0',6=>5,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>3),array(3=>3777,4=>'NavissoBot'),array(3=>3777,4=>'Linknzbot'),array(3=>3569,4=>'Fennec',5=>'7.0',6=>7,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>3),array(3=>3777,4=>'Sagoo',5=>'1.0',6=>1,7=>0),array(3=>3777,4=>'miniRank'),array(3=>3569,4=>'Fennec',5=>'6.0',6=>6,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>3),array(3=>3777,4=>'YodaoBot',23=>'true'),array(3=>3563,4=>'HooWWWer'),array(3=>3596,4=>'SuperBot'),array(3=>3569,4=>'BlackBerry',8=>'BlackBerry OS',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>2),array(3=>3569,4=>'iPod Touch',8=>'iPhone OSX',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>2),array(3=>3569,4=>'Opera',5=>'9.60',6=>9,7=>60,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4414,4=>'InetURL'),array(3=>4414,4=>'PageNest'),array(3=>3569,4=>'Arora',5=>'0.10',7=>10,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Arora',5=>'0.11',7=>11,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4414,4=>'HttpUnit'),array(3=>3836,4=>'Anonymous'),array(3=>3855,4=>'Webcheck',5=>'1.0',6=>1,7=>0),array(3=>3569,4=>'Opera',5=>'9.50',6=>9,7=>50,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4516,5=>'10.0',6=>10,7=>0),array(3=>3596,4=>'NetPumper'),array(3=>3836,4=>'CE-Preload'),array(3=>3596,4=>'P3P Client'),array(3=>3596,4=>'NetSucker'),array(3=>4414,4=>'Sherlock'),array(3=>3600,4=>'EMailWolf'),array(3=>4414,4=>'WebSauger'),array(3=>4279,4=>'NewsFire'),array(3=>3569,4=>'Chrome',5=>'6.0',6=>6,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>4302,4=>'MFHttpScan'),array(3=>4551,4=>'W3CRobot'),array(3=>3606,4=>'Twitturly',23=>'true'),array(3=>3831,4=>'LinkScan'),array(3=>3831,4=>'WorQmada'),array(3=>3569,4=>'Chrome',5=>'7.0',6=>7,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3569,4=>'Chrome',5=>'8.0',6=>8,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3603,4=>'LinkLint'),array(3=>4414,4=>'WebCopier'),array(3=>4414,4=>'URL2File'),array(3=>4414,4=>'WebFetch'),array(3=>3603,4=>'RSS Menu'),array(3=>3569,4=>'Chrome',5=>'9.0',6=>9,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>4414,4=>'WebReaper'),array(3=>3596,4=>'lftp'),array(3=>3177),array(3=>3569,4=>'Word Press',14=>'true',16=>'true',23=>'true',26=>'true'),array(3=>3569,4=>'Safari',5=>'4.0',6=>4,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Safari',5=>'5.0',6=>5,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Safari',5=>'3.0',6=>3,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3569,4=>'Safari',5=>'2.0',6=>2,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>4516,5=>'11.0',6=>11,7=>0),array(3=>4513,5=>'0.8',6=>0,7=>8),array(3=>3569,4=>'Opera',5=>'6.00',6=>6,7=>0,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3569,4=>'Opera',5=>'5.00',6=>5,7=>0,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3569,4=>'Opera',5=>'4.00',6=>4,7=>0,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3569,4=>'Opera',5=>'3.50',6=>3,7=>50,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',21=>'true',27=>1),array(3=>3525,4=>'uTorrent'),array(3=>3525,4=>'rtorrent'),array(3=>3569,4=>'Opera',5=>'3.00',6=>3,7=>0,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true'),array(3=>3569,4=>'Opera',5=>'2.12',6=>1,7=>12,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true'),array(3=>3569,4=>'Opera',5=>'2.00',6=>2,7=>0,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true'),array(3=>3643,4=>'Heritrix',23=>'true'),array(3=>3569,4=>'Opera',5=>'2.10',6=>1,7=>10,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true'),array(3=>4513,5=>'0.6',6=>0,7=>6),array(3=>4513,5=>'0.7',6=>0,7=>7),array(3=>3569,4=>'Opera',5=>'7.00',6=>7,7=>0,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Opera',5=>'9.00',6=>9,7=>0,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Opera',5=>'8.00',6=>8,7=>0,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4414,4=>'AutoHotkey'),array(3=>3596,4=>'GetRight'),array(3=>3569,4=>'Opera',5=>'3.60',6=>3,7=>60,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',21=>'true',27=>1),array(3=>3596,4=>'GetSmart'),array(3=>3569,4=>'ELinks',5=>'0.9',7=>9,14=>'true',16=>'true'),array(3=>3563,4=>'Generic Research Crawler'),array(3=>3569,4=>'Flock',5=>'1.0',6=>1,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3855,4=>'Pingdom'),array(3=>4414,4=>'Harvest'),array(3=>3855,4=>'Net Probe'),array(3=>4414,4=>'httperf'),array(3=>3657,4=>'SpankBot',23=>'true'),array(3=>4414,4=>'IP*Works'),array(3=>4414,4=>'WebRipper'),array(3=>4414,4=>'LeechGet'),array(3=>4414,4=>'OCN-SOC'),array(3=>4414,4=>'PageLoad'),array(3=>4414,4=>'OSSProxy'),array(3=>3569,4=>'Flock',5=>'3.0',6=>3,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3525,4=>'MediaGet'),array(3=>3569,4=>'Flock',5=>'2.0',6=>2,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3563,4=>'woriobot'),array(3=>3563,4=>'Steeler'),array(3=>4414,4=>'INetURL'),array(3=>3569,4=>'Iron',5=>'19.0',6=>19,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Pocket PC',8=>'WinCE',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>1),array(3=>4516,5=>'7.0',6=>7,7=>0),array(3=>4516,5=>'8.0',6=>8,7=>0,27=>2),array(3=>4521),array(3=>3569,4=>'Entireweb',14=>'true',16=>'true',23=>'true',26=>'true'),array(3=>4534),array(3=>3039),array(3=>4516,5=>'9.0',6=>9,7=>0),array(3=>4545,5=>'2.3',6=>2,7=>3),array(3=>4545,5=>'2.8',6=>2,7=>8),array(3=>4513,5=>'2.0',6=>2,7=>0),array(3=>3569,4=>'FrontPage',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true'),array(3=>4545,5=>'2.7',6=>2,7=>7),array(3=>4545,5=>'2.6',6=>2,7=>6),array(3=>4545,5=>'2.4',6=>2,7=>4),array(3=>4545,5=>'2.5',6=>2,7=>5),array(3=>3569,4=>'Arora',5=>'0.9',7=>9,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Arora',5=>'0.8',7=>8,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Iron',5=>'10.0',6=>10,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Iron',5=>'11.0',6=>11,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Iron',5=>'12.0',6=>12,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',20=>'true',21=>'true',27=>3),array(3=>4279,4=>'MarsEdit'),array(3=>3569,4=>'NewsGator',25=>'true',26=>'true'),array(3=>3657,4=>'eventax'),array(3=>3657,4=>'cisco-IOS'),array(3=>3569,4=>'Iron',5=>'13.0',6=>13,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',20=>'true',21=>'true',27=>3),array(3=>3569,4=>'Iron',5=>'14.0',6=>14,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',20=>'true',21=>'true',27=>3),array(3=>3563,4=>'Polybot'),array(3=>4542,4=>'Snapbot'),array(3=>3569,4=>'Iron',5=>'18.0',6=>18,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Iron',5=>'17.0',6=>17,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Iron',5=>'15.0',6=>15,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',20=>'true',21=>'true',27=>3),array(3=>3569,4=>'Iron',5=>'16.0',6=>16,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3606,4=>'WinkBot'),array(3=>4414,4=>'WebAuto'),array(3=>3831,4=>'Checkbot'),array(3=>3569,4=>'Iceweasel',8=>'Debian',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3831,4=>'SiteBar'),array(3=>3831,4=>'URLBase'),array(3=>3831,4=>'Bookdog'),array(3=>3831,4=>'Linkman'),array(3=>3600,4=>'Mike Elliott\'s E-Mail Harvester'),array(3=>3600,4=>'WebMiner'),array(3=>3708,4=>'Weblide',10=>'true'),array(3=>3777,4=>'Hotzonu'),array(3=>3569,4=>'Microsoft',23=>'true',26=>'true'),array(3=>3653,4=>'HTTrack'),array(3=>3653,4=>'iGetter'),array(3=>3777,4=>'Deepindex'),array(3=>3777,4=>'Faxo'),array(3=>3777,4=>'Filangy'),array(3=>4302,4=>'MS Proxy'),array(3=>3777,4=>'GenieKnows'),array(3=>3777,4=>'Gaisbot'),array(3=>3600,4=>'Chilkat'),array(3=>3777,4=>'Scrub The Web'),array(3=>3777,4=>'WISEbot',23=>'true'),array(3=>3777,4=>'WebCorp',23=>'true'),array(3=>3777,4=>'Updated!'),array(3=>3777,4=>'TMCrawler',23=>'true'),array(3=>3596,4=>'AutoMate5'),array(3=>3569,4=>'DNS Tools',26=>'true'),array(3=>4512,4=>'LOOQ'),array(3=>3777,4=>'Zibb'),array(3=>3399,4=>'Brand Protect'),array(3=>3596,4=>'GoZilla'),array(3=>3596,4=>'Gozilla'),array(3=>3596,4=>'Prozilla'),array(3=>3596,4=>'EasyDL'),array(3=>3596,4=>'shareaza'),array(3=>3596,4=>'PageDown'),array(3=>3777,4=>'Seekbot'),array(3=>3777,4=>'Szukacz'),array(3=>3777,4=>'SygolBot'),array(3=>3777,4=>'Sproose'),array(3=>3653,4=>'Teleport'),array(3=>3596,4=>'Vegas95'),array(3=>3777,4=>'ASPSeek'),array(3=>3836,4=>'Squid'),array(3=>3836,4=>'Privoxy'),array(3=>4385,12=>'false'),array(3=>4527,4=>'YahooFeedSeeker',25=>'true'),array(3=>3569,4=>'Netcraft',23=>'true',26=>'true'),array(3=>4527,4=>'YahooFeedSeeker',25=>'true'),array(3=>4527,4=>'YahooFeedSeeker',5=>'1.0',6=>1,7=>0),array(3=>4527,4=>'Y!OASIS',23=>'true'),array(3=>3569,4=>'GoogleTV',8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>4414,4=>'JPluck'),array(3=>4412),array(3=>4527,4=>'YahooFeedSeeker',25=>'true'),array(3=>4527,4=>'YahooFeedSeeker',5=>'1.0',6=>1,7=>0,25=>'true'),array(3=>4527,4=>'Scooter'),array(3=>3831,4=>'Linkbot'),array(3=>4022,4=>'WebTrans'),array(3=>3836,4=>'Websense'),array(3=>4527,4=>'YahooFeedSeeker',25=>'true'),array(3=>3657,4=>'VadixBot'),array(3=>4527,4=>'YahooFeedSeeker',25=>'true'),array(3=>3569,4=>'IEMobile',8=>'WinCE',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>2),array(3=>3603,4=>'Particls'),array(3=>3569,4=>'YodaoBot',14=>'true',16=>'true',23=>'true',26=>'true'),array(3=>4414,4=>'libwww'),array(3=>3777,4=>'PEERbot'),array(3=>3777,4=>'Spinne'),array(3=>4414,4=>'3D-FTP'),array(3=>3777,4=>'Pompos'),array(3=>3039),array(3=>3039),array(3=>3657,4=>'XSpider',23=>'true'),array(3=>3569,4=>'Iron',5=>'9.0',6=>9,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Iron',5=>'8.0',6=>8,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>4414,4=>'CobWeb'),array(3=>3596,4=>'FlashGet'),array(3=>3596,4=>'NetAnts'),array(3=>3569,4=>'Palm Web',8=>'webOS',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true'),array(3=>3600,4=>'Larbin'),array(3=>3569,4=>'Iron',5=>'7.0',6=>7,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3569,4=>'Iron',5=>'6.0',6=>6,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>3),array(3=>3596,4=>'WinTools'),array(3=>3569,4=>'Facebook',14=>'true',16=>'true',26=>'true'),array(3=>3563,4=>'IRLbot'),array(3=>3569,4=>'Emacs/W3',14=>'true',15=>'true',16=>'true',17=>'true',19=>'default'),array(3=>3569,4=>'fantomas',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true'),array(3=>3657,4=>'SiteSell'),array(3=>3563,4=>'Lachesis'),array(3=>4414,4=>'PycURL'),array(3=>4414,4=>'BlackWidow'),array(3=>3777,4=>'Wotbox'),array(3=>3569,4=>'Sleipnir',5=>'2.0',6=>2,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>3657,4=>'Ocelli'),array(3=>3569,4=>'PaleMoon',5=>'3.6',6=>3,7=>6,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',21=>'true',27=>2),array(3=>4414,4=>'LeechFTP'),array(3=>3657,4=>'PhpDig'),array(3=>3657,4=>'WhizBang'),array(3=>3525,4=>'Azureus'),array(3=>4414,4=>'Moozilla'),array(3=>4414,4=>'HTTPGrab'),array(3=>3657,4=>'n4p_bot'),array(3=>4550,5=>'0.4',6=>0,7=>4,17=>'true'),array(3=>4414,4=>'Holmes'),array(3=>4414,4=>'WebFetch'),array(3=>4550,5=>'0.3',6=>0,7=>3),array(3=>3596,4=>'EasyDL'),array(3=>4414,4=>'WinHttp'),array(3=>4550,5=>'0.1',6=>0,7=>1),array(3=>4550,5=>'0.2',6=>0,7=>2),array(3=>3279,4=>'NetSurf'),array(3=>4550,5=>'0.5',6=>0,7=>5,17=>'true'),array(3=>3657,4=>'Gaisbot'),array(3=>3855,4=>'URLCHECK'),array(3=>3596,4=>'Free Download Manager'),array(3=>3569,4=>'Exalead',14=>'true',16=>'true',23=>'true',26=>'true'),array(3=>4414,4=>'3wGet'),array(3=>3525,4=>'Deluge'),array(3=>4512,23=>'true'),array(3=>3569,4=>'Gigabot',14=>'true',16=>'true',26=>'true'),array(3=>3569,4=>'IE',5=>'4.01',6=>4,7=>1,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>2),array(3=>3569,4=>'Ripper',23=>'true',26=>'true'),array(3=>3039),array(3=>3777,4=>'21Seek.Com'),array(3=>3777,4=>'VMBot'),array(3=>3569,4=>'IBrowse',8=>'Amiga',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true'),array(3=>3569,4=>'IE',5=>'5.01',6=>5,7=>1,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>2),array(3=>3569,4=>'',8=>'Android',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>3),array(3=>3569,4=>'Chimera',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true'),array(3=>3569,4=>'PowerTV',8=>'PowerTV',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true'),array(3=>3777,4=>'SynoBot'),array(3=>3596,4=>'Myzilla'),array(3=>3596,4=>'Beamer'),array(3=>3569,4=>'Polaris',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>2),array(3=>3777,4=>'Abacho'),array(3=>3399,4=>'BDFetch'),array(3=>3657,4=>'WeBoX'),array(3=>3569,4=>'Convera',14=>'true',16=>'true',26=>'true'),array(3=>4549,4=>'MSRBOT'),array(3=>3569,4=>'Webaroo',14=>'true',16=>'true',26=>'true'),array(3=>3569,4=>'IE',5=>'10.0',6=>10,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>3),array(3=>3596,4=>'WebZIP'),array(3=>4414,4=>'Pavuk'),array(3=>3600,4=>'eCatch'),array(3=>3569,4=>'IE',5=>'8.0',6=>8,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>3,28=>10),array(3=>3777,4=>'Dumbot',5=>'0.2',6=>0,7=>2,10=>'true'),array(3=>3569,4=>'IE',5=>'8.0',6=>8,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>3,28=>10),array(3=>3657,4=>'Goo'),array(3=>3657,4=>'SyncMgr'),array(3=>3995,4=>'Reblog'),array(3=>3657,4=>'NaverBot',23=>'true'),array(3=>3657,4=>'nicebot',23=>'true'),array(3=>4414,4=>'Pockey-GetHTML'),array(3=>3788,4=>'Custo'),array(3=>4414,4=>'Python'),array(3=>4414,4=>'CTerm'),array(3=>4414,4=>'HLoader'),array(3=>3831,4=>'IECheck'),array(3=>3569,4=>'FeedHub',25=>'true',26=>'true'),array(3=>3657,4=>'ht://Dig'),array(3=>3279,4=>'Amiga',8=>'Amiga'),array(3=>4414,4=>'Foobot'),array(3=>3777,4=>'Xyleme'),array(3=>3657,4=>'PMAFind',23=>'true'),array(3=>3657,4=>'SMBot'),array(3=>3777,4=>'QweeryBot'),array(3=>3777,4=>'Bit Torrent Search Engine'),array(3=>3836,4=>'Squid'),array(3=>3569,4=>'Android',8=>'Android',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>2),array(3=>4414,4=>'Snoopy'),array(3=>4047,4=>'NameProtect'),array(3=>3569,4=>'Mosaic',14=>'true',16=>'true'),array(3=>4414,4=>'WebGet'),array(3=>4414,4=>'Custo'),array(3=>3569,4=>'IE',8=>'MacPPC',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>1),array(3=>4414,4=>'grub'),array(3=>4414,4=>'hcat'),array(3=>3831,4=>'FavOrg'),array(3=>4047,4=>'NameProtect'),array(3=>3569,4=>'IE',5=>'7.0',6=>7,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>2),array(3=>3831,4=>'Zeus',23=>'true'),array(3=>3569,4=>'Camino',8=>'MacOSX',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>3569,4=>'Become',25=>'true',26=>'true'),array(3=>4545),array(3=>3569,4=>'Nagios',26=>'true'),array(3=>3569,4=>'IE',5=>'8.0',6=>8,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>3),array(3=>3569,4=>'IE',5=>'6.0',6=>6,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>2),array(3=>3569,4=>'DoCoMo',8=>'DoCoMo',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',26=>'true',27=>1),array(3=>3657,4=>'cz32ts',23=>'true'),array(3=>3657,4=>'Nabot'),array(3=>3569,4=>'Galeon',8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>3569,4=>'IE',5=>'2.0',6=>2,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true'),array(3=>3569,4=>'IE',5=>'9.0',6=>9,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>3),array(3=>3657,4=>'NV32ts',23=>'true'),array(3=>4518,4=>'Lycos'),array(3=>3569,4=>'Google',14=>'true',15=>'true',16=>'true',26=>'true'),array(3=>3797,4=>'vobsub',23=>'true'),array(3=>3569,4=>'Kindle',8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>2),array(3=>3569,4=>'Hatena',23=>'true',26=>'true'),array(3=>3569,4=>'Handspring Blazer',8=>'Palm',12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true'),array(3=>3569,4=>'iPhone',8=>'iPhone OSX',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>3),array(3=>3569,4=>'IE',5=>'1.0',6=>1,14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true'),array(3=>3525,4=>'BTSP'),array(3=>3569,4=>'IE',5=>'5.5',6=>5,7=>5,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>2),array(3=>3569,4=>'Envolk',14=>'true',16=>'true',23=>'true',26=>'true'),array(3=>3708,4=>'WWWC'),array(3=>3569,4=>'Teleca',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>1),array(3=>3569,4=>'Netbox',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>1),array(3=>3563,4=>'MQbot'),array(3=>4414,4=>'Generic Java Crawler'),array(3=>3569,4=>'DotBot',14=>'true',16=>'true',23=>'true',26=>'true'),array(3=>3569,4=>'Yandex',14=>'true',15=>'true',16=>'true',26=>'true'),array(3=>3569,4=>'Boitho',14=>'true',16=>'true',26=>'true'),array(3=>3569,4=>'iSiloX',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>3657,4=>'UCmore'),array(3=>3569,4=>'IE',5=>'5.0',6=>5,12=>'true',14=>'true',15=>'true',16=>'true',17=>'true',18=>'true',19=>'true',20=>'true',21=>'true',22=>'true',27=>2),array(3=>3569,4=>'Shiira',8=>'MacOSX',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>3569,4=>'Baidu',14=>'true',15=>'true',16=>'true',26=>'true'),array(3=>3563,4=>'Zao'),array(3=>3569,4=>'Nutch',14=>'true',16=>'true',23=>'true',26=>'true'),array(3=>3569,4=>'Dillo',8=>'Linux',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>2),array(3=>3569,4=>'Links',14=>'true',16=>'true'),array(3=>3569,4=>'WebTV/MSNTV',8=>'WebTV',14=>'true',15=>'true',16=>'true',17=>'true'),array(3=>3569,4=>'Amaya',14=>'true',16=>'true'),array(3=>4414,4=>'cURL'),array(3=>3569,4=>'Lycos',14=>'true',16=>'true',26=>'true'),array(3=>3569,4=>'Boxee',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true'),array(3=>3569,4=>'Maemo',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>2),array(3=>3569,4=>'Nokia',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true'),array(3=>3797,4=>'RMA'),array(3=>3569,4=>'Sogou',14=>'true',16=>'true',23=>'true',26=>'true'),array(3=>3596,4=>'Wget'),array(3=>4414,4=>'FGet'),array(3=>3831,4=>'DLC'),array(3=>3569,4=>'Yahoo',14=>'true',15=>'true',16=>'true',26=>'true'),array(3=>3831,4=>'VSE Link Tester'),array(3=>3663),array(3=>3657,4=>'sohu-search',23=>'true'),array(3=>4527,4=>'slurp'),array(3=>4414,4=>'b2w'),array(3=>3569,4=>'Brew',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true'),array(3=>3569,4=>'Ilse',14=>'true',16=>'true',26=>'true'),array(3=>3525,4=>'FDM'),array(3=>3569,4=>'iPad',8=>'iPhone OSX',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>3),array(3=>3569,4=>'KDDI',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',24=>'true',27=>1),array(3=>4414,4=>'lwp'),array(3=>4408,4=>'Exalead Previewer',23=>'true'),array(3=>4414,4=>'CAST'),array(3=>4047,4=>'NameProtect'),array(3=>3569,4=>'Snap',14=>'true',16=>'true',23=>'true',26=>'true'),array(3=>3596,4=>'Download Accelerator'),array(3=>3399,4=>'oBot'),array(3=>3569,4=>'Lynx',14=>'true',15=>'true',16=>'true'),array(3=>4414,4=>'PHP'),array(3=>3569,4=>'iCab',14=>'true',15=>'true',16=>'true',17=>'true',19=>'true',27=>1),array(3=>3569,4=>'Ask',14=>'true',15=>'true',16=>'true',26=>'true'),array(3=>3569,4=>'MSN',14=>'true',15=>'true',16=>'true',26=>'true'),array(3=>3569,4=>'w3m',14=>'true',16=>'true'),array(3=>3569,4=>'W3C',26=>'true'),array(4=>'Default Browser',5=>0,6=>0,7=>0,8=>'unknown',9=>'false',10=>'false',11=>'false',12=>'false',13=>'false',14=>'false',15=>'false',16=>'false',17=>'false',18=>'false',19=>'false',20=>'false',21=>'false',22=>'false',23=>'false',24=>'false',25=>'false',26=>'false',27=>0,28=>0),array(3=>3279,4=>12345,23=>'true'));
4
+ $userAgents=array('Browser Capabilities Project AutoDownloader; created by Tom Kelleher Consulting, Inc. (tkelleher.com); used with special permission from Gary Joel Keith; uses Microsoft\'s WinHTTP component','Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/)','Mozilla/5.0 (Linux; U; *) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Version/4.0 Kindle/3.0 (screen 600x800; rotate)','Mozilla/?.*(iPhone*CPU iPhone OS 4_2_5* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPhone*CPU iPhone OS 4_2_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 3_1_2* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 3_1_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 2_2_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 3_1_3* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 4_0_2* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 4_3_2* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 4_3_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 4_2_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 2_1_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPhone*CPU iPhone OS 5_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPhone*CPU iPhone OS 3_2* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPhone*CPU iPhone OS 3_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10*; *) AppleWebKit/* (KHTML, like Gecko) RockMelt/0.* Chrome/* Safari/*','Mozilla/?.*(iPhone*CPU iPhone OS 4_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPhone*CPU iPhone OS 4_2* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 2_0_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPhone*CPU iPhone OS 5_0* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPhone*CPU iPhone OS 4_3* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 2_0_2* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/5.0 (Linux; U; Android 2.1-update1; *; *) AppleWebKit/5* (KHTML, like Gecko) *Version/4.0 Mobile Safari/5*','Mozilla/5.0 (BlackBerry; U; BlackBerry*) AppleWebKit/534.1+ (KHTML, like Gecko) *Version/6.* Mobile Safari/534.1+','Mozilla/?.*(iPhone*CPU iPhone OS 4_* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPhone*CPU iPhone OS 3_* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/5.0 (X11; U: Linux i686; *) AppleWebKit/* (KHTML, like Gecko) Chrome/5.* Large Screen Safari/* GoogleTV/*','Mozilla/?.*(iPhone*CPU iPhone OS 2_* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 2_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 4_3* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 5_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 3_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 4_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 2_2* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 5_0 like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 2_* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 4_* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/?.*(iPod*CPU iPhone OS 3_* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/5.0 (Linux; U; Android 1.5*; *; *) AppleWebKit/5* (KHTML, like Gecko) *Version/3.1.2* Mobile Safari/5*','Mozilla/5.0 (Linux; U; Android 1.6*; *; *) AppleWebKit/5* (KHTML, like Gecko) *Version/3.1.2* Mobile Safari/5*','Mozilla/5.0 (Linux; U; Android 2.0.1; *; *) AppleWebKit/5* (KHTML, like Gecko) *Version/4.0 Mobile Safari/5*','Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) RockMelt/0.* Chrome/* Safari/*','Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) RockMelt/0.* Chrome/* Safari/*','Mozilla/5.0 (Linux; U; Android 1.0*; *; *) AppleWebKit/5* (KHTML, like Gecko) *Version/3.0* Mobile Safari/5*','Mozilla/5.0 (Linux; U; Android 2.1**; *; *) AppleWebKit/5* (KHTML, like Gecko) *Version/4.0 Mobile Safari/5*','Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) RockMelt/0.* Chrome/* Safari/*','Mozilla/*(iPad*CPU OS 4_2_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/* Mobile/* Safari/*','Mozilla/5.0 (Linux; U; Android 2.2*; *; *) AppleWebKit/5* (KHTML, like Gecko) *Version/4.0 Mobile Safari/5*','Mozilla/*(iPad*CPU OS 3_2_2* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/* Mobile/* Safari/*','Mozilla/*(iPad*CPU OS 3_2_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/* Mobile/* Safari/*','Mozilla/5.0 (Linux; U; Android 2.3*; *; *) AppleWebKit/5* (KHTML, like Gecko) *Version/4.0 Mobile Safari/5*','Mozilla/4.0 (compatible; MSIE *; Windows NT; Girafabot; girafabot at girafa dot com; http://www.girafa.com)','Mozilla/*(iPad*CPU OS 4_3_2* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/* Mobile/* Safari/*','Mozilla/5.0 (Linux; U; Android 2.0*; *; *) AppleWebKit/5* (KHTML, like Gecko) *Version/4.0 Mobile Safari/5*','Mozilla/*(iPad*CPU OS 4_3_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/* Mobile/* Safari/*','Mozilla/?.*(iPhone*CPU iPhone OS 5_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*','Mozilla/?.*(iPhone*CPU iPhone OS 5_0* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*','Mozilla/*(iPad*CPU OS 4_2* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/* Mobile/* Safari/*','Mozilla/*(iPad*CPU OS 4_3* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/* Mobile/* Safari/*','Mozilla/*(iPad*CPU OS 5_1* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/* Mobile/* Safari/*','Mozilla/*(iPad*CPU OS 3_2* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/* Mobile/* Safari/*','Mozilla/*(iPad*CPU OS 5_0* like Mac OS X*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/* Mobile/* Safari/*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko, Safari/528.16) *Version/5.10* *OmniWeb/v622.*','Mozilla/5.0 (Macintosh; U; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Flock/3.* Chrome/* Safari/*','Mozilla/?.*(iPhone;*CPU like Mac OS X;*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/*Mobile/*Safari/*','Mozilla/5.0 (compatible; MSIE 7.0; MSIE 6.0; ScanAlert; +http://www.scanalert.com/bot.jsp) Firefox/*','Mozilla/5.0 (PlayBook; U; RIM Tablet OS 1.*)*AppleWebKit/*(KHTML, like Gecko)*Version/7.*Safari/*```','Mozilla/5.0 (Windows; U; Windows NT 5.2; *; rv:1.9.*) Gecko/20100403 Firefox/3.6.* (Palemoon/3.6.*)','Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9.*) Gecko/20100403 Firefox/3.6.* (Palemoon/3.6.*)','Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9.*) Gecko/20100403 Firefox/3.6.* (Palemoon/3.6.*)','Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9.*) Gecko/20100403 Firefox/3.6.* (Palemoon/3.6.*)','Mozilla/5.0 (Windows; U; Windows NT 5.0; *; rv:1.9.*) Gecko/20100403 Firefox/3.6.* (Palemoon/3.6.*)','Mozilla/5.0 (Linux; U; Android 3.1; *; GT*) AppleWebKit/* (KHTML, like Gecko) Version/4.* Safari/*','Mozilla/5.0 (Macintosh; U; Intel Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) iCab/4.7 Safari/*','Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Maxthon/3.0 Safari/*','Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Maxthon/3.0 Safari/*','Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Maxthon/3.0 Safari/*','Mozilla/5.0 (Windows; U; Windows NT 5.0; *) AppleWebKit/* (KHTML, like Gecko) Maxthon/3.0 Safari/*','Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Maxthon/3.0 Safari/*','Mozilla/5.0 (compatible; Speedy Spider; http://www.entireweb.com/about/search_tech/speedy_spider/)','SonyEricsson*/* Mozilla/5.0 (SymbianOS*) AppleWebKit/* (KHTML, like Gecko) *Version/2.* *Safari/*','SonyEricsson*; Mozilla/5.0 (*SymbianOS*) AppleWebKit/* (KHTML, like Gecko) *Version/3.* *Safari/*','Runnk online rss reader : http://www.runnk.com/ : RSS favorites : RSS ranking : RSS aggregator*','Mozilla/*(PlayBook*RIM Tablet OS 1.0.0*)*AppleWebKit/*(*KHTML, like Gecko*)*Version/0.*Safari/*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Version/5.11* *OmniWeb/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chromium/10.*Chrome/*Safari/*','Mozilla/4.0 (compatible; MSIE 8.0; AOL 9.6; AOLBuild*; Windows NT 6.0; WOW64; Trident/4.0*)*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chromium/16.*Chrome/*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chromium/17.*Chrome/*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chromium/18.*Chrome/*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chromium/15.*Chrome/*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chromium/11.*Chrome/*Safari/*','Mozilla/4.0 (compatible; MSIE 8.0; AOL 9.6; AOLBuild*; Windows NT 5.2; WOW64; Trident/4.0*)*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chromium/14.*Chrome/*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chromium/19.*Chrome/*Safari/*','Mozilla/4.0 (compatible; MSIE 8.0; AOL 9.6; AOLBuild*; Windows NT 6.1; WOW64; Trident/4.0*)*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chromium/12.*Chrome/*Safari/*','SaladSpoon/ShopSalad 1.* (Search Engine crawler for ShopSalad.com; *; crawler@shopsalad.com)','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chromium/13.*Chrome/*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chromium/9.*Chrome/*Safari/*','Mozilla/5.0 (Windows; U; Windows NT *; *) AppleWebKit/* (KHTML, like Gecko*) Lunascape/5.0*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko, Safari/525.20) *OmniWeb/v622.3.*','Mozilla/5.0 (Windows; U; Windows NT *; *) AppleWebKit/* (KHTML, like Gecko*) Lunascape/6.0*','Mozilla/5.0 (Windows; U; Windows NT *; *) AppleWebKit/* (KHTML, like Gecko*) Lunascape/5.1*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chromium/7.*Chrome/*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chromium/8.*Chrome/*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chromium/6.*Chrome/*Safari/*','Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/19.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/17.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/17.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/17.*Safari/*','Mozilla/5.0 (*Windows NT 6.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/19.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/18.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/17.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/18.*Safari/*','Mozilla/5.0 (*Windows NT 6.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/17.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/18.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/11.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/19.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/18.*Safari/*','Mozilla/5.0 (*Windows NT 6.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/18.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/11.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/19.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/12.*Safari/*','Mozilla/5.0 (*Windows NT 6.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/19.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/13.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/13.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/13.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/14.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/14.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/14.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/14.*Safari/*','Mozilla/5.0 (*Windows NT 6.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/14.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/13.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*','Mozilla/5.0 (*Windows NT 6.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/12.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/12.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/12.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chromium/16.*Chrome/*Safari/*','Mozilla/5.0 (*Windows NT 5.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/11.*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chromium/19.*Chrome/*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chromium/18.*Chrome/*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chromium/17.*Chrome/*Safari/*','Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/10.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/10.*Safari/*','Mozilla/5.0 (compatible; Kyluka crawl; http://www.kyluka.com/crawl.html; crawl@kyluka.com)','Mozilla/5.0 (*Windows NT 5.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/10.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/10.*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chromium/14.*Chrome/*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chromium/15.*Chrome/*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chromium/12.*Chrome/*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chromium/13.*Chrome/*Safari/*','Mozilla/5.0 (*Windows NT 5.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/11.*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chromium/10.*Chrome/*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chromium/11.*Chrome/*Safari/*','Mozilla/5.0 (*Windows NT 5.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/8.*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chromium/7.*Chrome/*Safari/*','Mozilla/5.0 (X11; U; Linux*; *) AppleWebKit/*(KHTML, like Gecko) Safari/* Epiphany/2.30.*','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/4.0; *MSOffice 14)','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko, Safari/525.20) *OmniWeb/v622.*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chromium/6.*Chrome/*Safari/*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko, Safari/523.10) *OmniWeb/v621.*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chromium/9.*Chrome/*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chromium/8.*Chrome/*Safari/*','Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/6.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/6.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/6.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/7.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/7.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/7.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/7.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/8.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/6.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/9.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/9.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/9.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/8.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chromium/*Chrome/*Safari/*','Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/9.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/8.*Safari/*','Mozilla/5.0 (*webOS*) AppleWebKit/* (KHTML, like Gecko) *Version/1.* *Safari/* *Pixi/2.*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko, Safari/528.16) *OmniWeb/622.*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko, Safari/522) *OmniWeb/v61?.0.*','Mozilla/5.0 (*webOS*) AppleWebKit/* (KHTML, like Gecko) *Version/1.* *Safari/* *Pixi/1.*','Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.8.*) Gecko/* Firefox/2.* Navigator/9.*','Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.8.*) Gecko/* Firefox/2.* Navigator/9.*','Mozilla/5.0 (Windows; U; Windows NT 5.2; *; rv:1.8.*) Gecko/* Firefox/2.* Navigator/9.*','DomainCrawler/1.0 (info@domaincrawler.com; http://www.domaincrawler.com/domains/view/*)','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chromium/*Chrome/*Safari/*','Mozilla/5.0 (Windows; U; Windows NT 5.0; *; rv:1.8.*) Gecko/* Firefox/2.* Navigator/9.*','Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.8.*) Gecko/* Firefox/2.* Navigator/9.*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.10*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.11*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.11*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.11*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.11*','Mozilla/5.0 (*Windows NT 5.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/*Safari/*','Mozilla/5.0 (*webOS*) AppleWebKit/* (KHTML, like Gecko) *Version/1.* *Safari/* *Pre/2.*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.10*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.11*','Mozilla/5.0 (*Windows NT 6.0*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/*Safari/*','Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/*Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.10*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.10*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.10*','Mozilla/5.0 (*Windows NT 5.2*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/*Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko) *Version/4.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Version/4.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Version/4.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Version/3.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Version/4.* Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko) *Version/3.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Version/3.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Version/3.* Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Version/3.* Safari/*','Mozilla/5.0 (Windows; U; Windows NT *; *; rv:1.9.*) Gecko/* Firefox/3.* Lunascape/5.0*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Version/2.* Safari/*','Mozilla/5.0 (compatible; YoudaoBot/1.*; http://www.youdao.com/help/webmaster/spider/*)','Mozilla/5.0 (Windows; U; Windows NT *; *; rv:1.9.*) Gecko/* Firefox/3.* Lunascape/5.1*','Mozilla/5.0 (Windows; U; Windows NT *; *; rv:1.9.*) Gecko/* Firefox/3.* Lunascape/6.0*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Version/5.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Version/5.* Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko) *Version/5.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Version/5.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Version/5.* Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Version/4.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.?*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.8*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.9*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.9*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.8*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.8*','Mozilla/5.0 (X11; U; Linux; *) AppleWebKit/* (KHTML, like Gecko, Safari/*) Arora/0.8.*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.8*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.8*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.9*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.9*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko) *Version/2.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Version/2.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Version/2.* Safari/*','Mozilla/5.0 (*webOS*) AppleWebKit/* (KHTML, like Gecko) *Version/1.* Safari/* *Pre/1.*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.?*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.?*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.?*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.?*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Version/2.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.9*','Mozilla/5.0 (compatible; Yahoo! DE Slurp; http://help.yahoo.com/help/us/ysearch/slurp)','Mozilla/4.0 (compatible; MSIE 8.0; AOL 9.6; AOLBuild*; Windows NT 6.0; Trident/4.0*)*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.11*','Mozilla/4.0 (compatible; MSIE 8.0; AOL 9.6; AOLBuild*; Windows NT 6.1; Trident/4.0*)*','Mozilla/4.0 (compatible; MSIE 8.0; AOL 9.5; AOLBuild*; Windows NT 5.2; Trident/4.0*)*','Mozilla/4.0 (compatible; MSIE 8.0; AOL 9.5; AOLBuild*; Windows NT 6.1; Trident/4.0*)*','Mozilla/5.0 (X11; U; Linux; *) AppleWebKit/* (KHTML, like Gecko, Safari/*) Arora/0.6*','Metaspinner/0.01 (Metaspinner; http://www.meta-spinner.de/; support@meta-spinner.de/)','Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.8.*) Gecko/* Firefox/2.* Navigator/9.*','Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0*)*','Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0*)*','browscap updater; interval:weekly; server:rohan.doppy.nl; questions:support@doppy.nl;','Mozilla/4.0 (compatible; MSIE 8.0; AOL 9.6; AOLBuild*; Windows NT 5.2; Trident/4.0*)*','Mozilla/4.0 (compatible; MSIE 8.0; AOL 9.5; AOLBuild*; Windows NT 5.1; Trident/4.0*)*','Mozilla/4.0 (compatible; MSIE 8.0; AOL 9.5; AOLBuild*; Windows NT 6.0; Trident/4.0*)*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.10*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/12.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Iron/12.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Iron/12.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/13.* Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *Iron/13.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/19.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/19.*Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/19.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/14.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Iron/14.* Safari/*','Mozilla/5.0 (*Windows NT 4.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/19.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *Iron/15.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Iron/15.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/15.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Iron/14.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/14.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Iron/13.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/19.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/13.* Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *Iron/14.* Safari/*','Mozilla/5.0 (compatible; Scrubby/*; +http://www.scrubtheweb.com/abs/meta-check.html)','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Iron/13.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Iron/11.* Safari/*','Mozilla/5.0 (*Windows NT 4.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/10.*Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/10.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko)*Chrome/10.*Safari/*','Mozilla/5.0 (*Windows NT 6.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/19.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/10.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/10.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Version/3.* Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/10.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/10.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Version/2.* Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *Iron/10.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/10.* Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/15.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Iron/11.* Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/11.* Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *Iron/12.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/11.* Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *Iron/11.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Iron/10.* Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/19.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Iron/10.* Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/10.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/12.* Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/18.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.8*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko)*Chrome/18.*Safari/*','Mozilla/5.0 (*Windows NT 6.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/17.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.9*','Mozilla/5.0 (compatible; Yahoo! Slurp*;*http://help.yahoo.com/help/us/ysearch/slurp)','Mozilla/5.0 (*Windows NT 4.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/18.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*','Automated Browscap.ini Updater. To report issues contact us at+http://www.skycomp.ca','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/18.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/18.*Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/18.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.?*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/17.*Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/17.*Safari/*','Mozilla/5.0 (*Windows NT 4.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/17.*Safari/*','Mozilla/5.0 (*Windows NT 4.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/17.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/17.*Safari/*','Mozilla/5.0 (*Windows NT 6.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko)*Chrome/17.*Safari/*','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; *MSOffice 12)','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/17.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/19.* Safari/*','Mozilla/5.0 (*Windows NT 6.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/18.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko)*Chrome/11.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/18.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/17.* Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko)*Chrome/19.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *Iron/17.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/16.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Iron/16.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Iron/16.* Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/16.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Iron/17.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Iron/17.* Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *Iron/19.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/19.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Iron/19.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Iron/19.* Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/18.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Iron/18.* Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/17.* Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *Iron/18.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/18.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Iron/18.* Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *Iron/16.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Iron/15.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/12.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko)*Chrome/12.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Version/4.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/12.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko)*Chrome/13.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/14.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/14.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/14.*Safari/*','Mozilla/5.0 (*Windows NT 6.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/14.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/12.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/11.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/11.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Version/5.* Safari/*','Mozilla/5.0 (*Windows NT 4.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*','Mozilla/5.0 (*Windows NT 4.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/12.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/11.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/12.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/11.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/14.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/12.*Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*','Mozilla/5.0 (*Windows NT 4.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/13.*Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/11.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/13.*Safari/*','Mozilla/5.0 (*Windows NT 4.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/11.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/13.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/13.*Safari/*','Mozilla/5.0 (*Windows NT 6.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/14.*Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/13.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/13.*Safari/*','Mozilla/5.0 (*Windows NT 4.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/14.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko)*Chrome/14.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/7.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Iron/7.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Iron/7.* Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *Iron/8.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/7.* Safari/*','Mozilla/4.0 (compatible; http://search.thunderstone.com/texis/websearch/about.html)','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Iron/8.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/9.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Iron/9.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/7.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *Iron/9.* Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/8.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/8.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Iron/8.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/7.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *Iron/7.* Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Iron/6.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Iron/6.* Safari/*','Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)','Mozilla/5.0 (X11; U; Linux; *; rv:1.9.*) Gecko/* Iceweasel/3.6* (like Firefox/3.6)*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/6.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/8.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *Iron/6.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/6.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/8.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko)*Chrome/7.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko)*Chrome/9.*Safari/*','Mozilla/5.0 (compatible; KaloogaBot; http://www.kalooga.com/info.html?page=crawler)','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/8.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/7.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/8.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/6.* Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/6.*Safari/*','Mozilla/5.0 (*Windows NT 4.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/8.*Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/8.*Safari/*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Iron/9.* Safari/*','Mozilla/5.0 (Windows; U; *) AppleWebKit/* (KHTML, like Gecko, Safari/*) Arora/0.8.*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/9.*Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/6.*Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/9.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/9.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/9.* Safari/*','Mozilla/5.0 (*Windows NT 4.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/9.*Safari/*','Mozilla/5.0 (*Windows NT 4.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/7.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/6.*Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/7.*Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko)*Chrome/6.*Safari/*','Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.4) 16;320x320','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/7.*Safari/*','Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.5) 16;320x320','Mozilla/5.0 (*Windows NT 4.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/6.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/9.*Safari/*','Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.2) 16;320x320','Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.0) 16;320x448','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/9.*Safari/*','Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.1) 16;320x320','compatible; Mozilla 4.0; MSIE 5.5; (SqwidgeBot v1.01 - http://www.sqwidge.com/bot/)','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko)*Chrome/8.*Safari/*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/6.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/13.*Safari/*','Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/11.*Safari/*','Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko, Safari/420) *OmniWeb/v*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Iron/12.* Safari/*','Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*','Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Iron/19.* Safari/*','Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/14.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Iron/18.* Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Iron/11.* Safari/*','Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Iron/15.* Safari/*','Mozilla/5.0 (Windows; U; *) AppleWebKit/* (KHTML, like Gecko, Safari/*) Arora/0.6*','Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*','Automated Browscap.ini Updater. Gary contact me at serge@skycomp.ca with problems.','Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/17.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Iron/10.* Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Iron/13.* Safari/*','Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Iron/16.* Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/18.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/19.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/10.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Iron/14.* Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/12.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Iron/17.* Safari/*','Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko, Safari) *OmniWeb/v563.*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Iron/9.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/* Safari/*','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *Iron/* Safari/*','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Windows Phone 6.5 HTC_HD2/1.0)','Mozilla/5.0 (*Mac OS X*) AppleWebKit/420 (KHTML, like Gecko, Safari) *OmniWeb/v*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Iron/* Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/9.*Safari/*','Mozilla/5.0 (compatible; Yahoo! Slurp China*;*http://misc.yahoo.com.cn/help.html)','Mozilla/5.0 (*Intel Mac OS X*) AppleWebKit/* (KHTML, like Gecko)*Chrome/*Safari/*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.11*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/7.*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Iron/7.* Safari/*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.10*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Iron/* Safari/*','Mozilla/5.0 (compatible; Yahoo!-AdCrawler;*http://help.yahoo.com/yahoo_adcrawler)','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko)*Chrome/*Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Iron/8.* Safari/*','Mozilla/5.0 (*Windows NT 4.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Iron/* Safari/*','Mozilla/5.0 (*SymbianOS*) AppleWebKit/* (KHTML, like Gecko) *Version/3.* Safari/*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/*Safari/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/*Safari/*','Mozilla/4.0 (compatible; MSIE 6.0; Windows 95; PalmSource; Blazer 3.0) 16;160x160','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Iron/6.* Safari/*','Mozilla/5.0 (Windows; U; Windows NT 6.2; *; rv:1.9*) Gecko/* Firefox/* Fennec/6.*','Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9*) Gecko/* Firefox/* Fennec/6.*','Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/* Fennec/6.*','Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/* Fennec/7.*','Mozilla/5.0 (Windows; U; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/* Fennec/7.*','Mozilla/5.0 (Windows; U; Windows NT 6.2; *; rv:1.9*) Gecko/* Firefox/* Fennec/7.*','Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/* Fennec/5.*','Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/* Fennec/7.*','Mozilla/5.0 (Windows; U; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/* Fennec/6.*','Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/* Fennec/6.*','Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/* Fennec/5.*','Mozilla/5.0 (Windows; U; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/* Fennec/5.*','Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9*) Gecko/* Firefox/* Fennec/5.*','Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9*) Gecko/* Firefox/* Fennec/4.*','Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/* Fennec/4.*','Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/* Fennec/4.*','Mozilla/5.0 (Windows; U; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/* Fennec/4.*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko)*Chrome/*Safari/*','Mozilla/5.0 (*SymbianOS*) AppleWebKit/* (KHTML, like Gecko) *Version/5.* Safari/*','Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9*) Gecko/* Firefox/* Fennec/7.*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/6.*Safari/*','Mozilla/5.0 (*SymbianOS*) AppleWebKit/* (KHTML, like Gecko) *Version/2.* Safari/*','Mozilla/5.0 (*Mac OS X*) *AppleWebKit/* (KHTML, like Gecko) *Version/5.* Safari/*','Mozilla/5.0 (*Mac OS X*) *AppleWebKit/* (KHTML, like Gecko) *Version/2.* Safari/*','Mozilla/5.0 (*Mac OS X*) *AppleWebKit/* (KHTML, like Gecko) *Version/4.* Safari/*','Mozilla/5.0 (*SymbianOS*) AppleWebKit/* (KHTML, like Gecko) *Version/4.* Safari/*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/8.*Safari/*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/*Safari/*','Mozilla/5.0 (*Mac OS X*) *AppleWebKit/* (KHTML, like Gecko) *Version/3.* Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chrome/11.*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko) *Iron/14.* Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chrome/17.*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chrome/13.*Safari/*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.?*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko) *Iron/12.* Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko) *Iron/10.* Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chrome/18.*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chrome/19.*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chrome/12.*Safari/*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.8*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chrome/10.*Safari/*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.9*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko) *Iron/13.* Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko) *Iron/11.* Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko) *Iron/15.* Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko) *Iron/19.* Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko) *Iron/17.* Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko) *Iron/16.* Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko) *Iron/18.* Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chrome/14.*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko) *Iron/8.* Safari/*','Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/*Safari/*','Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko) *Iron/9.* Safari/*','Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*','Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Iron/* Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chrome/6.*Safari/*','Mozilla/5.0 (X11; U; Linux*; *; rv:1.9.*) Gecko/* Firefox/* Maemo Browser 1.7.*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chrome/7.*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chrome/8.*Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko) *Iron/6.* Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko) *Iron/7.* Safari/*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chrome/9.*Safari/*','OOZBOT/0.20 ( http://www.setooz.com/oozbot.html ; agentname at setooz dot_com )','Mozilla/5.0 (*CentOS*) AppleWebKit/* (KHTML, like Gecko) *Version/3.* Safari/*','Mozilla/5.0 (*CentOS*) AppleWebKit/* (KHTML, like Gecko) *Version/2.* Safari/*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 6.0; Win64; x64;*Trident/4.0*)*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 6.1; Win64; x64;*Trident/4.0*)*','Mozilla/5.0 (compatible; MSIE 9.0; *Windows NT 6.0; Win64; x64; Trident/5.0*)*','Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 5.1; Win64; x64;*Trident/4.0*)*','Mozilla/5.0 (*CentOS*) AppleWebKit/* (KHTML, like Gecko) *Version/5.* Safari/*','Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*','Mozilla/5.0 (compatible; MSIE 6.0; Podtech Network; crawler_admin@podtech.net)','Mozilla/5.0 (*Linux*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.10*','Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/8.*','Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 5.0; Win64; x64;*Trident/4.0*)*','Mozilla/5.0 (compatible; MSIE 9.0; *Windows NT 6.1; Win64; x64; Trident/5.0*)*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 5.2; Win64; x64;*Trident/4.0*)*','Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/5.0 (*Linux*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.11*','Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*','Mozilla/5.0 (*CentOS*) AppleWebKit/* (KHTML, like Gecko) *Version/4.* Safari/*','Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.1*','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; *MSOffice 14)','Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9.*) Gecko/* Thunderbird/2.*','Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.1*','Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*','Mozilla/5.0 (*Linux*) AppleWebKit/* (KHTML, like Gecko) *Version/5.* Safari/*','Mozilla/5.0 (*Linux*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.9*','Mozilla/5.0 (*Linux*) AppleWebKit/* (KHTML, like Gecko) *Version/4.* Safari/*','Mozilla/5.0 (*Linux*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.?*','Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*','Mozilla/5.0 (Windows; U; Windows NT 5.0; *; rv:1.9.*) Gecko/* Thunderbird/2.*','Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9.*) Gecko/* Thunderbird/2.*','Mozilla/5.0 (*Linux*) AppleWebKit/* (KHTML, like Gecko, Safari/*) *Arora/0.8*','Mozilla/5.0 (Windows; U; Windows NT 5.2; *; rv:1.9.*) Gecko/* Thunderbird/2.*','Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9.*) Gecko/* Thunderbird/2.*','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; *MSOffice 12)','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; *MSOffice 12)','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Trident/4.0; *MSOffice 12)','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; *MSOffice 14)','Mozilla/5.0 (Windows; U; Windows NT 5.0; *; rv:1.9.*) Gecko/* Thunderbird/3.*','Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9.*) Gecko/* Thunderbird/3.*','Mozilla/5.0 (Macintosh; Intel Mac OS X*; rv:2.1) Gecko/* Firefox/* Fennec/6.*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko)*Chrome/*Safari/*','Mozilla/5.0 (Windows; U; Windows NT 5.0; *; rv:1.9.*) Gecko/* Thunderbird/1.*','Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9.*) Gecko/* Thunderbird/3.*','Mozilla/5.0 (Windows; U; Windows NT 5.2; *; rv:1.9.*) Gecko/* Thunderbird/3.*','Mozilla/5.0 (*Linux i686*) AppleWebKit/* (KHTML, like Gecko) *Iron/* Safari/*','Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9.*) Gecko/* Thunderbird/3.*','Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9.*) Gecko/* Thunderbird/1.*','Mozilla/5.0 (Macintosh; Intel Mac OS X*; rv:2.1) Gecko/* Firefox/* Fennec/4.*','Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*','Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9.*) Gecko/* Thunderbird/1.*','Mozilla/5.0 (*Linux*) AppleWebKit/* (KHTML, like Gecko) *Version/3.* Safari/*','Mozilla/5.0 (Windows; U; Windows NT 5.2; *; rv:1.9.*) Gecko/* Thunderbird/1.*','Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*','Mozilla/5.0 (Macintosh; Intel Mac OS X*; rv:2.1) Gecko/* Firefox/* Fennec/5.*','Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.0*','Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.0*','Mozilla/5.0 (compatible; FriendFeedBot/0.*; +Http://friendfeed.com/about/bot)','Mozilla/5.0 (*Linux*) AppleWebKit/* (KHTML, like Gecko) *Version/2.* Safari/*','Mozilla/5.0 (Macintosh; Intel Mac OS X*; rv:2.1) Gecko/* Firefox/* Fennec/7.*','Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9.*) Gecko/* Thunderbird/1.*','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; *MSOffice 14)','Mozilla/5.0 (X11; U; Linux*; *; rv:1.8.*) Gecko/* Iceweasel/2.0* (Debian-*)*','Mozilla/5.0 (compatible; SuchbaerBot/0.*; +http://bot.suchbaer.de/info.html)','Mozilla/5.0 (X11; U; Linux*; *; rv:1.9.*) Gecko/* Iceweasel/3.0* (Debian-*)*','Mozilla/5.0 (Yahoo-MMCrawler/*; mailto:vertical-crawl-support@yahoo-inc.com)','Microsoft Office/14.0 (Windows NT 5.1; Microsoft Outlook 14.*; *MSOffice 14)','Microsoft Office/14.0 (Windows NT 6.1; Microsoft Outlook 14.*; *MSOffice 14)','Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*','Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*','Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*','Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/5.0 (X11; U; Linux*; *; rv:1.8.*) Gecko/* Firefox/2.* Navigator/9.*','Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*','Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.9*) Gecko/* SeaMonkey/2.0*','Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*','Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*','Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*','Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.1*','Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*','Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*','Mozilla/5.0 (compatible; Chirp/1.0; +http://www.binarycanary.com/chirp.cfm)','Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.0*','Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*','Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*','Mozilla/4.0 (compatible; MSIE 7.0*; Windows NT 6.1; WOW64; Trident/4.0; *)*','Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) AppleWebKit/* (*) HistoryHound/*','Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*','Mozilla/5.0 (X11; U; Linux*; *; rv:1.9.*) Gecko/* Iceweasel/3.5* (Debian-*)','Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/5.0 (compatible; Konqueror/4.5*; *Linux*) KHTML/4.5* (like Gecko)*','Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:NewsMonster; *) Gecko/*','Mozilla/5.0 (Macintosh; *Mac OS X; U; *; rv:1.9.*) Gecko/* Thunderbird/1.*','Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/5.0 (*Windows NT 6.0*) AppleWebKit/* (KHTML, like Gecko) *Safari/*','Mozilla/5.0 (compatible; Konqueror/4.5*; FreeBSD) KHTML/4.5* (like Gecko)*','Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/5.0 (compatible; Konqueror/4.6*; *Linux*) KHTML/4.6* (like Gecko)*','Mozilla/5.0 (compatible; Konqueror/4.6*; FreeBSD) KHTML/4.6* (like Gecko)*','Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko, Safari/*) ADM/*','Mozilla/5.0 (*Windows NT 5.0*) AppleWebKit/* (KHTML, like Gecko) *Safari/*','Mozilla/5.0 (compatible; del.icio.us-thumbnails/*; *) KHTML/* (like Gecko)','Mozilla/4.0 (compatible; MSIE 7.0*; *Windows NT 5.2;*WOW64; Trident/4.0*)*','Cocoal.icio.us/1.0 (v43) (Mac OS X; http://www.scifihifi.com/cocoalicious)','Mozilla/5.0 (Macintosh; *Intel Mac OS X*; *; rv:1.9.*) Gecko/* Camino/2.0*','Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko) *Safari/*','Mozilla/5.0 (Macintosh; *Mac OS X; U; *; rv:1.9.*) Gecko/* Thunderbird/3.*','Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) *Safari/*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *OmniWeb/v558.*','Mozilla/5.0 (Macintosh; *Mac OS X; U; *; rv:1.9.*) Gecko/* Thunderbird/2.*','Mozilla/5.0 (*Windows NT 5.2*) AppleWebKit/* (KHTML, like Gecko) *Safari/*','Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*','Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*','Mozilla/4.0 (compatible; Linux*) NetFront/3.* Kindle/1.0 (screen 600x800)','Mozilla/4.0 (compatible; Linux*) NetFront/3.* Kindle/2.0 (screen 600x800)','Mozilla/5.0 (compatible; Konqueror/4.6*; Windows) KHTML/4.6* (like Gecko)','Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.1*','Mozilla/5.0 (compatible; Konqueror/4.6*; NetBSD) KHTML/4.6* (like Gecko)*','Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.1*','Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.9*) Gecko/* Firefox/3.1*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 6.1; WOW64;*Trident/4.0*)*','Simpy/* (Simpy; http://www.simpy.com/?ref=bot; feedback at simpy dot com)','Mozilla/5.0 (compatible; ActiveTouristBot*; http://www.activetourist.com)','Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.0*','Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/)','Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.0*','Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.0*','Mozilla/5.0 (compatible; MSIE 9.0; *Windows NT 6.1; WOW64; Trident/5.0*)*','Mozilla/5.0 (*) Gecko/* Firefox/2.0 OneRiot/1.0 (http://www.oneriot.com) ','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 5.2; WOW64;*Trident/4.0*)*','Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.0*','Mozilla/4.0 (compatible; *Vagabondo/*; webcrawler at wise-guys dot nl; *)','Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.0*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 5.0; WOW64;*Trident/4.0*)*','Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.1*','Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.0*','Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9*) Gecko/* Firefox/3.1*','Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.6*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 5.1; WOW64;*Trident/4.0*)*','Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* K-Meleon/1.5*','Mozilla/5.0 (compatible; Konqueror/4.6*; Debian) KHTML/4.6* (like Gecko)*','Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* K-Meleon/1.5*','Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.6*','Mozilla/5.0 (compatible; Konqueror/4.5*; Debian) KHTML/4.5* (like Gecko)*','Mozilla/5.0 (compatible; Konqueror/4.5*; Windows) KHTML/4.5* (like Gecko)','Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* K-Meleon/1.6*','Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.6*','Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* K-Meleon/1.6*','Mozilla/5.0 (compatible; Konqueror/4.5*; NetBSD) KHTML/4.5* (like Gecko)*','Mozilla/5.0 (compatible; MSIE 9.0; *Windows NT 6.0; WOW64; Trident/5.0*)*','Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.1*','Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.1*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 6.0; WOW64;*Trident/4.0*)*','Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*','Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:FeedParser; *) Gecko/*','Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.1*','Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.5*','Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.5*','Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.5*','Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9*) Gecko/* Fennec/1.1*','Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9*) Gecko/* Fennec/1.1*','Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9*) Gecko/* Fennec/1.0*','Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.0*','Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.1*','Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.9*) Gecko/* SeaMonkey/2.0*','Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9*) Gecko/* Fennec/1.0*','Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9*) Gecko/* Fennec/1.1*','Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) *Safari/*','Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* Firefox/3.0*','Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/3.0*','Mozilla/* (SymbianOS/*; ?; *) AppleWebKit/* (KHTML, like Gecko) Safari/*','facebookexternalhit/* (?http://www.facebook.com/externalhit_uatext.php)*','Mozilla/5.0 (Windows; U; Windows *; *; rv:*) Gecko/* Firefox/* webaroo/*','Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/5.0 (Windows NT 6.1; rv:2.*) Gecko/* Firefox/4.* SeaMonkey/2.3*','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.1*; *Windows 98; Win 9x 4.90*','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0*; *Windows 98; Win 9x 4.90*','Mozilla/5.0 (compatible; LegalAnalysisAgent/1.*; http://www.legalx.net)','Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.1*','Mozilla/5.0 (Windows NT 5.1; rv:2.*) Gecko/* Firefox/4.* SeaMonkey/2.4*','Mozilla/5.0 (compatible; Konqueror/4.0*; Debian) KHTML/4.* (like Gecko)','Mozilla/5.0 (Windows NT 6.1; rv:2.*) Gecko/* Firefox/4.* SeaMonkey/2.4*','Mozilla/5.0 (compatible; *; http://www.80legs.com/spider.html;) Gecko/*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.1*; *Windows 98; Win 9x 4.90*','Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.*','Tumblr/* RSS syndication ( http://www.tumblr.com/) (support@tumblr.com)','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; *MSOffice 12)','Mozilla/5.0 (Windows NT 6.1; rv:2.*) Gecko/* Firefox/4.* SeaMonkey/2.1*','Mozilla/5.0 (Windows NT 5.1; rv:2.*) Gecko/* Firefox/4.* SeaMonkey/2.2*','Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.0*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.0*; *Windows 98; Win 9x 4.90*','Mozilla/5.0 (Windows NT 5.1; rv:2.*) Gecko/* Firefox/4.* SeaMonkey/2.1*','Mozilla/5.0 (Windows NT 6.0; rv:2.*) Gecko/* Firefox/4.* SeaMonkey/2.1*','Mozilla/5.0 (Windows NT 6.0; rv:2.*) Gecko/* Firefox/4.* SeaMonkey/2.2*','Mozilla/5.0 (compatible; Plukkie/1.?; http://www.botje.com/plukkie.htm)','Mozilla/5.0 (compatible; Webscan v0.*; +http://otc.dyndns.org/webscan/)','Mozilla/5.0 (Windows NT 6.0; rv:2.*) Gecko/* Firefox/4.* SeaMonkey/2.3*','Mozilla/5.0 (Windows NT 5.1; rv:2.*) Gecko/* Firefox/4.* SeaMonkey/2.3*','Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (Windows NT 6.1; rv:2.*) Gecko/* Firefox/4.* SeaMonkey/2.2*','Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (Windows NT 6.0; rv:2.*) Gecko/* Firefox/4.* SeaMonkey/2.4*','Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0*; *Windows 98; Win 9x 4.90*','Mozilla/5.0 (Windows NT 6.0; rv:2.*) Gecko/* Firefox/4.* SeaMonkey/2.5*','Mozilla/5.0 (Windows NT 6.1; rv:2.*) Gecko/* Firefox/4.* SeaMonkey/2.5*','Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0*; *Windows 98; Win 9x 4.90*','Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/2.*','Mozilla/5.0 (Windows NT 5.1; rv:2.*) Gecko/* Firefox/4.* SeaMonkey/2.5*','Mozilla/5.0 (compatible; Konqueror/4.*; FreeBSD) KHTML/4.* (like Gecko)','Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/5.0 (compatible; Konqueror/4.*; *Linux) KHTML/4.* (like Gecko)','Mozilla/5.0 (compatible; Konqueror/4.*; NetBSD) KHTML/4.* (like Gecko)','Mozilla/5.0 (compatible; Newz Crawler *; http://www.newzcrawler.com/?)','Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.0*','Mozilla/5.0 (X11; U; Linux i686*; *; rv:1.9.*) Gecko/* Thunderbird/1.*','Mozilla/5.0 (X11; U; Linux i686*; *; rv:1.9.*) Gecko/* Thunderbird/2.*','Mozilla/5.0 (X11; U; Linux i686*; *; rv:1.9.*) Gecko/* Thunderbird/3.*','Mozilla/5.0 (Macintosh; U; *Mac OS X; *) AppleWebKit/* (*) Pandora/2.*','Mozilla/5.0 (X11; ?; Linux*; *; rv:1.9*) Gecko/20060221 SeaMonkey/2.0*','Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (*Mac OS X*) *AppleWebKit/* (KHTML, like Gecko) *Safari/*','Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML, like Gecko) *OmniWeb/*','Mozilla/5.0 (*SymbianOS*) AppleWebKit/* (KHTML, like Gecko) *Safari/*','Outlook-Express/7.0 (MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; *)','*-*/1.0 BREW/2.1* Browser/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1','Microsoft Data Access Internet Publishing Provider Protocol Discovery','Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/5.0 (compatible; JadynAveBot; *http://www.jadynave.com/robot*','Mozilla/5.0 (Windows; *; Win 9x 4.90*; *; rv:1.*) Gecko/* Firefox/1.*','*-*/1.0 BREW/3.0* Browser/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1','*-*/1.0 BREW/2.0* Browser/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1','Mozilla/5.0 (compatible; Lipperhey Spider; http://www.lipperhey.com/)','*-*/1.0 BREW/3.1* Browser/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1','Mozilla/5.0 (compatible; NetcraftSurveyAgent/1.0; *info@netcraft.com)','Mozilla/5.0 (compatible; MojeekBot/*; http://www.mojeek.com/bot.html)','Mozilla/5.0 (Macintosh; U; PPC Mac OS X; *) AppleWebKit/* RealPlayer','Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (compatible; spbot/*; +http://www.seoprofiler.com/bot/ )','Mozilla/5.0 (compatible; bingbot/2.*http://www.bing.com/bingbot.htm)','Atrax Solutions atraxbot/0.*; http://www.atraxsolutions.com/atraxbot','Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Chimera/*','Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.0*','Mozilla/5.0 (*; Rojo *; http://www.rojo.com/corporate/help/agg; *)*','Mozilla/5.0 (Macintosh; *Mac OS X*; rv:2.2a*) Gecko/* Firefox/4.2a*','Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:Rojo; *) Gecko/*','Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.1*','Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.5*','Mozilla/5.0 (compatible; DBLBot/1.0; ?http://www.dontbuylists.com/)','CC Metadata Scaper http://wiki.creativecommons.org/Metadata_Scraper','Mozilla/4.7 (compatible; WhizBang; http://www.whizbang.com/crawler)','Mozilla/5.0 (Android; Linux*; rv:2.*) Gecko/* Firefox/* Fennec/4.0*','Mozilla/5.0 (*CentOS*) AppleWebKit/* (KHTML, like Gecko) *Safari/*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 5.2;*Trident/4.0*)*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 6.0;*Trident/4.0*)*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 7.0;*Trident/4.0*)*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 5.0;*Trident/4.0*)*','Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) Web Link Validator*','Mozilla/5.0 (*Windows NT 6.1 WOW64*rv:2.2a*) Gecko/* Firefox/4.2a*','rssImagesBot/0.1 (*http://herbert.groot.jebbink.nl/?app=rssImages)','Mozilla/5.0 (compatible; MSIE 9.0; *Windows NT 6.0; Trident/5.0*)*','Mozilla/5.0 (compatible; MSIE 9.0; *Windows NT 5.2; Trident/5.0*)*','Mozilla/5.0 (*Windows NT 5.2*WOW64*rv:2.2a*) Gecko/* Firefox/4.2a*','Mozilla/4.0 (compatible; MSIE 7.0*; Windows NT 5.2; Trident/4.0*)*','Mozilla/5.0 (compatible; MSIE 9.0; *Windows NT 5.1; Trident/5.0*)*','Mozilla/5.0 (compatible; MSIE 9.0; *Windows NT 6.1; Trident/5.0*)*','Mozilla/5.0 (*Windows NT 6.0*WOW64*rv:2.2a*) Gecko/* Firefox/4.2a*','Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.1*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 5.1;*Trident/4.0*)*','Mozilla/4.0 (compatible; MSIE 7.0*; Windows NT 5.1; Trident/4.0*)*','Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.0*','Mozilla/5.0 (Windows; ?; Win98; *; rv:1.9*) Gecko/* SeaMonkey/2.0*','Mozilla/5.0 (*Windows NT 5.1*WOW64*rv:2.2a*) Gecko/* Firefox/4.2a*','Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/4.0 (compatible; MSIE 7.0*; Windows NT 6.0; Trident/4.0*)*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 6.1;*Trident/4.0*)*','Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/9.*','Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/9.*','Mozilla/5.0 (*Linux*) AppleWebKit/* (KHTML, like Gecko) *Safari/*','Mozilla/5.0 (compatible; DotBot/*; http://www.dotnetdotcom.org/*)','Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/9.*','Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/9.*','Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/9.*','Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/9.*','Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.*','Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.*','Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.*','Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.*','Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*','Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.*','Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.*','Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.*','Mozilla/4.0 PowerTV/1.5 (Compatible; Spyglass DM 3.2.1, EXPLORER)','Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*','Mozilla/5.0 (compatible; Konqueror/4.6*) KHTML/4.6* (like Gecko)*','Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.*','Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.*','Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.*','Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.*','Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.*','Mozilla/5.0 (X11; *; OpenBSD*; *; rv:2.2a*) Gecko/* Firefox/4.2a*','Mozilla/5.0 (X11; *; FreeBSD*; *; rv:2.2a*) Gecko/* Firefox/4.2a*','Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*','Mozilla/5.0 (compatible; Konqueror/4.5*) KHTML/4.5* (like Gecko)*','Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.1*) Sleipnir/2.*','Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.0*) Sleipnir/2.*','Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.2*) Sleipnir/2.*','Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.0*) Sleipnir/2.*','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; *MSOffice 12)','Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.*','Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98; Win 9x 4.90;*)*','Mozilla/5.0 (compatible; Twingly Recon; http://www.twingly.com/)','Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.5*','Mozilla/5.0 (*Windows NT 6.1 WOW64*rv:2.0*) Gecko/* Firefox/4.0*','Mozilla/4.0 (compatible; MSIE 7.0*; *Windows 98; Win 9x 4.90;*)*','Mozilla/5.0 (*Windows NT 6.0*WOW64*rv:2.0*) Gecko/* Firefox/4.0*','Mozilla/5.0 (*Windows NT 5.2*WOW64*rv:2.0*) Gecko/* Firefox/4.0*','Mozilla/5.0 (Macintosh; *Mac OS X*; rv:5.*) Gecko/* Firefox/5.0*','Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/5.0 (*Windows NT 5.1*WOW64*rv:2.0*) Gecko/* Firefox/4.0*','Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.1*) Sleipnir/2.*','Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.0*','Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/8.*','Microsoft Data Access Internet Publishing Provider Cache Manager','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; *MSOffice 12)','Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.0*','Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.1*','Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.1*','Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.5*','Mozilla/5.0 (X11; *; IRIX64*; *; rv:2.2a*) Gecko/* Firefox/4.2a*','Knight/0.? (Zook Knight; http://knight.zook.in/; knight@zook.in)','Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98; Win 9x 4.90;*)*','Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*','Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*','Mozilla/5.0 (*Windows NT 6.0*WOW64*rv:5.*) Gecko/* Firefox/5.0*','Mozilla/5.0 (X11; *; SunOS*; *; rv:2.2a*) Gecko/* Firefox/4.2a*','Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*','Mozilla/5.0 (*Windows NT 5.1*WOW64*rv:5.*) Gecko/* Firefox/5.0*','Mozilla/5.0 (*Windows NT 5.2*WOW64*rv:5.*) Gecko/* Firefox/5.0*','Mozilla/5.0 (X11; *; HP-UX*; *; rv:2.2a*) Gecko/* Firefox/4.2a*','Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*','Mozilla/5.0 (*Windows NT 6.1*WOW64*rv:5.*) Gecko/* Firefox/5.0*','Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98; Win 9x 4.90;*)*','Mozilla/4.0 (compatible; MSIE ?.0; Windows NT *Lunascape 6.0*)*','Mozilla/5.0 (compatible; MSIE 7.0 ?http://www.europarchive.org)','Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*','Mozilla/4.0 (compatible; MSIE ?.0; Windows NT *Lunascape 5.1*)*','Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*','Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*','Mozilla/5.0 (Windows; *; Win98; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*','Mozilla/5.0 (Windows; *; Win95; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/* (compatible; linktiger/*; *http://www.linktiger.com*)','Mozilla/4.0 (compatible; Link Utility; http://net-promoter.com)','Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/5.0 (compatible; unwrapbot/2.*; +http://www.unwrap.jp*)','roboobot/1.* (roboo; http://wap.roboo.com; winter.pi@roboo.com)','Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/4.0 (compatible; MSIE ?.0; Windows NT *Lunascape 5.0*)*','Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9.2*) Gecko/* Firefox/3.6*','Mozilla/5.0 (X11; *; DragonFly*; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (compatible; Konqueror/4.0*) KHTML/4.* (like Gecko)','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.1*; *Windows NT 4.0*','Mozilla/4.0 (compatible; MSIE ?.0; GomezAgent ?.0; Windows NT)','Mozilla/5.0 (Windows; ?; Win*9x 4.90; *) Gecko/* Netscape*/7.*','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.1*; *Windows NT 5.0*','Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0*; *Windows NT 6.1*','Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0*; *Windows NT 6.0*','Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0*; *Windows NT 5.1*','Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0*; *Windows NT 5.0*','Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0*; *Windows NT 6.0*','Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (X11; *; OpenBSD*; *; rv:5.*) Gecko/* Firefox/5.0*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.0*; *Windows NT 5.1*','Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/9.*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.0*; *Windows NT 5.0*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.0*; *Windows NT 4.0*','Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0*; *Windows NT 4.0*','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0*; *Windows NT 6.1*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.0*; *Windows NT 6.1*','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0*; *Windows NT 5.0*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.0*; *Windows NT 6.0*','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0*; *Windows NT 5.1*','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0*; *Windows NT 6.0*','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0*; *Windows NT 4.0*','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.1*; *Windows NT 6.1*','Mozilla/5.0 (compatible; ClixSense; http://www.clixsense.com/)','Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.1; *Maxthon*)*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.1*; *Windows NT 6.1*','Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.1*','Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.0; *Maxthon*)*','Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98; Win 9x 4.90*)*','Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98; Win 9x 4.90*)*','Outlook-Express/7.0 (MSIE 7.0; Windows NT 6.1; Trident/4.0; *)','Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9.*) Gecko/* Firefox/3.5*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.1*; *Windows NT 6.0*','Mozilla/5.0 (compatible; Diffbot/0.1; +http://www.diffbot.com)','Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0*; *Windows NT 5.0*','mozilla/5.0 (compatible; genevabot +http://www.healthdash.com)','Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.1; *Maxthon*)*','Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.1*','Outlook-Express/7.0 (MSIE 7.0; Windows NT 5.1; Trident/4.0; *)','Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.2; *Maxthon*)*','Mozilla/5.0 (*aggregator:TailRank; http://tailrank.com/robot)*','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.1*; *Windows NT 5.1*','Mozilla/5.0 (compatible; SEODat/0.* http://crawler.seodat.com)','Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.0; *Maxthon*)*','Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0*; *Windows NT 4.0*','Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0*; *Windows NT 5.1*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.1*; *Windows NT 5.2*','Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.0*','WebImages * (?http://herbert.groot.jebbink.nl/?app=WebImages?)','Mozilla/4.0 (compatible; MSIE 7.0*; *Windows NT 5.2;*Win64;*)*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.1*; *Windows NT 5.0*','Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.0*','Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/4.0 (compatible; MSIE 7.0*; *Windows NT 5.2;*WOW64;*)*','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.1*; *Windows NT 5.2*','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.1*; *Windows NT 6.0*','Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.1*; *Windows NT 4.0*','Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.1*; *Windows NT 5.1*','Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 8.*)*','Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.*)*','Mozilla/5.0 (*Windows NT 6.1*WOW64*rv:*) Gecko/* Firefox/12.*','Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.*)*','Mozilla/5.0 (compatible; ScoutJet; +http://www.scoutjet.com/)','Mozilla/5.0 (*Windows NT 5.1*WOW64*rv:*) Gecko/* Firefox/11.*','Mozilla/5.0 (*Windows NT 5.2*WOW64*rv:*) Gecko/* Firefox/11.*','Mozilla/5.0 (*Windows NT 6.2*WOW64*rv:*) Gecko/* Firefox/12.*','Mozilla/5.0 (*Windows NT 6.0*WOW64*rv:*) Gecko/* Firefox/12.*','Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.0*','Mozilla/5.0 (*Windows NT 6.1*WOW64*rv:*) Gecko/* Firefox/11.*','Mozilla/5.0 (*Windows NT 5.2*WOW64*rv:*) Gecko/* Firefox/12.*','Mozilla/5.0 (*Windows NT 6.2*WOW64*rv:*) Gecko/* Firefox/11.*','Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.0*','Mozilla/5.0 (compatible; aiHitBot*/*; +http://www.aihit.com/)','Mozilla/5.0 (*Windows NT 5.1*WOW64*rv:*) Gecko/* Firefox/12.*','Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.*','Mozilla/5.0 (*Windows NT 6.0*WOW64*rv:*) Gecko/* Firefox/11.*','Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; *Mac OS X*)','Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.1*','Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.8*) Gecko/* Firefox/2.*','e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)','Mozilla/5.0 (*Windows NT 5.1*WOW64*rv:*) Gecko/* Firefox/10.*','Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.1*','Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/9.*','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Webaroo/*)','Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (*Windows NT 5.2*WOW64*rv:*) Gecko/* Firefox/10.*','Mozilla/5.0 (*Windows NT 6.1*WOW64*rv:*) Gecko/* Firefox/10.*','Mozilla/5.0 (*Windows NT 6.2*WOW64*rv:*) Gecko/* Firefox/10.*','Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*Win64;*)*','Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*WOW64;*)*','Mozilla/5.0 (X11; *; IRIX64*; *; rv:5.*) Gecko/* Firefox/5.0*','Mozilla/5.0 (X11; *; *Linux*; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/4.0 (compatible; BOTW Feed Grabber; *http://botw.org)','Mozilla/5.0 (*Windows NT 6.0*WOW64*rv:*) Gecko/* Firefox/10.*','(HTML Validator http://www.searchengineworld.com/validator/)','Mozilla/5.0 (X11; *; SunOS*; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/5.0 (*Windows NT 6.0*WOW64*rv:*) Gecko/* Firefox/7.*','Mozilla/5.0 (*Windows NT 6.2*WOW64*rv:*) Gecko/* Firefox/7.*','Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/5.0 (*Windows NT 5.1*WOW64*rv:*) Gecko/* Firefox/8.*','Mozilla/5.0 (*Windows NT 5.2*WOW64*rv:*) Gecko/* Firefox/7.*','Mozilla/5.0 (*Windows NT 6.0*WOW64*rv:*) Gecko/* Firefox/8.*','Mozilla/5.0 (*Windows NT 6.2*WOW64*rv:*) Gecko/* Firefox/8.*','Mozilla/5.0 (*Windows NT 5.1*WOW64*rv:*) Gecko/* Firefox/9.*','Mozilla/5.0 (*Windows NT 5.2*WOW64*rv:*) Gecko/* Firefox/9.*','Mozilla/5.0 (Linux; *; PPC*; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/5.0 (*Windows NT 6.0*WOW64*rv:*) Gecko/* Firefox/9.*','Mozilla/5.0 (*Windows NT 6.1*WOW64*rv:*) Gecko/* Firefox/8.*','Mozilla/5.0 (*Windows NT 5.1*WOW64*rv:*) Gecko/* Firefox/7.*','Mozilla/5.0 (*Windows NT 5.2*WOW64*rv:*) Gecko/* Firefox/8.*','Mozilla/5.0 (*Windows NT 6.1*WOW64*rv:*) Gecko/* Firefox/9.*','Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.8*) Gecko/* Firefox/2.*','Mozilla/5.0 (*Windows NT 6.0*WOW64*rv:*) Gecko/* Firefox/6.*','Mozilla/5.0 (*Windows NT 5.1*WOW64*rv:*) Gecko/* Firefox/6.*','Mozilla/5.0 (*Windows NT 6.1*WOW64*rv:*) Gecko/* Firefox/7.*','Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (*Windows NT 6.2*WOW64*rv:*) Gecko/* Firefox/9.*','Mozilla/5.0 (*Windows NT 5.0*rv:2.2a*) Gecko/* Firefox/4.2a*','Mozilla/5.0 (*Windows NT 5.1*rv:2.2a*) Gecko/* Firefox/4.2a*','Mozilla/5.0 (*Windows NT 6.1*rv:2.2a*) Gecko/* Firefox/4.2a*','Mozilla/5.0 (X11; *; SunOS*; *; rv:5.*) Gecko/* Firefox/5.0*','Mozilla/5.0 (*Windows NT 6.0*rv:2.2a*) Gecko/* Firefox/4.2a*','Mozilla/5.0 (*Windows NT 5.2*rv:2.2a*) Gecko/* Firefox/4.2a*','FeedOnFeeds/0.1.* ( http://minutillo.com/steve/feedonfeeds/)','Mozilla/5.0 (*Windows NT 5.2*WOW64*rv:*) Gecko/* Firefox/6.*','Mozilla/5.0 (Macintosh; ?; *Mac OS X*) Gecko/* Netscape*/9.*','Mozilla/4.0 (compatible; MSIE 7.0; Win32) Link Commander 3.0','Mozilla/5.0 (*Windows NT 6.2*WOW64*rv:*) Gecko/* Firefox/6.*','Mozilla/5.0 (*Windows NT 6.1*WOW64*rv:*) Gecko/* Firefox/6.*','Mozilla/5.0 (compatible; Crawly/1.*; +http://*/crawler.html)','TwengaBot-Discover (http://www.twenga.fr/bot-discover.html)','Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0*; *Win 9x 4.90*','Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0*; *Win 9x 4.90*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.1*; *Win 9x 4.90*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.0*; *Win 9x 4.90*','Mozilla/5.0 (compatible; Seznam screenshot-generator 2.0;*)','OpenTaggerBot (http://www.opentagger.com/opentaggerbot.htm)','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.1*; *Win 9x 4.90*','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0*; *Win 9x 4.90*','Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.*','Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.*','Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.*','Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.*','Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.*','Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.*','Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.*','Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.*','Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.*','Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.*','Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.*','Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/9.*','Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/9.*','Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/9.*','Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/9.*','Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/9.*','Mozilla/* (compatible; OffByOne; Windows*) Webster Pro V3.*','Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.*','Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/9.*','Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.5*) Gecko/*','Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.5*) Gecko/*','Mozilla/5.0 (compatible; Twitturls; +http://twitturls.com)','InfociousBot (?http://corp.infocious.com/tech_crawler.php)','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0*; *Windows 98*','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.1*; *Windows 95*','Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.6*) Gecko/*','Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.4*) Gecko/*','Mozilla/5.0 (compatible; RSSMicro.com RSS/Atom Feed Robot)','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0*; *Windows 95*','Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0*; *Windows 98*','Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.8*) Gecko/*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.1*; *Windows 98*','Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.9*) Gecko/*','Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.9*) Gecko/*','Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.9*) Gecko/*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.1*; *Windows 95*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.0*; *Windows 98*','Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.4*) Gecko/*','Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.8*) Gecko/*','Mozilla/4.0 (compatible; MSIE 8.0; *AOL 9.0*; *Windows 95*','Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.6*) Gecko/*','Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.8*) Gecko/*','Mozilla/5.0 (X11; *Linux*; rv:2.2a*) Gecko/* Firefox/4.2a*','Mozilla/5.0 (*Windows NT 6.1*rv:2.0*) Gecko/* Firefox/4.0*','Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.1*; *Windows 98*','Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.7*) Gecko/*','Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.7*) Gecko/*','Vodafone* Mozilla/* (compatible; MSIE *.*; Windows CE; *)*','Mozilla/5.0 (*Windows NT 6.0*rv:2.0*) Gecko/* Firefox/4.0*','Mozilla/5.0 (*Windows NT 5.1*rv:2.0*) Gecko/* Firefox/4.0*','Mozilla/5.0 (*Windows NT 5.2*rv:2.0*) Gecko/* Firefox/4.0*','Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0*; *Windows 98*','Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0*; *Windows 95*','onCHECK Linkchecker von www.scientec.de fuer www.onsinn.de','Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0*; *Windows 95*','Mozilla/4.5 (compatible; iCab 4.2*; Macintosh; *Mac OS X*)','Mozilla/5.0 (*Windows NT 5.0*rv:2.0*) Gecko/* Firefox/4.0*','Mozilla/5.0 (compatible; Ezooms/1.0; ezooms.bot@gmail.com)','Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; *Mac OS X*)','Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.7*) Gecko/*','Mozilla/5.0 (*Linux i686* *Desktop/LX Amethyst*) *Gecko/*','Mozilla/4.0 (compatible; smartBot/1.*; checking links; *)','MOT-MP*/* Mozilla/4.0 (compatible; MSIE *; Windows CE; *)','Mozilla/5.0 (*Windows NT 5.1*rv:5.*) Gecko/* Firefox/5.0*','Mozilla/5.0 (*Windows NT 5.2*rv:5.*) Gecko/* Firefox/5.0*','Mozilla/5.0 (X11; *; *Linux*; rv:1.*) Gecko/* Firefox/1.*','Mozilla/5.0 (X11; *; HP-UX*;*rv:5.*) Gecko/* Firefox/5.0*','T-Mobile* Mozilla/* (compatible; MSIE *.*; Windows CE; *)','Mozilla/5.0 (*Windows NT 6.0*rv:5.*) Gecko/* Firefox/5.0*','Healthbot/Health_and_Longevity_Project_(HealthHaven.com) ','Linguee Bot (http://www.linguee.com/bot; bot@linguee.com)','Mozilla/5.0 (*Windows NT 5.0*rv:5.*) Gecko/* Firefox/5.0*','livedoor FeedFetcher/0.0* (http://reader.livedoor.com/;*)','Mozilla/5.0 (*Windows NT 6.1*rv:5.*) Gecko/* Firefox/5.0*','Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.5*) Gecko/*','msnbot-webmaster/1.0 (*http://search.msn.com/msnbot.htm)','Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.6*) Gecko/*','Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.8*) Gecko/*','Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.7*) Gecko/*','Mozilla/5.0 (X11;*FreeBSD*;*rv:5.*) Gecko/* Firefox/5.0*','msnbot-NewsBlogs/2.* (+http://search.msn.com/msnbot.htm)','Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.9*) Gecko/*','Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.4*) Gecko/*','Mozilla/4.0 (compatible; MSIE ?.0; Microsoft ZuneHD 4.*)','Mozilla/4.0 (compatible; Lotus-Notes/5.0; Macintosh PPC)','Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.*','Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/9.*','Mozilla/* (compatible; iCab 3.0*; Macintosh; *Mac OS X*)','DuckDuckBot/*; (?http://duckduckgo.com/duckduckbot.html)','Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.*','Mozilla/5.0 (*Windows NT 6.1*rv:*) Gecko/* Firefox/11.*','Mozilla/5.0 (*Windows NT 6.2*rv:*) Gecko/* Firefox/11.*','Mozilla/5.0 (*Windows NT 6.2*rv:*) Gecko/* Firefox/12.*','Mozilla/5.0 (*Windows NT 5.2*rv:*) Gecko/* Firefox/11.*','Mozilla/5.0 (*Windows NT 6.0*rv:*) Gecko/* Firefox/11.*','Mozilla/5.0 (*Windows NT 6.1*rv:*) Gecko/* Firefox/12.*','Mozilla/5.0 (*Windows NT 5.1*rv:*) Gecko/* Firefox/12.*','Mozilla/5.0 (*Windows NT 5.2*rv:*) Gecko/* Firefox/12.*','Mozilla/5.0 (*Windows NT 5.1*rv:*) Gecko/* Firefox/11.*','Mozilla/5.0 (*Windows NT 5.0*rv:*) Gecko/* Firefox/12.*','Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.01*)*','Mozilla/5.0 (*Windows NT 6.0*rv:*) Gecko/* Firefox/12.*','Mobitype * (compatible; Mozilla/*; MSIE *.*; Windows *)','Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.0*','Mozilla/5.0 (*Windows NT 5.0*rv:*) Gecko/* Firefox/10.*','Mozilla/4.0 (compatible; MSIE 7.0*; *Windows NT 5.01*)*','Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.9*','Mozilla/4.0 (compatible; BOTW Spider; *http://botw.org)','Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.9*) Gecko/*','Mozilla/5.0 (*Windows NT 5.1*rv:*) Gecko/* Firefox/10.*','Mozilla/5.0 (*Windows NT 5.2*rv:*) Gecko/* Firefox/10.*','Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.01*)*','Microsoft Data Access Internet Publishing Provider DAV*','Mozilla/5.0 (*Windows NT 6.2*rv:*) Gecko/* Firefox/10.*','Mozilla/5.0 (*Windows NT 6.1*rv:*) Gecko/* Firefox/10.*','Mozilla/5.0 (*Windows NT 6.0*rv:*) Gecko/* Firefox/10.*','Mozilla/5.0 (*Windows NT 5.0*rv:*) Gecko/* Firefox/11.*','Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.6*) Gecko/*','Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.4*) Gecko/*','Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/9.*','Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; PPC*)','Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; PPC*)','Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.7*','Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; 68K*)','Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/9.*','Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; ?; PPC*)','Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.*','Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.8*','Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.*','Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.*','Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.8*) Gecko/*','Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.*','Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.5*','Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.6*','MOT-MP*/* Mozilla/* (compatible; MSIE *; Windows CE; *)','Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.*','Mozilla/5.0 (X11; *Linux*; rv:5.*) Gecko/* Firefox/5.0*','Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.*','Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.7*) Gecko/*','Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.5*) Gecko/*','Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.2*','Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.4*','Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.3*','Mozilla/5.0 (*Windows NT 6.1*rv:*) Gecko/* Firefox/8.*','Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.01*)*','Mozilla/5.0 (*Windows NT 6.1*rv:*) Gecko/* Firefox/9.*','Mozilla/5.0 (*Windows NT 5.1*rv:*) Gecko/* Firefox/9.*','Mozilla/5.0 (*Windows NT 5.0*rv:*) Gecko/* Firefox/7.*','Mozilla/5.0 (*Windows NT 6.2*rv:*) Gecko/* Firefox/8.*','Mozilla/5.0 (*Windows NT 6.2*rv:*) Gecko/* Firefox/9.*','Mozilla/5.0 (*Windows NT 6.0*rv:*) Gecko/* Firefox/9.*','Mozilla/5.0 (*Windows NT 5.2*rv:*) Gecko/* Firefox/9.*','Mozilla/5.0 (*Windows NT 5.0*rv:*) Gecko/* Firefox/9.*','Mozilla/5.0 (*Windows NT 6.2*rv:*) Gecko/* Firefox/6.*','Mozilla/*(*redditbot/*http://www.reddit.com/feedback*)','Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 4.0*)*','Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.0*)*','Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.01*)*','Mozilla/5.0 (*Windows NT 5.1*rv:*) Gecko/* Firefox/8.*','Mozilla/5.0 (*Windows NT 5.0*rv:*) Gecko/* Firefox/6.*','Mozilla/5.0 (*Windows NT 6.0*rv:*) Gecko/* Firefox/7.*','Mozilla/5.0 (*Windows NT 5.1*rv:*) Gecko/* Firefox/6.*','Mozilla/5.0 (*Windows NT 5.2*rv:*) Gecko/* Firefox/7.*','Mozilla/5.0 (*Windows NT 5.2*rv:*) Gecko/* Firefox/6.*','Mozilla/5.0 (*Windows NT 6.1*rv:*) Gecko/* Firefox/7.*','Mozilla/4.0 (compatible; MSIE 7.0*; *Windows NT 5.1*)*','Mozilla/4.0 (compatible; MSIE 7.0*; *Windows NT 6.0*)*','Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 4.0*)*','Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.0*)*','Mozilla/4.0 (compatible; MSIE 7.0*; *Windows NT 5.2*)*','Mozilla/4.0 (compatible; MSIE 7.0*; *Windows NT 5.0*)*','Mozilla/4.0 (compatible; MSIE 7.0*; *Windows NT 4.0*)*','Mozilla/5.0 (*Windows NT 5.2*rv:*) Gecko/* Firefox/8.*','HTC-*/* Mozilla/* (compatible; MSIE *.*; Windows CE*)*','Mozilla/5.0 (*Windows NT 6.1*rv:*) Gecko/* Firefox/6.*','Mozilla/5.0 (*Windows NT 6.0*rv:*) Gecko/* Firefox/8.*','Mozilla/5.0 (*Windows NT 5.1*rv:*) Gecko/* Firefox/7.*','Mozilla/5.0 (*Windows NT 5.0*rv:*) Gecko/* Firefox/8.*','Mozilla/4.0 (compatible; MSIE 7.0*; *Windows NT 6.1*)*','Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.01*)*','Mozilla/5.0 (*Windows NT 6.2*rv:*) Gecko/* Firefox/7.*','Mozilla/5.0 (*Windows NT 6.0*rv:*) Gecko/* Firefox/6.*','FAST MetaWeb Crawler (helpdesk at fastsearch dot com)','Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 4.0*)*','Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.1*)*','Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2*)*','Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.0*)*','Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.2*)*','Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.1*)*','Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 6.0*)*','Mozilla/* (compatible; iCab 3.0*; Macintosh; ?; PPC*)','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 6.0*)*','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 6.1*)*','curl/* (Linux * intel.*dlink.dsm* *; *; beta) boxee/*','voyager/2.0 (http://www.kosmix.com/html/crawler.html)','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 5.2*)*','Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.0*)*','Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 4.0*)*','eStyleSearch * (compatible; MSIE 6.0; Windows NT 5.0)','Mozilla/4.0 (compatible; Lotus-Notes/5.0; Windows-NT)','Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.0*)*','Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 4.0*)*','Mozilla/4.0 (compatible; Lotus-Notes/6.0; Windows-NT)','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 5.0*)*','1st ZipCommander (Net) - http://www.zipcommander.com/','Mozilla/5.0 (compatible; YandexBot/*; MirrorDetector)','Mozilla/4.0 (compatible; MSIE 8.0; *Windows NT 5.1*)*','Arexx (compatible; MSIE 6.0; AmigaOS5.0) IBrowse 4.0','Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.6*) Gecko/*','Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.8*) Gecko/*','Mozilla/*(*MSIE 10.*Windows NT 6.1*64*Trident/6.0*)*','Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.7*) Gecko/*','Mozilla/5.0 (*Mac OS X*) *AppleWebKit/* *Shiira/0.9*','Mozilla/5.0 (*Mac OS X*) *AppleWebKit/* *Shiira/1.2*','Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.4*) Gecko/*','Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.5*) Gecko/*','Busiversebot/v1.0 (http://www.busiverse.com/bot.php)','Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.9*) Gecko/*','Mozilla/5.0 (*Mac OS X*) *AppleWebKit/* *Shiira/2.2*','Mozilla/5.0 (*Mac OS X*) *AppleWebKit/* *Shiira/1.1*','Mozilla/*(*MSIE 10.*Windows NT 6.0*64*Trident/6.0*)*','Mozilla/5.0 (*Mac OS X*) *AppleWebKit/* *Shiira/2.1*','Mozilla/5.0 (*Mac OS X*) *AppleWebKit/* *Shiira/1.0*','Mozilla/5.0 (Danger hiptop 3.*; U; rv:1.7.*) Gecko/*','Strategic Board Bot (?http://www.strategicboard.com)','renlifangbot/1.0 (?http://search.msn.com/msnbot.htm)','envolk?ITS?spider/* (?http://www.envolk.com/envolk*)','Mozilla/5.0 http://www.inclue.com; graeme@inclue.com','Mozilla/4.0 (compatible; MSIE 4.01; Vonna.com b o t)','Mozilla/5.0 (*http://gnomit.com/) Gecko/* Gnomit/1.0','Browscap Mirror System/1.* (browscap.giantrealm.com)','Mozilla/5.0 (compatible; AdHitz; http://adhitz.com/)','neTVision AG andreas.heidoetting@thomson-webcast.net','Mozilla/5.0 (compatible; Teleca *; Brew 3.1*; U; *)*','Mozilla/5.0 (compatible; Teleca *; Brew 3.0*; U; *)*','FeedHub MetaDataFetcher/1.0 (http://www.feedhub.com)','Pingdom.com_bot_version_*_(http://www.pingdom.com/)','Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.5*) Gecko/*','MapoftheInternet.com?(?http://MapoftheInternet.com)','Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.6*) Gecko/*','Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.7*) Gecko/*','T-Mobile Dash Mozilla/4.0 (*) MSNBOT-MOBILE/1.1 (*)','Mozilla/5.0 (*Mac OS X*rv:2.0*) Gecko/*Firefox/4.0*','Mozilla/5.0 (*OpenBSD*rv:2.0*) Gecko/* Firefox/4.0*','Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.8*) Gecko/*','Mozilla/5.0 (*FreeBSD*rv:2.0*) Gecko/* Firefox/4.0*','Mozilla/4.0 (compatible; Advanced Email Extractor*)','Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.4*) Gecko/*','Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.9*) Gecko/*','Windows-RSS-Platform/2.0 (MSIE ?.0; Windows NT *.*)','Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.3*) Gecko/*','Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.0*) Gecko/*','Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.1*) Gecko/*','Mozilla/4.0 (compatible; MSIE 7.0*; *Windows 98*)*','Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98*)*','Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98*)*','Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.2*) Gecko/*','Mozilla/4.0 (compatible; MSIE 4.01; *Windows 95*)*','Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.7*) Gecko/*','Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.6*) Gecko/*','Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.5*) Gecko/*','Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.4*) Gecko/*','Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.8*) Gecko/*','Mozilla/4.0 (compatible; MSIE 5.01; *Windows 95*)*','Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.*','Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.*','Mozilla/5.0 (*IRIX64*rv:2.0*) Gecko/* Firefox/4.0*','online link validator (http://www.dead-links.com/)','Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.6*) Gecko/*','Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.4*) Gecko/*','Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.9*) Gecko/*','Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/9.*','Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.5*) Gecko/*','Godzilla/* (Basic*; *; Commodore C=64; *; rv:1.*)*','Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.8*) Gecko/*','FeedHub FeedDiscovery/1.0 (http://www.feedhub.com)','Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.7*) Gecko/*','Mozilla/5.0 (Macintosh; Intel Mac OS X) Excel/12.*','Mozilla/5.0 (Windows; ?; Win95; *rv:1.5*) Gecko/*','Mozilla/5.0 (Windows; ?; Win98; *rv:1.5*) Gecko/*','Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98*)*','Mozilla/?.? (compatible; MSIE 5.0*; *Mac_PowerPC*','Mozilla/4.0 (compatible; MSIE 6.0; *Windows 95*)*','Mozilla/5.0 (Windows; ?; Win98; *rv:1.8*) Gecko/*','Mozilla/4.0 (compatible; MSIE 6.0; Bluecoat DRTR)','Mozilla/5.0 (*SunOS*rv:2.0*) Gecko/* Firefox/4.0*','Mozilla/4.0 (compatible; MSIE 5.0; *Windows 95*)*','Patwebbot (http://www.herz-power.de/technik.html)','findfiles.net/* (Robot;test_robot@gmx-topmail.de)','Mozilla/5.0 (*Linux*rv:2.0*) Gecko/* Firefox/4.0*','Mozilla/5.0 (*HP-UX*rv:2.0*) Gecko/* Firefox/4.0*','Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98*)*','Mozilla/5.0 (Windows; ?; Win95; *rv:1.9*) Gecko/*','Mozilla/5.0 (Windows; ?; Win95; *rv:1.7*) Gecko/*','Mozilla/5.0 (Windows; ?; Win95; *rv:1.8*) Gecko/*','Mozilla/5.0 (compatible; IPCheck Server Monitor*)','Mozilla/?.? (compatible; MSIE 5.1*; *Mac_PowerPC*','DataFountains/DMOZ Feature Vector Corpus Creator*','WCC Browscap Updater/0.* (PHP: file_get_contents)','Mozilla/*(*MSIE 10.*Windows NT 5.2*Trident/6.0*)*','Mozilla/5.0 (Windows; ?; Win98; *rv:1.9*) Gecko/*','Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98*)*','Mozilla/?.? (compatible; MSIE 4.5*; *Mac_PowerPC*','Mozilla/5.0 (Windows; ?; Win95; *rv:1.4*) Gecko/*','Mozilla/?.? (compatible; MSIE 4.0*; *Mac_PowerPC*','Mozilla/*(*MSIE 10.*Windows NT 6.1*Trident/6.0*)*','Mozilla/*(*MSIE 10.*Windows NT 6.0*Trident/6.0*)*','Mozilla/*(*MSIE 10.*Windows NT 6.2*Trident/6.0*)*','Mozilla/5.0 (Windows; ?; Win98; *rv:1.4*) Gecko/*','Mozilla/?.? (compatible; MSIE 5.2*; *Mac_PowerPC*','Mozilla/4.0 (compatible; MSIE 5.5; *Windows 95*)*','Mozilla/*(*MSIE 10.*Windows NT 5.1*Trident/6.0*)*','Mozilla/5.0 (Windows; ?; Win95; *rv:1.6*) Gecko/*','Mozilla/5.0 (Windows; ?; Win98; *rv:1.7*) Gecko/*','Mozilla/5.0 (Windows; ?; Win98; *rv:1.6*) Gecko/*','Inne: Mozilla/4.0 (compatible; Cerberian Drtrs*)','wwwster/* (Beta, mailto:gue@cis.uni-muenchen.de)','FeedHub FeedFetcher/1.0 (http://www.feedhub.com)','WebmasterWorld StickyMail Server Header Checker*','SafariBookmarkChecker*(?http://www.coriolis.ch/)','Sosospider?(+http://help.soso.com/webspider.htm)','adidxbot/1.1 (?http://search.msn.com/msnbot.htm)','gosospider Mozilla/5.0 (compatible; GosoSpider*)','Mozilla/5.0 (compatible; YahooSeeker/M1A1-R2D2*)','Mozilla/* (compatible; MSPIE *.*; *Windows CE*)*','Mozilla/5.0 (compatible; BMI/* (Y!J-AGENT; 1.0))','UniversalFeedParser/4.* +http://feedparser.org/','Mozilla/5.0 (compatible; FirstSearchBot/1.0; *)','Mozilla/4.0 (compatible; Y!J; for robot study*)','Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)','Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/1.*','Windows-Live-Social-Object-Extractor-Engine/1.0','Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/2.*','Mozilla/5.0 (compatible; YandexImageResizer/*)*','Rome Client (http://tinyurl.com/64t5n) Ver: 0.*','Made by ZmEu @ WhiteHat v0.* (www.WhiteHat.ro)','Mozilla/5.0 (X11; *OpenBSD*; *rv:1.8*) Gecko/*','Mozilla/5.0 (X11; *OpenBSD*; *rv:1.7*) Gecko/*','Mozilla/5.0 (X11; *FreeBSD*; *rv:1.6*) Gecko/*','Mozilla/5.0 (X11; *FreeBSD*; *rv:1.8*) Gecko/*','Mozilla/4.0 (compatible; MSIE 4.01; Windows95)','Microsoft NetShow(TM) Player with RealVideo(R)','Mozilla/5.0 (X11; *FreeBSD*; *rv:1.9*) Gecko/*','Mozilla/* (Win98; I) IBrowse/2.3 (AmigaOS 3.1)','Advanced Browser (http://www.avantbrowser.com)','Mozilla/4.0 (compatible; MSIE ?.0; SaferSurf*)','Mozilla/5.0 (X11; *OpenBSD*; *rv:1.9*) Gecko/*','Mozilla/* (Win98; I) IBrowse/2.1 (AmigaOS 3.1)','Mozilla/5.0 (X11; *OpenBSD*; *rv:1.4*) Gecko/*','Mozilla/* (Win98; I) IBrowse/2.2 (AmigaOS 3.1)','Mozilla/5.0 (X11; *FreeBSD*; *rv:1.4*) Gecko/*','Mozilla/5.0 (X11; *FreeBSD*; *rv:1.7*) Gecko/*','Mozilla/5.0 (SnapPreviewBot) Gecko/* Firefox/*','exactseek-pagereaper-* (crawler@exactseek.com)','Liferea/1.* (Linux; *; http://liferea.sf.net/)','Mozilla/5.0 (X11; *OpenBSD*; *rv:1.6*) Gecko/*','Mozilla/5.0 (X11; *OpenBSD*; *rv:1.5*) Gecko/*','Mozilla/5.0 (X11; *FreeBSD*; *rv:1.5*) Gecko/*','Mozilla/5.0 (compatible; YandexBlogs/*; robot)','Mozilla/5.0 (compatible; Yahoo! SearchMonkey*)','mp3Spider cn-search-devel at yahoo-inc dot com','Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/9.*','Mozilla/5.0 (*Mac OS X*) Gecko/* Firefox/11.*','Mozilla/4.0 (compatible; Trend Micro tmdr 1.*','Mozilla/2.0 (compatible; NEWT ActiveX; Win32)','Mozilla/5.0 (*Mac OS X*) Gecko/* Firefox/12.*','Mozilla/5.0 (*Mac OS X*) Gecko/* Firefox/10.*','Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.*','Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.*','Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.*','Mozilla/5.0 (X11; *Linux*; *rv:1.5*) Gecko/*','Mozilla/4.0 WebTV/2.6*(compatible; MSIE 4.0)','Mozilla/5.0 (*OpenBSD*) Gecko/* Firefox/10.*','GOFORITBOT (?http://www.goforit.com/about/?)','psbot/* (?http://www.picsearch.com/bot.html)','Mozilla/5.0 (X11; *SunOS*; *rv:1.5*) Gecko/*','inetbot/* (?http://www.inetbot.com/bot.html)','Mozilla/5.0 (X11; *SunOS*; *rv:1.8*) Gecko/*','Mozilla/5.0 (X11; *Linux*; *rv:1.8*) Gecko/*','Mozilla/5.0 (X11; *Linux*; *rv:1.6*) Gecko/*','Mozilla/4.0 (compatible; Scumbot/*; Linux/*)','Mozilla/5.0 (*Mac OS X*) Gecko/* Firefox/6.*','Mozilla/5.0 (X11; *Linux*; *rv:1.9*) Gecko/*','Mozilla/5.0 (*OpenBSD*) Gecko/* Firefox/12.*','Mozilla/5.0 (X11; *SunOS*; *rv:1.4*) Gecko/*','Mozilla/5.0 (X11; *SunOS*; *rv:1.9*) Gecko/*','Mozilla/5.0 (compatible; Exabot-Images/3.0*)','Mozilla/5.0 (*Mac OS X*) Gecko/* Firefox/9.*','Mozilla/5.0 (X11; *Linux*; *rv:1.4*) Gecko/*','Mozilla/5.0 (*OpenBSD*) Gecko/* Firefox/11.*','CipinetBot (http://www.cipinet.com/bot.html)','Tasap-image-robot/0.* (http://www.tasap.com)','Mozilla/5.0 (X11; *SunOS*; *rv:1.7*) Gecko/*','Mozilla/5.0 (*Mac OS X*) Gecko/* Firefox/8.*','Mozilla/5.0 (X11; *Linux*; *rv:1.7*) Gecko/*','Browser Capabilities Project - PHP Browscap*','Mozilla/5.0 (X11; *SunOS*; *rv:1.6*) Gecko/*','Mozilla/4.0 WebTV/2.3*(compatible; MSIE 3.0)','Mozilla/4.0 WebTV/2.1*(compatible; MSIE 3.0)','Mozilla/4.0 WebTV/2.2*(compatible; MSIE 3.0)','Mozilla/4.0 WebTV/2.8*(compatible; MSIE 4.0)','Mozilla/4.0 WebTV/2.9*(compatible; MSIE 4.0)','Mozilla/4.0 WebTV/2.0*(compatible; MSIE 3.0)','Mozilla/4.0 WebTV/2.4*(compatible; MSIE 3.0)','Mozilla/5.0 (*Mac OS X*) Gecko/* Firefox/7.*','Mozilla/5.0 (compatible; BecomeJPBot/2.3; *)','Mozilla/4.0 WebTV/2.5*(compatible; MSIE 4.0)','Mozilla/4.0 WebTV/2.7*(compatible; MSIE 4.0)','UofTDB_experiment* (leehyun@cs.toronto.edu)','Opera/9.80*(*Windows NT 5.0*)*Version/10.1*','Mozilla/5.0 (*OpenBSD*) Gecko/* Firefox/8.*','Opera/9.80*(*Windows NT 4.0*)*Version/10.6*','Opera/9.80*(*Windows NT 4.0*)*Version/10.1*','ddetailsbot (http://www.displaydetails.com)','Opera/9.80*(*Windows NT 5.1*)*Version/10.1*','Mozilla/5.0 (*OpenBSD*) Gecko/* Firefox/7.*','Opera/9.80*(*Windows NT 5.2*)*Version/10.1*','Mozilla/4.0(?compatible; MSIE 6.0; Qihoo *)','CMS crawler (?http://buytaert.net/crawler/)','Mozilla/5.0 (*OpenBSD*) Gecko/* Firefox/6.*','Opera/9.80*(*Windows NT 5.1*)*Version/10.5*','Opera/9.80*(*Windows NT 6.1*)*Version/10.5*','Opera/9.80*(*Windows NT 6.0*)*Version/10.5*','Mozilla/5.0 (compatible;YodaoBot-Image/1.*)','Mozilla/5.0 (compatible; BMF/* (Y!J-AGENT))','Mozilla/5.0 (compatible; BMC/* (Y!J-AGENT))','Mozilla/5.0 (*IRIX64*) Gecko/* Firefox/10.*','Mozilla/5.0 (compatible; Yahoo! Verifier/*)','Mozilla/5.0 (compatible; YandexFavicons/*)*','Opera/9.80*(*Windows NT 5.0*)*Version/10.5*','Opera/9.80*(*Windows NT 5.0*)*Version/10.6*','Opera/9.80*(*Windows NT 5.2*)*Version/10.5*','Mozilla/5.0 (*FreeBSD*)*Gecko/*Firefox/10.*','Opera/9.80*(*Windows NT 4.0*)*Version/10.5*','Mozilla/3.01 (compatible; Netbox/*; Linux*)','Susie (http://www.sync2it.com/bms/susie.php','Opera/9.80*(*Windows NT 5.1*)*Version/10.6*','*(compatible; MSIE *.*; Windows CE; PPC; *)','Opera/9.80*(*Windows NT 6.1*)*Version/10.6*','Mozilla/?.0 (compatible; Ask Jeeves/Teoma*)','Opera/9.80*(*Windows NT 6.0*)*Version/10.1*','Mozilla/5.0 (*OpenBSD*) Gecko/* Firefox/9.*','Mozilla/5.0 (*FreeBSD*)*Gecko/*Firefox/11.*','Mozilla/5.0 (*IRIX64*) Gecko/* Firefox/11.*','Opera/9.80*(*Windows NT 6.1*)*Version/10.1*','Opera/9.80*(*Windows NT 6.0*)*Version/10.6*','Mozilla/5.0 (*FreeBSD*)*Gecko/*Firefox/12.*','Mozilla/5.0 (*IRIX64*) Gecko/* Firefox/12.*','Mozilla/3.0 WebTV/1.*(compatible; MSIE 2.0)','Mozilla/5.0 (compatible; Butterfly/1.0; *)*','Opera/9.80*(*Windows NT 5.2*)*Version/10.6*','Mozilla/5.0 (*Linux*) Gecko/* Firefox/12.*','Opera/9.80*(*Windows NT 5.2*)*Version/10.*','Mozilla/5.0 (*SunOS*) Gecko/* Firefox/11.*','Opera/9.80*(*Windows NT 6.1*)*Version/14.*','Mozilla/5.0 (compatible; archive.org_bot*)','Mozilla/4.0 (fantomas shadowMaker Browser)','Mozilla/4.0 (compatible; Cerberian Drtrs*)','Mozilla/5.0 (compatible; Viralheat Bot/*) ','Mozilla/5.0 (*IRIX64*) Gecko/* Firefox/8.*','Mozilla/5.0 (*FreeBSD*)*Gecko/*Firefox/8.*','WAP_Browser/5.0 (compatible; YodaoBot/1.*)','Opera/9.80*(*Windows NT 4.0*)*Version/14.*','Opera/9.80*(*Windows NT 6.0*)*Version/14.*','Mozilla/5.0 (*HP-UX*) Gecko/* Firefox/11.*','Mozilla/5.0 (*Linux*) Gecko/* Firefox/11.*','Mozilla/5.0 (*FreeBSD*)*Gecko/*Firefox/9.*','Opera/9.80*(*Windows NT 5.2*)*Version/15.*','Opera/9.80*(*Windows NT 6.0*)*Version/15.*','Opera/9.80*(*Windows NT 6.1*)*Version/15.*','Opera/9.80*(*Windows NT 5.1*)*Version/15.*','Opera/9.80*(*Windows NT 5.0*)*Version/15.*','Opera/9.80*(*Windows NT 5.0*)*Version/14.*','Opera/9.80*(*Windows NT 4.0*)*Version/15.*','Opera/9.80*(*Windows NT 5.0*)*Version/10.*','Mozilla/5.0 (*HP-UX*) Gecko/* Firefox/12.*','Opera/9.80*(*Windows NT 5.1*)*Version/14.*','Opera/9.80*(*Windows NT 5.1*)*Version/10.*','Opera/9.80*(*Windows NT 5.2*)*Version/14.*','Tecomi Bot (http://www.tecomi.com/bot.htm)','Mozilla/5.0 (*IRIX64*) Gecko/* Firefox/9.*','HTML2JPG Blackbox, http://www.html2jpg.com','Mozilla/5.0 (*SunOS*) Gecko/* Firefox/12.*','Opera/9.80*(*Windows NT 4.0*)*Version/10.*','Mozilla/5.0 (*SunOS*) Gecko/* Firefox/10.*','Opera/9.80*(*Windows NT 6.1*)*Version/10.*','Opera/9.80*(*Windows NT 6.1*)*Version/11.*','NextGenSearchBot*(for information visit *)','Opera/9.80*(*Windows NT 4.0*)*Version/11.*','Mozilla/5.0 (*FreeBSD*)*Gecko/*Firefox/7.*','Opera/9.80*(*Windows NT 5.0*)*Version/13.*','Opera/9.80*(*Windows NT 5.1*)*Version/13.*','Mozilla/5.0 (*IRIX64*) Gecko/* Firefox/6.*','Mozilla/5.0 (*FreeBSD*)*Gecko/*Firefox/6.*','Opera/9.80*(*Windows NT 6.1*)*Version/13.*','Opera/9.80*(*Windows NT 6.0*)*Version/13.*','Opera/9.80*(*Windows NT 5.2*)*Version/13.*','Mozilla/5.0 (compatible; Quantcastbot/1.*)','Opera/9.80*(*Windows NT 5.0*)*Version/11.*','Opera/9.80*(*Windows NT 6.0*)*Version/11.*','Opera/9.80*(*Windows NT 5.2*)*Version/12.*','Opera/9.80*(*Windows NT 5.1*)*Version/12.*','Opera/9.80*(*Windows NT 5.0*)*Version/12.*','Opera/9.80*(*Windows NT 4.0*)*Version/12.*','Opera/9.80*(*Windows NT 6.0*)*Version/10.*','Opera/9.80*(*Windows NT 5.2*)*Version/11.*','Opera/9.80*(*Windows NT 5.1*)*Version/11.*','Mozilla/4.0 (compatible; ChangeDetection/*','Mozilla/5.0 (*IRIX64*) Gecko/* Firefox/7.*','Opera/9.80*(*Windows NT 6.1*)*Version/12.*','Opera/9.80*(*Windows NT 6.0*)*Version/12.*','Mozilla/5.0 (compatible; BuzzRankingBot/*)','Opera/9.80*(*Windows NT 4.0*)*Version/13.*','Mozilla/5.0 (compatible; YandexMetrika/*)*','ZIBB Crawler (email address / WWW address)','Mozilla/5.0 (compatible; YandexCatalog/*)*','Mozilla/5.0 (*Linux*) Gecko/* Firefox/10.*','Mozilla/5.0 (*HP-UX*) Gecko/* Firefox/10.*','Mozilla/?.*(*Windows NT 5.0*)*Opera?10.6*','Mozilla/?.*(*Opera/10.5*Windows NT 5.0*)*','Mozilla/?.*(*Windows NT 4.0*)*Opera?10.6*','Mozilla/?.*(*Opera/10.5*Windows NT 4.0*)*','Mozilla/?.*(*Windows NT 6.1*)*Opera?10.1*','Mozilla/?.*(*Opera/10.5*Windows NT 5.1*)*','Mozilla/?.*(*Windows NT 5.1*)*Opera?10.6*','Mozilla/?.*(*Opera/10.1*Windows NT 5.2*)*','Mozilla/?.*(*Windows NT 5.2*)*Opera?10.6*','QuickTime*(qtver=7.6*;os=Windows NT 5.0*)','Opera/9.80*(*Windows 2000*)*Version/10.5*','Mozilla/?.*(*Opera/10.1*Windows NT 5.1*)*','Mozilla/?.*(*Opera/10.6*Windows NT 5.0*)*','Mozilla/?.*(*Opera/10.6*Windows NT 5.2*)*','Mozilla/?.*(*Opera/10.6*Windows NT 6.0*)*','Opera/9.80*(*Windows 2000*)*Version/10.1*','QuickTime*(qtver=7.6*;os=Windows NT 6.1*)','QuickTime*(qtver=7.6*;os=Windows NT 5.2*)','Mozilla/?.*(*Opera/10.6*Windows NT 6.1*)*','Mozilla/?.*(*Opera/10.6*Windows NT 5.1*)*','Mozilla/5.0 (*HP-UX*) Gecko/* Firefox/7.*','QuickTime*(qtver=7.6*;os=Windows NT 5.1*)','Mozilla/?.*(*Windows NT 4.0*)*Opera?10.1*','Mozilla/5.0 (*SunOS*) Gecko/* Firefox/9.*','QuickTime*(qtver=7.6*;os=Windows NT 6.0*)','Mozilla/?.*(*Windows NT 5.0*)*Opera?10.1*','Mozilla/?.*(*Opera/10.1*Windows NT 4.0*)*','Search Engine World Robots.txt Validator*','Mozilla/?.*(*Windows NT 5.1*)*Opera?10.5*','Mozilla/?.*(*Opera/10.1*Windows NT 6.1*)*','Mozilla/?.*(*Windows NT 6.0*)*Opera?10.5*','Mozilla/?.*(*Windows NT 5.2*)*Opera?10.5*','Mozilla/5.0 (*Linux*) Gecko/* Firefox/6.*','Mozilla/?.*(*Windows NT 5.0*)*Opera?10.5*','Mozilla/?.*(*Windows NT 5.2*)*Opera?10.1*','Mozilla/?.*(*Windows NT 6.0*)*Opera?10.1*','Mozilla/?.*(*Windows NT 4.0*)*Opera?10.5*','Opera/9.80*(*Windows 2000*)*Version/10.6*','Mozilla/5.0 (*HP-UX*) Gecko/* Firefox/6.*','Mozilla/?.*(*Opera/10.6*Windows NT 4.0*)*','Mozilla/?.*(*Windows NT 6.1*)*Opera?10.5*','Mozilla/5.0 (*Linux*) Gecko/* Firefox/7.*','Mozilla/5.0 (compatible; EARTHCOM.info/*)','Mozilla/?.*(*Windows NT 5.1*)*Opera?10.1*','Mozilla/?.*(*Windows NT 6.0*)*Opera?10.6*','Mozilla/?.*(*Opera/10.5*Windows NT 5.2*)*','Mozilla/?.*(*Opera/10.1*Windows NT 5.0*)*','Mozilla/5.0 (*SunOS*) Gecko/* Firefox/7.*','Mozilla/?.*(*Opera/10.5*Windows NT 6.1*)*','Mozilla/?.*(*Opera/10.1*Windows NT 6.0*)*','Mozilla/4.0 (compatible; SuperCleaner*;*)','Mozilla/?.*(*Opera/10.5*Windows NT 6.0*)*','Mozilla/5.0 (*SunOS*) Gecko/* Firefox/6.*','Mozilla/?.*(*Windows NT 6.1*)*Opera?10.6*','Html Link Validator (www.lithopssoft.com)','Mozilla/5.0 (compatible; YandexImages/*)*','Mozilla/* (TuringOS; Turing Machine; 0.0)','Mozilla/?.*(*Windows NT 4.0*)*Opera?2.12*','QuickTime*(qtver=7.6*;os=Windows NT 4.0*)','Mozilla/5.0 (compatible; YandexDirect/*)*','Mozilla/5.0 (compatible; YandexAddurl/*)*','envolk/* (?http://www.envolk.com/envolk*)','Mozilla/5.0 (*HP-UX*) Gecko/* Firefox/9.*','Mozilla/5.0 (*SunOS*) Gecko/* Firefox/8.*','Mozilla/?.*(*Windows NT 6.1*)*Opera?2.12*','Mozilla/?.*(*Windows NT 6.0*)*Opera?2.12*','Mozilla/?.*(*Opera/2.12*Windows NT 6.1*)*','Mozilla/?.*(*Windows NT 5.2*)*Opera?2.12*','Mozilla/?.*(*Windows NT 5.1*)*Opera?2.12*','Mozilla/?.*(*Windows NT 5.0*)*Opera?2.12*','Mozilla/?.*(*Opera/2.12*Windows NT 6.0*)*','Mozilla/?.*(*Opera/2.12*Windows NT 5.2*)*','Mozilla/?.*(*Opera/2.12*Windows NT 4.0*)*','Mozilla/?.*(*Opera/2.12*Windows NT 5.0*)*','Mozilla/?.*(*Opera/2.12*Windows NT 5.1*)*','Mozilla/5.0 (*Linux*) Gecko/* Firefox/9.*','Mozilla/5.0 (compatible; nextthing.org/*)','Mozilla/5.0 (*HP-UX*) Gecko/* Firefox/8.*','Mozilla/5.0 (*Linux*) Gecko/* Firefox/8.*','Mozilla/?.*(*Windows NT 5.2*)*Opera?10.*','Mozilla/?.*(*Windows NT 5.0*)*Opera?13.*','Mozilla/?.*(*Windows NT 5.1*)*Opera?10.*','Mozilla/?.*(*Opera/10.*Windows NT 5.1*)*','Mozilla/?.*(*Windows NT 5.1*)*Opera?13.*','Mozilla/?.*(*Windows NT 4.0*)*Opera?13.*','Mozilla/?.*(*Windows NT 5.2*)*Opera?13.*','Mozilla/?.*(*Windows NT 6.1*)*Opera?13.*','Mozilla/?.*(*Windows NT 6.0*)*Opera?13.*','Mozilla/?.*(*Windows NT 6.1*)*Opera?10.*','Mozilla/?.*(*Opera/10.*Windows NT 5.0*)*','Mozilla/5.0 (compatible; CXL-FatAssANT*)','Mozilla/?.*(*Opera/10.*Windows NT 4.0*)*','Mozilla/?.*(*Opera/13.*Windows NT 6.1*)*','Mozilla/?.*(*Opera/13.*Windows NT 6.0*)*','Mozilla/?.*(*Opera/13.*Windows NT 5.2*)*','Mozilla/?.*(*Opera/13.*Windows NT 5.1*)*','Mozilla/?.*(*Opera/11.*Windows NT 5.2*)*','Mozilla/?.*(*Opera/11.*Windows NT 5.1*)*','Mozilla/5.0 (compatible; Charlotte/*; *)','Mozilla/?.*(*Opera/11.*Windows NT 4.0*)*','Mozilla/?.*(*Opera/11.*Windows NT 5.0*)*','Mozilla/?.*(*Opera/2.1*Windows NT 4.0*)*','Mozilla/4.0 (compatible; BorderManager*)','Opera/9.80*(*Windows 2000*)*Version/13.*','QuickTime*(qtver=7.*;os=Windows NT 5.2*)','Mozilla/?.*(*Windows NT 5.2*)*Opera?3.6*','Mozilla/?.*(*Opera/9.5*Windows NT 6.1*)*','Mozilla/?.*(*Windows NT 6.0*)*Opera?3.6*','Mozilla/?.*(*Windows NT 5.1*)*Opera?3.6*','Mozilla/?.*(*Windows NT 5.2*)*Opera?9.6*','Mozilla/?.*(*Windows NT 5.1*)*Opera?9.6*','Mozilla/?.*(*Opera/3.5*Windows NT 5.0*)*','Mozilla/?.*(*Opera/3.5*Windows NT 4.0*)*','Mozilla/?.*(*Windows NT 5.0*)*Opera?3.6*','Mozilla/?.*(*Opera/9.5*Windows NT 6.0*)*','Mozilla/?.*(*Opera/9.5*Windows NT 5.2*)*','Mozilla/?.*(*Opera/10.*Windows NT 6.0*)*','Mozilla/?.*(*Opera/10.*Windows NT 5.2*)*','Opera/9.80*(*Win 9x 4.90*)*Version/10.6*','Mozilla/?.*(*Opera/13.*Windows NT 5.0*)*','Mozilla/?.*(*Opera/3.6*Windows NT 5.1*)*','Mozilla/?.*(*Opera/9.5*Windows NT 5.0*)*','Mozilla/?.*(*Opera/9.5*Windows NT 5.1*)*','Mozilla/5.0 (compatible; Theophrastus/*)','Mozilla/?.*(*Windows NT 6.0*)*Opera?9.6*','Mozilla/?.*(*Windows NT 6.1*)*Opera?3.6*','Mozilla/?.*(*Windows NT 6.1*)*Opera?9.6*','Mozilla/?.*(*Opera/2.1*Windows NT 5.0*)*','Mozilla/?.*(*Opera/12.*Windows NT 5.2*)*','Mozilla/?.*(*Opera/12.*Windows NT 5.1*)*','Opera/9.80*(*Windows 2000*)*Version/11.*','Mozilla/?.*(*Opera/12.*Windows NT 5.0*)*','Mozilla/?.*(*Windows NT 5.1*)*Opera?2.1*','Mozilla/?.*(*Opera/12.*Windows NT 6.0*)*','Mozilla/?.*(*Windows NT 5.2*)*Opera?11.*','Mozilla/?.*(*Windows NT 6.0*)*Opera?11.*','Mozilla/?.*(*Windows NT 6.1*)*Opera?11.*','Mozilla/?.*(*Opera/12.*Windows NT 6.1*)*','Mozilla/?.*(*Windows NT 5.2*)*Opera?2.1*','Mozilla/?.*(*Opera/12.*Windows NT 4.0*)*','Mozilla/?.*(*Opera/15.*Windows NT 5.2*)*','Mozilla/?.*(*Opera/15.*Windows NT 6.0*)*','Mozilla/?.*(*Opera/15.*Windows NT 6.1*)*','Mozilla/?.*(*Opera/3.6*Windows NT 6.1*)*','Mozilla/?.*(*Opera/15.*Windows NT 5.1*)*','Mozilla/?.*(*Opera/15.*Windows NT 5.0*)*','Mozilla/?.*(*Windows NT 6.0*)*Opera?2.1*','Mozilla/?.*(*Windows NT 6.1*)*Opera?2.1*','Mozilla/?.*(*Opera/15.*Windows NT 4.0*)*','QuickTime*(qtver=7.*;os=Windows NT 6.1*)','Opera/*(*Windows Mobile*Opera Mini/6.*)*','Mozilla/?.*(*Windows NT 5.1*)*Opera?11.*','Mozilla/5.0 (compatible; ParchBot/1.0;*)','Mozilla/?.*(*Opera/2.1*Windows NT 6.0*)*','Mozilla/?.*(*Opera/2.1*Windows NT 6.1*)*','Opera/9.80*(*Windows 2000*)*Version/10.*','BookmarkBase(2/;http://bookmarkbase.com)','Mozilla/?.*(*Opera/2.1*Windows NT 5.2*)*','QuickTime*(qtver=7.*;os=Windows NT 5.1*)','Mozilla/?.*(*Opera/2.1*Windows NT 5.1*)*','Mozilla/?.*(*Opera/11.*Windows NT 6.0*)*','Mozilla/?.*(*Opera/11.*Windows NT 6.1*)*','Mozilla/?.*(*Windows NT 4.0*)*Opera?2.1*','Opera/9.80*(*Windows 2000*)*Version/12.*','Mozilla/?.*(*Windows NT 4.0*)*Opera?11.*','Mozilla/?.*(*Windows NT 5.0*)*Opera?12.*','Mozilla/?.*(*Windows NT 4.0*)*Opera?12.*','Mozilla/?.*(*Windows NT 5.0*)*Opera?11.*','Mozilla/?.*(*Windows NT 5.1*)*Opera?12.*','Mozilla/?.*(*Windows NT 5.2*)*Opera?12.*','Mozilla/?.*(*Windows NT 5.0*)*Opera?2.1*','QuickTime*(qtver=7.*;os=Windows NT 6.0*)','Mozilla/?.*(*Windows NT 6.1*)*Opera?12.*','Mozilla/?.*(*Windows NT 6.0*)*Opera?12.*','Mozilla/?.*(*Opera/13.*Windows NT 4.0*)*','Mozilla/?.*(*Opera/9.5*Windows NT 4.0*)*','Mozilla/?.*(*Windows NT 4.0*)*Opera?14.*','Mozilla/?.*(*Opera/9.6*Windows NT 4.0*)*','Mozilla/?.*(*Opera/3.6*Windows NT 6.0*)*','Mozilla/?.*(*Opera/3.6*Windows NT 5.2*)*','Mozilla/?.*(*Windows NT 4.0*)*Opera?9.5*','AideRSS/1.0 (aiderss.com); * subscribers','Opera/9.80*(*Windows 2000*)*Version/15.*','Mozilla/?.*(*Windows NT 4.0*)*Opera?10.*','Mozilla/?.*(*Windows NT 5.0*)*Opera?14.*','Mozilla/?.*(*Windows NT 6.0*)*Opera?10.*','Mozilla/?.*(*Windows NT 4.0*)*Opera?3.5*','Mozilla/?.*(*Opera/9.6*Windows NT 5.2*)*','Mozilla/?.*(*Windows NT 5.2*)*Opera?3.5*','Mozilla/?.*(*Opera/9.6*Windows NT 6.0*)*','DotBot/* (http://www.dotnetdotcom.org/*)','JRTwine Software Check Favorites Utility','Mozilla/?.*(*Opera/9.6*Windows NT 5.0*)*','Mozilla/?.*(*Windows NT 5.0*)*Opera?3.5*','Mozilla/?.*(*Opera/9.6*Windows NT 5.1*)*','Mozilla/?.*(*Opera/3.5*Windows NT 6.1*)*','Mozilla/?.*(*Windows NT 5.1*)*Opera?14.*','QuickTime*(qtver=10.*os=Windows NT 5.2*)','Mozilla/?.*(*Windows NT 6.0*)*Opera?9.5*','QuickTime*(qtver=10.*os=Windows NT 6.0*)','Mozilla/?.*(*Windows NT 6.1*)*Opera?9.5*','QuickTime*(qtver=10.*os=Windows NT 5.1*)','QuickTime*(qtver=10.*os=Windows NT 4.0*)','Mozilla/?.*(*Windows NT 6.1*)*Opera?14.*','QuickTime*(qtver=10.*os=Windows NT 5.0*)','QuickTime*(qtver=10.*os=Windows NT 6.1*)','Mozilla/?.*(*Windows NT 5.2*)*Opera?9.5*','Opera/9.80*(*Win 9x 4.90*)*Version/10.5*','Mozilla/?.*(*Opera/3.5*Windows NT 5.1*)*','Mozilla/?.*(*Windows NT 5.0*)*Opera?9.5*','Mozilla/?.*(*Windows NT 5.2*)*Opera?14.*','Mozilla/?.*(*Windows NT 6.0*)*Opera?14.*','Opera/9.80*(*Windows 2000*)*Version/14.*','Mozilla/?.*(*Windows NT 5.1*)*Opera?9.5*','DocWeb Link Crawler (http://doc.php.net)','Mozilla/?.*(*Opera/9.6*Windows NT 6.1*)*','Mozilla/?.*(*Windows NT 5.1*)*Opera?3.5*','Mozilla/?.*(*Windows NT 4.0*)*Opera?9.6*','QuickTime*(qtver=7.*;os=Windows NT 4.0*)','QuickTime*(qtver=7.*;os=Windows NT 5.0*)','Mozilla/?.*(*Windows NT 5.1*)*Opera?15.*','Mozilla/?.*(*Opera/14.*Windows NT 4.0*)*','Mozilla/?.*(*Windows NT 6.0*)*Opera?15.*','Mozilla/?.*(*Windows NT 5.2*)*Opera?15.*','Mozilla/?.*(*Windows NT 5.0*)*Opera?9.6*','Mozilla/5.0 (compatible; YandexMedia/*)*','Mozilla/?.*(*Opera/3.6*Windows NT 5.0*)*','Mozilla/?.*(*Opera/3.5*Windows NT 5.2*)*','Mozilla/?.*(*Opera/3.6*Windows NT 4.0*)*','FAST Data Search Document Retriever/4.0*','Mozilla/?.*(*Windows NT 5.0*)*Opera?15.*','Mozilla/5.0 (compatible; YandexVideo/*)*','Mozilla/?.*(*Opera/14.*Windows NT 5.1*)*','Mozilla/?.*(*Opera/14.*Windows NT 5.0*)*','Mozilla/?.*(*Windows NT 5.0*)*Opera?10.*','Mozilla/?.*(*Windows NT 6.1*)*Opera?15.*','Mozilla/?.*(*Opera/10.*Windows NT 6.1*)*','Mozilla/?.*(*Windows NT 6.0*)*Opera?3.5*','Mozilla/?.*(*Windows NT 6.1*)*Opera?3.5*','Mozilla/?.*(*Windows NT 4.0*)*Opera?3.6*','Opera/9.80*(*Win 9x 4.90*)*Version/10.1*','Mozilla/?.*(*Opera/14.*Windows NT 5.2*)*','Mozilla/?.*(*Opera/14.*Windows NT 6.1*)*','Mozilla/?.*(*Windows NT 4.0*)*Opera?15.*','Mozilla/?.*(*Opera/3.5*Windows NT 6.0*)*','Mozilla/?.*(*Opera/14.*Windows NT 6.0*)*','Opera/9.80*(*Windows 98*)*Version/10.1*','Mozilla/?.*(*Opera/3.*Windows NT 5.0*)*','Mozilla/?.*(*Opera/7.*Windows NT 4.0*)*','Mozilla/?.*(*Windows 2000*)*Opera?10.5*','Mozilla/?.*(*Opera/10.5*Windows 2000*)*','Mozilla/?.*(*Windows NT 6.0*)*Opera?8.*','Mozilla/?.*(*Windows NT 6.1*)*Opera?8.*','Mozilla/?.*(*Opera/3.*Windows NT 4.0*)*','Mozilla/?.*(*Opera/4.*Windows NT 5.2*)*','Mozilla/?.*(*Windows NT 5.0*)*Opera?4.*','Mozilla/*(*MSIE*America Online Browser*','Mozilla/?.* (?compatible; *MSIE 4.01*)*','Opera/9.80*(*Win 9x 4.90*)*Version/11.*','Mozilla/?.*(*Opera/3.*Windows NT 5.2*)*','Mozilla/?.*(*Opera/3.*Windows NT 5.1*)*','Mozilla/?.*(*Windows 2000*)*Opera?10.1*','Mozilla/?.*(*Opera/4.*Windows NT 6.0*)*','Mozilla/?.*(*Windows NT 4.0*)*Opera?4.*','Mozilla/?.*(*Opera/9.*Windows NT 5.0*)*','Mozilla/?.*(*Opera/9.*Windows NT 4.0*)*','Mozilla/?.*(*Opera/4.*Windows NT 6.1*)*','Opera/9.80*(*Windows ME*)*Version/10.1*','Mozilla/?.*(*Opera/7.*Windows NT 5.1*)*','Mozilla/?.*(*Windows NT 5.1*)*Opera?3.*','Mozilla/?.*(*Windows NT 4.0*)*Opera?7.*','Mozilla/?.*(*Windows NT 5.2*)*Opera?3.*','Mozilla/?.*(*Windows NT 6.0*)*Opera?3.*','Opera/9.80*(*Windows 95*)*Version/10.6*','Opera/9.80*(*Windows 98*)*Version/10.6*','Mozilla/?.*(*Windows NT 4.0*)*Opera?3.*','Opera/9.80*(*Windows 95*)*Version/10.1*','Mozilla/?.*(*Windows NT 5.0*)*Opera?3.*','Opera/9.80*(*Windows ME*)*Version/10.6*','Mozilla/?.*(*Windows NT 6.1*)*Opera?3.*','Mozilla/?.*(*Windows NT 5.0*)*Opera?7.*','Mozilla/?.*(*Windows NT 6.0*)*Opera?6.*','Mozilla/?.*(*Windows NT 6.1*)*Opera?6.*','Mozilla/?.*(*Windows 2000*)*Opera?10.6*','Mozilla/?.*(*Windows NT 6.1*)*Opera?7.*','Mozilla/?.*(*Windows NT 6.0*)*Opera?7.*','Mozilla/?.*(*Windows NT 5.2*)*Opera?7.*','Mozilla/?.*(*Windows NT 5.1*)*Opera?7.*','Mozilla/?.*(*Opera/10.6*Windows 2000*)*','Mozilla/?.*(*Windows NT 5.2*)*Opera?4.*','Mozilla/?.*(*Windows NT 6.0*)*Opera?4.*','Opera/9.80*(*Win 9x 4.90*)*Version/10.*','Mozilla/?.*(*Windows NT 5.2*)*Opera?6.*','Mozilla/?.*(*Opera/3.*Windows NT 6.1*)*','Mozilla/?.*(*Opera/8.*Windows NT 6.1*)*','Mozilla/?.*(*Opera/8.*Windows NT 6.0*)*','Mozilla/?.*(*Opera/8.*Windows NT 5.2*)*','Mozilla/?.*(*Windows NT 4.0*)*Opera?6.*','Mozilla/?.*(*Opera/3.*Windows NT 6.0*)*','Mozilla/?.*(*Windows NT 5.2*)*Opera?8.*','Mozilla/?.*(*Windows NT 5.1*)*Opera?8.*','Mozilla/?.*(*Windows NT 5.0*)*Opera?8.*','Mozilla/?.*(*Windows NT 4.0*)*Opera?8.*','Mozilla/?.*(*Opera/8.*Windows NT 5.1*)*','Mozilla/?.*(*Opera/8.*Windows NT 5.0*)*','Mozilla/?.*(*Opera/7.*Windows NT 6.1*)*','Opera/9.80*(*Windows ME*)*Version/10.5*','Mozilla/?.*(*Windows NT 5.1*)*Opera?4.*','Mozilla/?.*(*Windows NT 5.1*)*Opera?6.*','Mozilla/?.*(*Opera/7.*Windows NT 6.0*)*','Opera/9.80*(*Windows 98*)*Version/10.5*','Mozilla/?.*(*Opera/8.*Windows NT 4.0*)*','Mozilla/?.*(*Opera/7.*Windows NT 5.2*)*','Mozilla/?.*(*Windows NT 5.0*)*Opera?6.*','Opera/9.80*(*Windows 95*)*Version/10.5*','Mozilla/?.*(*Opera/7.*Windows NT 5.0*)*','Mozilla/?.*(*Windows NT 6.1*)*Opera?9.*','Mozilla/4.0 (compatible; Spider; Linux)','Mozilla/?.*(*Windows NT 5.1*)*Opera?2.*','Mozilla/?.*(*Windows NT 5.2*)*Opera?2.*','Mozilla/?.*(*Opera/6.*Windows NT 4.0*)*','Opera/9.80*(*Win 9x 4.90*)*Version/13.*','Mozilla/*(*Windows NT 5.1*)*Fennec/1.0*','Mozilla/?.*(*Windows NT 5.0*)*Opera?2.*','Mozilla/?.*(*Windows NT 6.1*)*Opera?4.*','Bloglines/* (http://www.bloglines.com*)','Mozilla/5.0 (compatible; YandexNews/*)*','Mozilla/?.*(*Opera/5.*Windows NT 5.2*)*','Mozilla/?.*(*Windows NT 4.0*)*Opera?2.*','Mozilla/5.0 (compatible; ayna-crawler*)','Mozilla/?.*(*Windows NT 6.0*)*Opera?2.*','Mozilla/?.*(*Opera/5.*Windows NT 6.1*)*','Mozilla/* (PSP (PlayStation Portable)*)','Mozilla/4.0 (compatible; MyFamilyBot/*)','Mozilla/?.*(*Opera/6.*Windows NT 5.1*)*','Mozilla/?.*(*Opera/6.*Windows NT 5.2*)*','Mozilla/?.*(*Opera/6.*Windows NT 5.0*)*','Microsoft Bing Mobile SocialStreams Bot','Mozilla/?.*(*Opera/5.*Windows NT 6.0*)*','Mozilla/?.*(*Windows NT 6.1*)*Opera?2.*','Opera*(*Microsoft Windows*Opera Mobi*)*','http://hilfe.acont.de/bot.html ACONTBOT','Mozilla/?.*(*Opera/2.*Windows NT 6.1*)*','Mozilla/?.*(*Opera/2.*Windows NT 6.0*)*','Mozilla/?.* (?compatible; *MSIE 5.01*)*','QuickTime*(qtver=6.*os=Windows NT 4.0*)','QuickTime*(qtver=5.*os=Windows NT 6.1*)','QuickTime*(qtver=5.*os=Windows NT 6.0*)','QuickTime*(qtver=5.*os=Windows NT 5.2*)','QuickTime*(qtver=6.*os=Windows NT 5.0*)','QuickTime*(qtver=6.*os=Windows NT 5.1*)','Mozilla/?.*(*Opera/5.*Windows NT 5.0*)*','QuickTime*(qtver=6.*os=Windows NT 6.1*)','QuickTime*(qtver=6.*os=Windows NT 6.0*)','QuickTime*(qtver=6.*os=Windows NT 5.2*)','QuickTime*(qtver=5.*os=Windows NT 5.1*)','QuickTime*(qtver=5.*os=Windows NT 5.0*)','Mozilla/?.*(*Opera/5.*Windows NT 5.1*)*','Mozilla/?.*(*Opera/2.*Windows NT 5.0*)*','Mozilla/5.0 (compatible;*newstin.com;*)','Mozilla/?.*(*Opera/2.*Windows NT 5.1*)*','Mozilla/?.*(*Opera/2.*Windows NT 5.2*)*','Mozilla/?.*(*Opera/10.1*Windows 2000*)*','Mozilla/?.*(*Opera/2.*Windows NT 4.0*)*','QuickTime*(qtver=5.*os=Windows NT 4.0*)','Opera/9.80*(*Win 9x 4.90*)*Version/15.*','Opera/9.80*(*Win 9x 4.90*)*Version/14.*','Mozilla/?.*(*Opera/5.*Windows NT 4.0*)*','Mozilla/?.*(*Opera/6.*Windows NT 6.0*)*','JS-Kit URL Resolver, http://js-kit.com/','Mozilla/?.*(*Windows NT 6.0*)*Opera?5.*','Opera/*(Windows Mobile*Opera Mini/4.*)*','Mozilla/?.*(*Windows NT 5.2*)*Opera?9.*','Mozilla/?.*(*Opera/4.*Windows NT 4.0*)*','Mozilla/?.*(*Windows NT 4.0*)*Opera?5.*','Mahalobot/1.0 (?http://www.mahalo.com/)','Mozilla/?.*(*Opera/2.12*Windows 2000*)*','Mozilla/?.*(*Opera/4.*Windows NT 5.0*)*','Mozilla/?.*(*Opera/4.*Windows NT 5.1*)*','Mozilla/?.*(*Windows NT 5.1*)*Opera?5.*','Mozilla/?.*(*Windows NT 5.0*)*Opera?5.*','Mozilla/?.*(*Windows NT 6.1*)*Opera?5.*','Mozilla/?.*(*Windows NT 6.0*)*Opera?9.*','Mozilla/?.*(*Windows NT 5.2*)*Opera?5.*','Opera/*(Windows Mobile*Opera Mini/5.*)*','Opera/*(Windows Mobile*Opera Mini/3.*)*','Opera/9.80*(*Win 9x 4.90*)*Version/12.*','WIRE/* (Linux*Bot,Robot,Spider,Crawler)','Mozilla/?.*(*Opera/9.*Windows NT 5.2*)*','Mozilla/?.*(*Windows 2000*)*Opera?2.12*','Mozilla/?.*(*Opera/6.*Windows NT 6.1*)*','Opera/*(Windows Mobile*Opera Mini/2.*)*','Mozilla/?.*(*Windows NT 5.1*)*Opera?9.*','Mozilla/?.*(*Opera/9.*Windows NT 5.1*)*','Mozilla/?.*(*Windows NT 5.0*)*Opera?9.*','Mozilla/?.*(*Windows NT 4.0*)*Opera?9.*','Mozilla/?.*(*Opera/9.*Windows NT 6.1*)*','Mozilla/?.*(*Opera/9.*Windows NT 6.0*)*','Opera/9.80*(*Windows ME*)*Version/15.*','Opera/9.80*(*Windows 98*)*Version/15.*','Mozilla/?.*(*Opera/10.1*Win 9x 4.90*)*','Mozilla/?.*(*Windows 2000*)*Opera?10.*','Opera/9.80*(*Windows 95*)*Version/11.*','Opera/9.80*(*Windows ME*)*Version/11.*','Opera/9.80*(*Windows 98*)*Version/11.*','Mozilla/?.* (?compatible; *MSIE 6.0*)*','Mozilla/?.*(*Opera/9.6*Windows 2000*)*','Mozilla/?.*(*Windows 2000*)*Opera?14.*','Mozilla/?.* (?compatible; *MSIE 5.5*)*','Mozilla/?.*(*Win 9x 4.90*)*Opera?10.1*','Mozilla/?.*(*Opera/3.6*Windows 2000*)*','Mozilla/?.*(*Win 9x 4.90*)*Opera?10.5*','Mozilla/?.*(*Opera/15.*Windows 2000*)*','Microsoft Office/* (*Picture Manager*)','Mozilla/?.*(*Win 9x 4.90*)*Opera?2.12*','Mozilla/?.*(*Windows 2000*)*Opera?15.*','Mozilla/?.*(*Opera/10.5*Win 9x 4.90*)*','Opera/9.80*(*Windows ME*)*Version/10.*','Mozilla/?.*(*Opera/12.*Windows 2000*)*','Mozilla/?.*(*Opera/2.12*Win 9x 4.90*)*','Opera/9.80*(*Windows 98*)*Version/14.*','Mozilla/?.*(*Windows 2000*)*Opera?3.5*','Opera/9.80*(*Windows 95*)*Version/15.*','Opera/9.80*(*Windows ME*)*Version/14.*','Willow Internet Crawler by Twotrees V*','Opera/9.80*(*Windows 95*)*Version/10.*','Visited by http://tools.geek-tools.org','Mozilla/5.0 (compatible; YodaoBot/1.*)','Opera/9.80*(*Windows 95*)*Version/14.*','Mozilla/5.0 (compatible; YandexBot/*)*','Opera/9.80*(*Windows 95*)*Version/13.*','Mozilla/?.*(*Windows 2000*)*Opera?11.*','OpenDNS Domain Crawler noc@opendns.com','Mozilla/?* (compatible; MS FrontPage*)','Mozilla/?.*(*Opera/9.5*Windows 2000*)*','Opera/9.80*(*Windows 98*)*Version/10.*','annotate_google; http://ponderer.org/*','Opera/9.80*(*Windows ME*)*Version/13.*','Opera/9.80*(*Windows 98*)*Version/13.*','Mozilla/5.0 (compatible; DNS-Digger/*)','Opera/9.80*(*Windows 95*)*Version/12.*','Mozilla/?.*(*Opera/2.1*Windows 2000*)*','Mozilla/5.0 (compatible; DKIMRepBot/*)','www.fi crawler, contact crawler@www.fi','Mozilla/?.*(*Windows 2000*)*Opera?2.1*','Mozilla/?.*(*Windows 2000*)*Opera?13.*','Mozilla/3.0 (compatible; Indy Library)','Opera/9.80*(*Windows 98*)*Version/12.*','Mozilla/?.*(*Opera/11.*Windows 2000*)*','Opera/9.80*(*Windows ME*)*Version/12.*','Amico Alpha * (*) Gecko/* AmicoAlpha/*','Mozilla/?.*(*Opera/3.5*Windows 2000*)*','Mozilla/?.*(*Windows 2000*)*Opera?12.*','Mozilla/?.*(*Windows 2000*)*Opera?3.6*','Mozilla/?.*(*Opera/13.*Windows 2000*)*','Mozilla/?.* (?compatible; *MSIE 5.0*)*','Kolinka Forum Search (www.kolinka.com)','Mozilla/5.0 (compatible; MJ12bot/v1.*)','Mozilla/?.*(*Opera/14.*Windows 2000*)*','Mozilla/?.*(*Opera/10.*Windows 2000*)*','Mozilla/?.*(*Opera/10.6*Win 9x 4.90*)*','Mozilla/?.*(*Win 9x 4.90*)*Opera?10.6*','Mozilla/?.*(*Windows 2000*)*Opera?9.5*','Mozilla/5.0 (compatible; AboutUsBot/*)','Mozilla/?.*(*Windows 2000*)*Opera?9.6*','Best Whois (http://www.bestwhois.net/)','Mozilla/?.*(*Windows 95*)*Opera?10.1*','Mozilla/?.*(*Opera/6.*Windows 2000*)*','Mozilla/?.*(*Opera/10.1*Windows 95*)*','Mozilla/?.*(*Opera/10.1*Windows ME*)*','Mozilla/5.0 Galeon/1.* (X11; Linux*)*','Mozilla/5.0 Galeon/2.* (X11; Linux*)*','Mozilla/?.*(*Windows 98*)*Opera?10.1*','Mozilla/?.*(*Windows ME*)*Opera?10.1*','Mozilla/?.*(*Opera/10.1*Windows 98*)*','Mozilla/?.*(*Windows 2000*)*Opera?6.*','Opera/9.80*(*Mac OS X*)*Version/10.1*','BlogPulseLive (support@blogpulse.com)','ah-ha.com crawler (crawler@ah-ha.com)','Mozilla/4.0 (compatible; ibisBrowser)','Mozilla/?.*(*Win 9x 4.90*)*Opera?9.6*','Opera/* (Nintendo DSi; Opera/*; *; *)','Mozilla/?.*(*Windows 2000*)*Opera?2.*','Mozilla/?.*(*Opera/2.1*Win 9x 4.90*)*','Mozilla/?.*(*Opera/2.12*Windows 98*)*','Mozilla/?.*(*Opera/2.12*Windows 95*)*','Decode Framework 0.* browscap library','Mozilla/?.*(*Win 9x 4.90*)*Opera?2.1*','AnswerBus (http://www.answerbus.com/)','Mozilla/?.*(*Opera/9.6*Win 9x 4.90*)*','Mozilla/?.*(*Opera/15.*Win 9x 4.90*)*','!Susie (http://www.sync2it.com/susie)','Mozilla/5.0 (compatible) GM RSS Panel','Mozilla/?.*(*Win 9x 4.90*)*Opera?14.*','QuickTime*(qtver=7.6*;os=Windows Me*)','QuickTime*(qtver=7.6*;os=Windows 98*)','Mozilla/?.*(*Opera/5.*Windows 2000*)*','Mozilla/?.*(*Opera/2.*Windows 2000*)*','Mozilla/?.*(*Win 9x 4.90*)*Opera?15.*','QuickTime*(qtver=7.6*;os=Windows 95*)','Mozilla/?.*(*Opera/2.12*Windows ME*)*','Mozilla/?.*(*Windows 95*)*Opera?2.12*','Mozilla/?.*(*Opera?*Windows NT 5.1*)*','Mozilla/?.*(*Opera?*Windows NT 5.2*)*','Mozilla/?.*(*Opera?*Windows NT 6.0*)*','Mozilla/?.*(*Opera?*Windows NT 6.1*)*','Mozilla/?.*(*Opera?*Windows NT 5.0*)*','Mozilla/?.*(*Opera?*Windows NT 4.0*)*','Mozilla/?.*(*Win 9x 4.90*)*Opera?3.6*','Mozilla/5.0 (compatible; Exabot/3.0*)','Mozilla/?.*(*Opera/3.6*Win 9x 4.90*)*','Mozilla/?.*(*Win 9x 4.90*)*Opera?3.5*','Mozilla/?.*(*Opera/3.5*Win 9x 4.90*)*','Mozilla/?.**(*Windows NT 4.0*)*Opera*','Mozilla/?.*(*Windows 2000*)*Opera?3.*','Mozilla/?.*(*Opera/3.*Windows 2000*)*','Mozilla/?.*(*Windows ME*)*Opera?2.12*','Mozilla/?.*(*Windows 98*)*Opera?2.12*','Mozilla/?.**(*Windows NT 6.1*)*Opera*','Mozilla/?.**(*Windows NT 6.0*)*Opera*','Mozilla/?.**(*Windows NT 5.0*)*Opera*','Mozilla/?.**(*Windows NT 5.1*)*Opera*','Mozilla/?.**(*Windows NT 5.2*)*Opera*','Mozilla/?.*(*Opera/10.5*Windows 95*)*','Mozilla/?.*(*Opera/14.*Win 9x 4.90*)*','Mozilla/?.*(*Windows ME*)*Opera?10.6*','Mozilla/?.*(*Windows 98*)*Opera?10.6*','Mozilla/?.*(*Windows 95*)*Opera?10.6*','Mozilla/?.*(*Opera/10.6*Windows ME*)*','Opera/9.80*(*Mac OS X*)*Version/10.6*','Mozilla/?.*(*Windows 2000*)*Opera?4.*','Mozilla/?.*(*Win 9x 4.90*)*Opera?9.5*','Mozilla/?.*(*Opera/8.*Windows 2000*)*','Mozilla/?.*(*Opera/11.*Win 9x 4.90*)*','Mozilla/?.*(*Opera/10.6*Windows 98*)*','Mozilla/?.*(*Opera/10.6*Windows 95*)*','Mozilla/?.*(*Windows 98*)*Opera?10.5*','Mozilla/?.*(*Windows 95*)*Opera?10.5*','Mozilla/?.*(*Opera/10.5*Windows ME*)*','Mozilla/?.*(*Opera/10.5*Windows 98*)*','Mozilla/?.*(*Windows ME*)*Opera?10.5*','Mozilla/?.*(*Opera/7.*Windows 2000*)*','Mozilla/?.*(*Win 9x 4.90*)*Opera?10.*','Mozilla/?.*(*Windows 2000*)*Opera?7.*','Opera/9.80*(*Mac OS X*)*Version/10.5*','Mozilla/?.*(*Windows 2000*)*Opera?8.*','Mozilla/?.*(*Win 9x 4.90*)*Opera?11.*','Mozilla/?.*(*Win 9x 4.90*)*Opera?12.*','Opera/*(Windows Mobile*Opera Mini/*)*','Mozilla/?.*(*Windows 2000*)*Opera?9.*','Mozilla/?.*(*Opera/13.*Win 9x 4.90*)*','Mozilla/?.*(*Windows 2000*)*Opera?5.*','Mozilla/?.*(*Opera/9.5*Win 9x 4.90*)*','Mozilla/?.*(*Opera/4.*Windows 2000*)*','Mozilla/?.*(*Win 9x 4.90*)*Opera?13.*','Mozilla/?.*(*Opera/12.*Win 9x 4.90*)*','Microsoft Windows Network Diagnostics','Mozilla/?.*(*Opera/10.*Win 9x 4.90*)*','Mozilla/?.*(*Opera/9.*Windows 2000*)*','Mozilla/?.*(*Win 9x 4.90*)*Opera?5.*','Mozilla/?.*(*Opera/5.*Win 9x 4.90*)*','iCab/3.0* (Macintosh; ?; *Mac OS X*)','Mozilla/5.0 (compatible; NLCrawler/*','Mozilla/?.*(*Opera/10.*Windows 98*)*','Mozilla/?.*(*Opera/10.*Windows 95*)*','Mozilla/?.*(*Windows 95*)*Opera?10.*','Mozilla/2.0 (compatible; Ask Jeeves)','iCab/2.9* (Macintosh; ?; *Mac OS X*)','Mozilla/?.*(*Windows 98*)*Opera?10.*','iCab/2.8* (Macintosh; ?; *Mac OS X*)','CatchBot/*; +http://www.catchbot.com','Mozilla/?.*(*Windows ME*)*Opera?10.*','Mozilla/?.*(*Opera/10.*Windows ME*)*','Mozilla/?.*(*Windows 98*)*Opera?13.*','Mozilla/?.*(*Windows 98*)*Opera?15.*','Mozilla/?.*(*Windows ME*)*Opera?15.*','Mozilla/?.*(*Windows 95*)*Opera?15.*','Mozilla/?.*(*Opera/15.*Windows ME*)*','Mozilla/?.*(*Opera/15.*Windows 95*)*','Mozilla/?.*(*Opera/15.*Windows 98*)*','QuickTime*(qtver=7.*;os=Windows Me*)','QuickTime*(qtver=7.*;os=Windows 98*)','QuickTime*(qtver=10.*os=Windows 95*)','Mozilla/?.*(*Opera/2.*Win 9x 4.90*)*','QuickTime*(qtver=10.*os=Windows 98*)','QuickTime*(qtver=10.*os=Windows Me*)','Opera/9.80*(*Mac OS X*)*Version/15.*','Microsoft Office Existence Discovery','Opera/9.80*(*Mac OS X*)*Version/14.*','Mozilla/?.*(*Opera/4.*Win 9x 4.90*)*','Mozilla/?.*(*Windows 98*)*Opera?9.5*','Mozilla/?.*(*Windows 95*)*Opera?9.5*','Mozilla/?.*(*Opera/9.5*Windows ME*)*','Mozilla/?.*(*Opera/9.5*Windows 98*)*','Mozilla/?.*(*Opera/14.*Windows 95*)*','Mozilla/?.*(*Opera/14.*Windows 98*)*','Mozilla/?.*(*Windows 98*)*Opera?14.*','Mozilla/?.*(*Windows ME*)*Opera?14.*','Mozilla/?.*(*Windows 95*)*Opera?14.*','Feedster Crawler/?.0; Feedster, Inc.','Mozilla/?.*(*Windows ME*)*Opera?9.5*','Mozilla/?.*(*Opera/9.6*Windows 95*)*','Mozilla/?.*(*Opera/9.6*Windows 98*)*','Mozilla/?.*(*Windows 95*)*Opera?3.5*','Mozilla/?.*(*Windows 98*)*Opera?3.5*','Mozilla/?.*(*Opera/3.5*Windows ME*)*','Mozilla/?.*(*Opera/3.5*Windows 98*)*','Mozilla/?.*(*Opera/3.5*Windows 95*)*','Mozilla/?.*(*Windows ME*)*Opera?3.5*','Mozilla/?.*(*Windows ME*)*Opera?3.6*','Mozilla/?.*(*Opera/3.6*Windows 98*)*','Mozilla/?.*(*Opera/3.6*Windows ME*)*','Mozilla/?.*(*Opera/3.6*Windows 95*)*','Mozilla/?.*(*Windows 95*)*Opera?3.6*','Mozilla/?.*(*Windows 98*)*Opera?3.6*','Mozilla/?.*(*Win 9x 4.90*)*Opera?3.*','Mozilla/?.*(*Opera/3.*Win 9x 4.90*)*','Mozilla/?.*(*Windows 98*)*Opera?9.6*','Mozilla/?.*(*Win 9x 4.90*)*Opera?2.*','Mozilla/?.*(*Windows 95*)*Opera?9.6*','Mozilla/4.0 (compatible; ZuneHD 4.*)','Mozilla/?.*(*Opera/9.6*Windows ME*)*','Mozilla/?.*(*Windows ME*)*Opera?9.6*','Mozilla/?.*(*Opera/2.1*Windows 95*)*','Mozilla/?.*(*Windows 98*)*Opera?2.1*','Mozilla/?.*(*Windows ME*)*Opera?2.1*','Mozilla/?.*(*Windows 95*)*Opera?2.1*','Mozilla/?.*(*Opera/2.1*Windows ME*)*','Mozilla/?.*(*Opera/2.1*Windows 98*)*','Mozilla/?.*(*Opera/9.5*Windows 95*)*','Mozilla/?.*(*Opera/14.*Windows ME*)*','Mozilla/?.*(*Windows ME*)*Opera?11.*','Opera/9.80*(*Mac OS X*)*Version/13.*','Mozilla/?.*(*Windows 98*)*Opera?11.*','Mozilla/?.*(*Windows 95*)*Opera?11.*','Mozilla/?.*(*Win 9x 4.90*)*Opera?8.*','Opera/9.80*(*Mac OS X*)*Version/11.*','Mozilla/?.*(*Mac_PowerPC*)*Opera?9.*','Mozilla/?.*(*Opera/12.*Windows 98*)*','Mozilla/?.*(*Opera/12.*Windows 95*)*','Mozilla/?.*(*Win 9x 4.90*)*Opera?9.*','Mozilla/?.*(*Opera/9.*Win 9x 4.90*)*','Mozilla/?.*(*Opera/8.*Win 9x 4.90*)*','Mozilla/?.*(*Opera/11.*Windows ME*)*','Opera/9.80*(*FreeBSD*)*Version/10.1*','Mozilla/?.*(*Win 9x 4.90*)*Opera?6.*','Mozilla/?.*(*Opera/6.*Win 9x 4.90*)*','Opera/9.80*(*Mac OS X*)*Version/10.*','Mozilla/?.*(*Opera/7.*Win 9x 4.90*)*','Opera/9.80*(*FreeBSD*)*Version/10.5*','Mozilla/?.*(*Opera/11.*Windows 98*)*','Mozilla/?.*(*Opera/11.*Windows 95*)*','Opera/9.80*(*FreeBSD*)*Version/10.6*','Mozilla/?.*(*Win 9x 4.90*)*Opera?7.*','Mozilla/?.*(*Opera/12.*Windows ME*)*','Mozilla/?.*(*Win 9x 4.90*)*Opera?4.*','Mozilla/?.*(*Opera/13.*Windows 98*)*','Mozilla/?.*(*Opera/13.*Windows 95*)*','Opera*(*Windows Mobile*Opera Mobi*)*','Mozilla/?.*(*Windows ME*)*Opera?13.*','Mozilla/?.*(*Opera/13.*Windows ME*)*','Mozilla/?.*(*Windows 95*)*Opera?13.*','Windows CE (Pocket PC) - Version *.*','Opera/9.80*(*Mac OS X*)*Version/12.*','A1 Website Download/1.* (*) miggibot','Mozilla/?.*(*Windows ME*)*Opera?12.*','Mozilla/?.*(*Windows 95*)*Opera?12.*','Opera/*(*BlackBerry*Opera Mini/6.*)*','Mozilla/?.*(*Windows 98*)*Opera?12.*','Mozilla/?.*(*Windows ME*)*Opera?3.*','Mozilla/?.*(*Windows 95*)*Opera?3.*','Mozilla/?.*(*Opera/3.*Windows 98*)*','Mozilla/?.*(*Opera/3.*Windows ME*)*','Mozilla/?.*(*Mac OS X*)*Opera?10.6*','Mozilla/?.*(*Windows 98*)*Opera?3.*','Mozilla/4.0 (compatible; N-Stealth)','Mozilla/?.*(*Mac OS X*)*Opera?10.5*','Mozilla/?.*(*Opera/10.1*Mac OS X*)*','Mozilla/?.*(*Opera/4.*Windows 98*)*','Mozilla/?.*(*Opera/10.5*Mac OS X*)*','Mozilla/?.*(*Opera/3.*Windows 95*)*','Mozilla/?.*(*Opera/4.*Windows 95*)*','Opera/9.80*(*FreeBSD*)*Version/13.*','Mozilla/?.*(*Mac OS X*)*Opera?10.1*','Mozilla/?.*(*Windows ME*)*Opera?4.*','Mozilla/?.*(*Windows 95*)*Opera?4.*','Mozilla/* (compatible; WebCapture*)','Mozilla/?.*(*Opera/4.*Windows ME*)*','Mozilla/4.0 (compatible; DepSpid/*)','Opera/9.80*(*FreeBSD*)*Version/11.*','Mozilla/?.*(*Opera/2.*Windows ME*)*','Opera/9.80*(*FreeBSD*)*Version/12.*','Mozilla/?.*(*Opera/2.*Windows 95*)*','Mozilla/?.*(*Opera/2.*Windows 98*)*','Opera/9.80*(*FreeBSD*)*Version/14.*','Mozilla/?.*(*Windows 95*)*Opera?2.*','Mozilla/?.*(*Mac OS X*)*Opera?2.12*','Mozilla/?.*(*Opera/2.12*Mac OS X*)*','Mozilla/?.*(*Opera/10.6*Mac OS X*)*','Mozilla/?.*(*Windows 98*)*Opera?4.*','Opera/9.80*(*FreeBSD*)*Version/15.*','Mozilla/?.*(*Windows 98*)*Opera?2.*','Mozilla/?.*(*Windows ME*)*Opera?2.*','Opera/9.80*(*FreeBSD*)*Version/10.*','RixBot (http://babelserver.org/rix)','Mozilla/?.*(*Opera/5.*Windows 95*)*','Mozilla/?.*(*Opera/8.*Windows ME*)*','Mozilla/?.*(*Opera/8.*Windows 98*)*','Mozilla/?.*(*Windows 95*)*Opera?8.*','Opera/*(BlackBerry*Opera Mini/2.*)*','Mozilla/?.*(*Windows ME*)*Opera?8.*','Mozilla/?.*(*Windows 98*)*Opera?8.*','Mozilla/?.*(*Opera/8.*Windows 95*)*','Feedreader * (Powered by Newsbrain)','Microsoft Office Protocol Discovery','QuickTime*(qtver=7.*os=Windows 95*)','Mozilla/?.*(*Windows 98*)*Opera?9.*','Mozilla/?.*(*Opera/5.*Windows ME*)*','Mozilla/?.*(*Windows ME*)*Opera?7.*','Mozilla/?.*(*Windows 98*)*Opera?7.*','Opera/*(BlackBerry*Opera Mini/3.*)*','Mozilla/?.*(*Opera/9.*Windows 95*)*','Opera/*(*J2ME/MIDP*Opera Mini/6.*)*','Mozilla/?.*(*Windows 95*)*Opera?9.*','Opera/*(*Series 60*Opera Mini/6.*)*','Mozilla/5.0 (*Google Keyword Tool*)','Mozilla/5.0 (compatible; Pogodak.*)','Mozilla/?.*(*Windows ME*)*Opera?9.*','Mozilla/?.*(*Windows ME*)*Opera?5.*','Mozilla/?.*(*Windows 98*)*Opera?5.*','Opera/*(BlackBerry*Opera Mini/4.*)*','Mozilla/?.*(*Opera/9.*Windows 98*)*','Opera/*(BlackBerry*Opera Mini/5.*)*','Mozilla/?.*(*Windows 95*)*Opera?5.*','Mozilla/?.*(*Opera/9.*Windows ME*)*','QuickTime*(qtver=6.*os=Windows Me*)','Mozilla/?.*(*Opera/5.*Windows 98*)*','Mozilla/?.*(*Opera/7.*Windows 95*)*','Mozilla/?.*(*Opera/7.*Windows 98*)*','Mozilla/?.*(*Windows ME*)*Opera?6.*','Mozilla/?.*(*Opera/7.*Windows ME*)*','QuickTime*(qtver=6.*os=Windows 98*)','Internet Content Rating Association','check_http/* (nagios-plugins 1.4.*)','check_http/* (nagios-plugins 1.3.*)','check_http/* (nagios-plugins 1.2.*)','check_http/* (nagios-plugins 1.1.*)','Mozilla/?.**(*Windows 2000*)*Opera*','Mozilla/?.*(*Windows 98*)*Opera?6.*','QuickTime*(qtver=5.*os=Windows 95*)','QuickTime*(qtver=5.*os=Windows 98*)','QuickTime*(qtver=5.*os=Windows Me*)','QuickTime*(qtver=6.*os=Windows 95*)','Mozilla/?.*(*Windows 95*)*Opera?6.*','Mozilla/?.*(*Windows 95*)*Opera?7.*','Mozilla/?.*(*Opera/6.*Windows ME*)*','Mozilla/?.*(*Opera/6.*Windows 98*)*','Mozilla/?.*(*Opera/6.*Windows 95*)*','Mozilla/?.*(*Opera?*Windows 2000*)*','Opera/9.80*(*SunOS*)*Version/10.1*','Mozilla/?.*(*Opera/10.1*FreeBSD*)*','Opera/9.80*(*Linux*)*Version/10.1*','Mozilla/?.*(*FreeBSD*)*Opera?10.5*','Opera/9.80*(*Linux*)*Version/10.6*','Opera/9.80*(*SunOS*)*Version/10.5*','Mozilla/?.*(*Opera/10.6*FreeBSD*)*','Mozilla/?.*(*FreeBSD*)*Opera?10.6*','Opera/9.80*(*SunOS*)*Version/10.6*','Mozilla/?.*(*Mac OS X*)*Opera?11.*','Mozilla/?.*(*Mac OS X*)*Opera?12.*','Mozilla/?.*(*Opera/10.5*FreeBSD*)*','Opera/9.80*(*Linux*)*Version/10.5*','Mozilla/?.*(*Opera/11.*Mac OS X*)*','Mozilla/?.*(*Opera/12.*Mac OS X*)*','Opera/*(J2ME/MIDP*Opera Mini/3.*)*','PHP Browser Capabilities Project/*','Mozilla/?.*(*FreeBSD*)*Opera?2.12*','Mozilla/?.*(*Opera/2.12*FreeBSD*)*','Mono Browser Capabilities Updater*','Mozilla/?.*(*Opera/2.1*Mac OS X*)*','Mozilla/?.*(*Mac OS X*)*Opera?9.6*','Mozilla/?.*(*Opera/9.6*Mac OS X*)*','Mozilla/?.*(*Mac OS X*)*Opera?2.1*','Mozilla/?.**(*Win 9x 4.90*)*Opera*','Mozilla/?.*(*Mac OS X*)*Opera?3.5*','Mozilla/?.*(*Mac OS X*)*Opera?3.6*','Mozilla/?.*(*Opera/3.6*Mac OS X*)*','Mozilla/?.*(*Opera?*Win 9x 4.90*)*','Mozilla/1.*(*MSIE 1.*Windows 95*)*','Mozilla/*(*MSIE 1.*Windows 3.11*)*','Mozilla/?.*(*Opera/3.5*Mac OS X*)*','*Spinn3r*http://spinn3r.com/robot*','Mozilla/?.*(*Opera/15.*Mac OS X*)*','Mozilla/?.*(*Mac OS X*)*Opera?15.*','Opera/*(Series 60*Opera Mini/2.*)*','Superpages URL Verification Engine','Mozilla/?.*(*Mac OS X*)*Opera?13.*','Mozilla/?.*(*FreeBSD*)*Opera?10.1*','Opera/*(Series 60*Opera Mini/3.*)*','Opera/*(J2ME/MIDP*Opera Mini/5.*)*','Opera/*(Series 60*Opera Mini/4.*)*','Opera/*(J2ME/MIDP*Opera Mini/4.*)*','Mozilla/?.*(*Opera/13.*Mac OS X*)*','Mozilla/?.*(*Mac OS X*)*Opera?9.5*','kinjabot (http://www.kinja.com; *)','BlijbolReallySimpleAggregator/2.0*','Mozilla/4.0 (Compatible); URLBase*','Mozilla/4.0 (compatible; Getleft*)','Mozilla/?.*(*Opera/14.*Mac OS X*)*','Mozilla/?.*(*Opera/9.5*Mac OS X*)*','Mozilla/?.*(*Mac OS X*)*Opera?14.*','Opera/*(Series 60*Opera Mini/5.*)*','Opera/*(J2ME/MIDP*Opera Mini/2.*)*','Mozilla/5.0 (compatible; Webbot/*)','Mozilla/5.0 (*Feedfetcher-Google*)','Mozilla/?.*(*Mac OS X*)*Opera?10.*','Mozilla/?.*(*Opera/10.*Mac OS X*)*','iCab/4.0 (Macintosh; U; *Mac OS X)','Feedfetcher-Google-iGoogleGadgets*','Mozilla/?.*(*FreeBSD*)*Opera?11.*','Mozilla/?.*(*FreeBSD*)*Opera?9.5*','Opera/9.80*(*SunOS*)*Version/14.*','Mozilla/?.*(*FreeBSD*)*Opera?15.*','Mozilla/5.0 (compatible; Vermut*)','Mozilla/?.*(*Opera/15.*FreeBSD*)*','Pagebull http://www.pagebull.com/','Mozilla/?.*(*Mac OS X*)*Opera?8.*','Mozilla/?.*(*Mac OS X*)*Opera?3.*','Mozilla/?.*(*FreeBSD*)*Opera?2.1*','Mozilla/?.*(*Opera/2.1*FreeBSD*)*','QuickTime*(qtver=7.6*os=Mac 10.*)','Mozilla/?.*(*Opera/3.*Mac OS X*)*','Opera/9.80*(*Linux*)*Version/13.*','Mozilla/?.**(*Windows 95*)*Opera*','Mozilla/?.*(*Opera/9.5*FreeBSD*)*','Opera/9.80*(*SunOS*)*Version/13.*','Mozilla/?.*(*FreeBSD*)*Opera?3.5*','Mozilla/?.**(*Windows 98*)*Opera*','Mozilla/?.**(*Windows ME*Opera*)*','check_http/* (nagios-plugins 1.*)','Mozilla/?.*(*Opera/13.*FreeBSD*)*','Mozilla/?.*(*Opera/7.*Mac OS X*)*','Mozilla/?.*(*Mac OS X*)*Opera?7.*','Mozilla/?.**(*Windows XP*)*Opera*','Opera/9.80*(*Linux*)*Version/14.*','SCEJ PSP BROWSER 0102pspNavigator','Mozilla/?.*(*FreeBSD*)*Opera?9.6*','Mozilla/4.0 (compatible; Arachmo)','Opera/9.80*(*Linux*)*Version/15.*','Opera/9.80*(*SunOS*)*Version/15.*','Mozilla/?.*(*FreeBSD*)*Opera?10.*','Mozilla/?.*(*Opera/12.*FreeBSD*)*','Mozilla/5.0 (compatible; NGBot/*)','Opera/9.80*(*SunOS*)*Version/12.*','Mozilla/?.*(*Mac OS X*)*Opera?4.*','Nozilla/P.N (Just for IDS woring)','Opera/*(*Android*Opera Mini/6.*)*','Opera/9.80*(*Linux*)*Version/12.*','Opera/*(BlackBerry*Opera Mini/*)*','Mozilla/?.*(*FreeBSD*)*Opera?12.*','Mozilla/?.*(*Opera/9.*Mac OS X*)*','Mozilla/?.*(*Opera/9.6*FreeBSD*)*','Mozilla/?.*(*Opera/2.*Mac OS X*)*','Mozilla/?.*(*Opera/10.*FreeBSD*)*','Mozilla/?.*(*FreeBSD*)*Opera?13.*','Mozilla/?.*(*Opera/8.*Mac OS X*)*','Mozilla/?.*(*Opera/3.5*FreeBSD*)*','Mozilla/?.*(*Mac OS X*)*Opera?2.*','Mozilla/?.*(*Opera/5.*Mac OS X*)*','Opera/9.80*(*SunOS*)*Version/11.*','Mozilla/?.*(*Mac OS X*)*Opera?9.*','Opera/9.80*(*Linux*)*Version/11.*','QuickTime*(qtver=10.*os=Mac 10.*)','QuickTime*(qtver=7.6*;os=Mac 9.*)','Mozilla/?.*(*Opera/11.*FreeBSD*)*','Mozilla/?.*(*Windows CE*)*Opera?*','Mozilla/?.*(*Mac OS X*)*Opera?5.*','Mozilla/?.*(*Opera/3.6*FreeBSD*)*','Mozilla/?.*(*Opera?*Windows CE*)*','Mozilla/?.*(*FreeBSD*)*Opera?14.*','Mozilla/?.*(*Opera?*Windows 95*)*','Opera/9.80*(*SunOS*)*Version/10.*','Mozilla/?.*(*Opera?*Windows ME*)*','Mozilla/?.*(*Opera/4.*Mac OS X*)*','Mozilla/?.*(*Mac OS X*)*Opera?6.*','Opera/9.80*(*Linux*)*Version/10.*','Mozilla/?.*(*Opera?*Windows XP*)*','Mozilla/?.*(*Opera/14.*FreeBSD*)*','Mozilla/*(*MSIE 2.*Windows 3.1*)*','Mozilla/?.*(*FreeBSD*)*Opera?3.6*','Mozilla/?.*(*Opera/6.*Mac OS X*)*','Mozilla/?.*(*Opera?*Windows 98*)*','Opera/*(Android*Opera Mini/2.*)*','Mozilla/?.*(*FreeBSD*)*Opera?2.*','Mozilla/?.*(*SunOS*)*Opera?10.1*','Mozilla/?.*(*SunOS*)*Opera?2.12*','Mozilla/?.*(*Opera/9.*FreeBSD*)*','Mozilla/?.*(*FreeBSD*)*Opera?6.*','QuickTime*(qtver=10.*os=Mac 9.*)','Mozilla/?.*(*FreeBSD*)*Opera?3.*','QuickTime*(qtver=5.*os=Mac 10.*)','Mozilla/?.*(*Opera?*Macintosh*)*','Mozilla/?.*(*Opera/3.*FreeBSD*)*','Mozilla/?.*(*FreeBSD*)*Opera?9.*','Opera/*(J2ME/MIDP*Opera Mini/*)*','Opera/*(Android*Opera Mini/3.*)*','Mozilla/?.*(*Symbian*)*Opera?6.*','Mozilla/?.*(*Opera/2.*FreeBSD*)*','Opera/*(*iPhone*Opera Mini/6.*)*','Mozilla/?.*(*FreeBSD*)*Opera?5.*','Opera/*(Series 60*Opera Mini/*)*','Mozilla/?.*(*Opera/10.1*Linux*)*','Mozilla/?.*(*FreeBSD*)*Opera?8.*','Mozilla/?.*(*Opera/10.1*SunOS*)*','Mozilla/?.*(*Opera/8.*FreeBSD*)*','Mozilla/*(*MSIE 2.*Windows CE*)*','Mozilla/?.*(*Linux*)*Opera?10.1*','Mozilla/?.*(*SunOS*)*Opera?10.6*','Mozilla/?.*(*Opera/2.12*Linux*)*','Mozilla/?.*(*Opera/10.6*Linux*)*','Mozilla/?.*(*Linux*)*Opera?10.6*','Mozilla/?.*(*Opera/10.6*SunOS*)*','Mozilla/?.*(*Opera/6.*FreeBSD*)*','Mozilla/?.*(*Opera/4.*FreeBSD*)*','Mozilla/?.*(*Linux*)*Opera?2.12*','Mozilla/?.*(*Opera/2.12*SunOS*)*','Fooky.com/ScorpionBot/ScoutOut;*','Opera/*(Android*Opera Mini/5.*)*','NewsGator FetchLinks extension/*','Mozilla/?.*(*FreeBSD*)*Opera?7.*','Mozilla/*(*MSIE 2.*Windows 98*)*','Mozilla/4.0 (fantomCrew Browser)','Mozilla/*(*MSIE 2.*Windows 95*)*','Opera/*(Android*Opera Mini/4.*)*','QuickTime*(qtver=7.*os=Mac 10.*)','Mozilla/?.**(*Macintosh*)*Opera*','Mozilla/?.*(*Linux*)*Opera?10.5*','Mozilla/?.*(*Opera/10.5*Linux*)*','Mozilla/?.*(*Opera/10.5*SunOS*)*','Mozilla/?.*(*Opera/5.*FreeBSD*)*','QuickTime*(qtver=6.*os=Mac 10.*)','Mozilla/*(*MSIE 2.*Windows NT*)*','Mozilla/?.*(*Opera/7.*FreeBSD*)*','Mozilla/?.*(*FreeBSD*)*Opera?4.*','Mozilla/?.*(*SunOS*)*Opera?10.5*','Mozilla/?.*(*Opera/10.*SunOS*)*','Mozilla/?.*(*SunOS*)*Opera?13.*','Mozilla/?.*(*Linux*)*Opera?3.5*','Mozilla/4.0 (compatible; Win32)','Mozilla/?.*(*SunOS*)*Opera?2.1*','Mozilla/?.*(*Opera/13.*SunOS*)*','Mozilla/?.*(*Opera/9.6*SunOS*)*','Mozilla/?.*(*Linux*)*Opera?15.*','Mozilla/5.0 (*rv:1.2.*) Gecko/*','Mozilla/?.*(*Opera/12.*SunOS*)*','Mozilla/?.*(*SunOS*)*Opera?15.*','Mozilla/?.*(*Opera/2.1*SunOS*)*','Mozilla/?.*(*Opera/15.*Linux*)*','Mozilla/?.*(*Opera/10.*Linux*)*','Mozilla/?.*(*Opera/2.1*Linux*)*','Mozilla/?.*(*SunOS*)*Opera?9.6*','AcadiaUniversityWebCensusClient','Mozilla/?.*(*Linux*)*Opera?3.6*','Mozilla/?.*(*Opera/14.*SunOS*)*','Mozilla/?.*(*SunOS*)*Opera?9.5*','Mozilla/?.*(*Opera/3.5*SunOS*)*','Mozilla/?.*(*Opera/9.5*Linux*)*','MetaProducts Download Express/*','Mozilla/?.*(*Opera/3.5*Linux*)*','Mozilla/?.*(*Opera/9.5*SunOS*)*','Mozilla/?.*(*Linux*)*Opera?2.1*','Mozilla/?.*(*SunOS*)*Opera?11.*','QuickTime*(qtver=7.*os=Mac 9.*)','Mozilla/?.*(*Opera/15.*SunOS*)*','Mozilla/?.*(*SunOS*)*Opera?12.*','Mozilla/?.*(*Opera/13.*Linux*)*','Mozilla/?.*(*Opera/11.*SunOS*)*','Mozilla/?.*(*Opera/11.*Linux*)*','Mozilla/?.*(*Opera/14.*Linux*)*','Mozilla/?.*(*Linux*)*Opera?12.*','Mozilla/?.*(*Linux*)*Opera?9.5*','QuickTime*(qtver=5.*os=Mac 9.*)','Mozilla/5.0 (*rv:1.1.*) Gecko/*','Mozilla/?.*(*SunOS*)*Opera?10.*','Mozilla/?.*(*Linux*)*Opera?10.*','Mozilla/0.9* no dos :) (Linux*)','Opera/*(iPhone*Opera Mini/5.*)*','Mozilla/?.*(*Linux*)*Opera?9.6*','Mozilla/5.0 (*rv:1.0.*) Gecko/*','Mozilla/?.*(*Linux*)*Opera?11.*','Mozilla/?.*(*Opera?*Mac OS X*)*','KDDI-* UP.Browser/* (GUI) MMP/*','QuickTime*(qtver=6.*os=Mac 9.*)','Mozilla/?.*(*SunOS*)*Opera?3.6*','Mozilla/?.*(*Linux*)*Opera?14.*','Mozilla/?.**(*Mac OS X*)*Opera*','Mozilla/?.*(*Opera/3.6*Linux*)*','Mozilla/?.*(*Opera/12.*Linux*)*','Mozilla/?.*(*Opera/3.6*SunOS*)*','Mozilla/?.*(*Opera/9.6*Linux*)*','Mozilla/?.*(*SunOS*)*Opera?3.5*','Mozilla/5.0 (*rv:1.3.*) Gecko/*','Mozilla/?.*(*SunOS*)*Opera?14.*','Mozilla/?.*(*Linux*)*Opera?13.*','Mozilla/?.*(*SunOS*)*Opera?2.*','Lorkyll *.* -- lorkyll@444.net','Mozilla/5.0 (*rv:1.9*) Gecko/*','Mozilla/?.*(*Linux*)*Opera?2.*','Mozilla/?.*(*Opera/2.*Linux*)*','Mozilla/?.*(*SunOS*)*Opera?4.*','Mozilla/?.*(*Linux*)*Opera?6.*','Mozilla/?.*(*Opera/9.*SunOS*)*','FAST-WebCrawler/*/PartnerSite*','Mozilla/?.*(*Linux*)*Opera?9.*','Mozilla/5.0 (*rv:1.6*) Gecko/*','Mozilla/?.*(*Opera/2.*SunOS*)*','Mozilla/5.0 (*rv:1.8*) Gecko/*','Mozilla/* (Win32;*Escape?*; ?)','Mozilla/5.0 CostaCider Search*','ELinks (0.10*; *Digital Unix*)','Mozilla/?.*(*SunOS*)*Opera?9.*','Mozilla/?.*(*SunOS*)*Opera?8.*','Mozilla/?.*(*Opera/9.*Linux*)*','Mozilla/?.*(*Opera/5.*SunOS*)*','Mozilla/?.*(*Opera/6.*Linux*)*','Mozilla/?.*(*Opera/8.*SunOS*)*','Mozilla/5.0 (*rv:1.5*) Gecko/*','Mozilla/?.*(*Linux*)*Opera?3.*','Opera/2.12*(*Windows NT 6.1*)*','Opera/2.12*(*Windows NT 6.0*)*','Mozilla/?.*(*Opera/4.*Linux*)*','Mozilla/?.*(*Opera/3.*Linux*)*','Mozilla/?.*(*Opera/7.*SunOS*)*','Mozilla/?.*(*Opera/3.*SunOS*)*','Opera/2.12*(*Windows NT 5.2*)*','Opera/2.12*(*Windows NT 5.1*)*','Opera/10.5*(*Windows NT 6.0*)*','Opera/10.5*(*Windows NT 6.1*)*','Opera/2.12*(*Windows NT 5.0*)*','Opera/10.5*(*Windows NT 5.2*)*','Opera/10.5*(*Windows NT 5.1*)*','Opera/10.5*(*Windows NT 4.0*)*','Opera/10.5*(*Windows NT 5.0*)*','Mozilla/?.*(*Opera/7.*Linux*)*','DataFountains/DMOZ Downloader*','Opera/10.1*(*Windows NT 6.0*)*','Opera/10.1*(*Windows NT 6.1*)*','Mozilla/?.**(*FreeBSD*)*Opera*','Opera/10.1*(*Windows NT 5.2*)*','Opera/10.1*(*Windows NT 5.1*)*','Opera/10.1*(*Windows NT 4.0*)*','Opera/10.1*(*Windows NT 5.0*)*','Mozilla/?.*(*Windows CE*Opera*','Mozilla/?.*(*Opera?*FreeBSD*)*','Mozilla/?.*(*Linux*)*Opera?7.*','ELinks (0.13*; *Digital Unix*)','Mozilla/?.*(*SunOS*)*Opera?3.*','Mozilla/?.*(*SunOS*)*Opera?5.*','Mozilla/?.*(*Linux*)*Opera?4.*','Mozilla/?.*(*Linux*)*Opera?5.*','Mozilla/5.0 (*rv:1.7*) Gecko/*','Mozilla/?.*(*Opera/6.*SunOS*)*','iCab/2.7* (Macintosh; ?; 68K*)','Mozilla/5.0 (compatible; OsO;*','Opera/10.6*(*Windows NT 4.0*)*','Opera/10.6*(*Windows NT 5.0*)*','Mozilla/5.0 (RSS Reader Panel)','Opera/9.80*(*Windows NT 6.1*)*','Opera/9.80*(*Windows NT 5.2*)*','Opera/9.80*(*Windows NT 6.0*)*','Opera/10.6*(*Windows NT 5.1*)*','Opera/10.6*(*Windows NT 5.2*)*','Mozilla/?.*(*Linux*)*Opera?8.*','Kapere (http://www.kapere.com)','Mozilla/?.*(*Opera/8.*Linux*)*','Mozilla/5.0 (*rv:1.4*) Gecko/*','Opera/*(Android*Opera Mini/*)*','Opera/10.6*(*Windows NT 6.0*)*','Opera/10.6*(*Windows NT 6.1*)*','iCab/2.7* (Macintosh; ?; PPC*)','ELinks (0.11*; *Digital Unix*)','iCab/2.9* (Macintosh; ?; PPC*)','iCab/3.0* (Macintosh; ?; PPC*)','Opera/9.80*(*Windows NT 5.1*)*','Mozilla/5.0 (*Google Desktop*)','iCab/2.9* (Macintosh; ?; 68K*)','Mozilla/?.*(*SunOS*)*Opera?7.*','iCab/2.8* (Macintosh; ?; 68K*)','Opera/2.12*(*Windows NT 4.0*)*','Opera/9.80*(*Windows NT 4.0*)*','Mozilla/?.*(*SunOS*)*Opera?6.*','Opera/9.80*(*Windows NT 5.0*)*','Mozilla/?.*(*Opera/4.*SunOS*)*','Opera/*(*Symbian*Opera Mobi*)*','Mozilla/?.*(*Opera/5.*Linux*)*','Opera/*(*iPad*Opera Mini/6.*)*','ELinks (0.12*; *Digital Unix*)','Opera/12.*(*Windows NT 6.1*)*','Opera/12.*(*Windows NT 6.0*)*','Opera/12.*(*Windows NT 5.2*)*','Samsung-* Polaris/6.* MMP/2.*','Opera/13.*(*Windows NT 5.0*)*','Opera/13.*(*Windows NT 4.0*)*','Opera/14.*(*Windows NT 4.0*)*','Opera/14.*(*Windows NT 5.2*)*','Opera/13.*(*Windows NT 5.1*)*','Opera/13.*(*Windows NT 5.2*)*','Opera/14.*(*Windows NT 5.0*)*','Opera/14.*(*Windows NT 5.1*)*','Opera/13.*(*Windows NT 6.1*)*','Opera/13.*(*Windows NT 6.0*)*','Opera/14.*(*Windows NT 6.0*)*','Opera/14.*(*Windows NT 6.1*)*','Samsung-* Polaris/7.* MMP/2.*','Opera/9.5*(*Windows NT 5.0*)*','Opera/9.5*(*Windows NT 5.1*)*','Opera/9.5*(*Windows NT 5.2*)*','Samsung-* Polaris/5.* MMP/2.*','Opera/9.5*(*Windows NT 4.0*)*','Opera/12.*(*Windows NT 5.1*)*','Opera*(*Android*Opera Mobi*)*','MFC Foundation Class Library*','Bookmark Renewal Check Agent*','Opera/9.5*(*Windows NT 6.0*)*','ELinks/0.10* (*Digital Unix*)','Jigsaw/* W3C_CSS_Validator*/*','iCab/2.8* (Macintosh; ?; PPC)','West Wind Internet Protocols*','Opera/9.6*(*Windows NT 4.0*)*','ELinks/0.12* (*Digital Unix*)','Opera/9.6*(*Windows NT 5.2*)*','Opera/9.6*(*Windows NT 5.1*)*','Opera/9.6*(*Windows NT 5.0*)*','ELinks/0.11* (*Digital Unix*)','Opera/2.1*(*Windows NT 6.1*)*','Opera/2.1*(*Windows NT 4.0*)*','YooW!/* (?http://www.yoow.eu)','WebIndexer/* (Web Indexer; *)','Opera/2.1*(*Windows NT 5.0*)*','Opera/2.1*(*Windows NT 5.1*)*','Opera/2.1*(*Windows NT 6.0*)*','Opera/12.*(*Windows NT 5.0*)*','Opera/9.6*(*Windows NT 6.0*)*','ELinks/0.13* (*Digital Unix*)','Opera/10.*(*Windows NT 6.1*)*','SynapticSearch/AI Crawler 1.?','Mozilla/5.0 Gecko/* Chimera/*','Opera/10.*(*Windows NT 6.0*)*','Opera/10.*(*Windows NT 5.2*)*','Opera/10.*(*Windows NT 4.0*)*','Opera/10.*(*Windows NT 5.0*)*','Opera/10.*(*Windows NT 5.1*)*','Opera/3.5*(*Windows NT 6.1*)*','Opera/3.5*(*Windows NT 6.0*)*','FAST-WebCrawler/*?Multimedia*','ELinks (0.9*; *Digital Unix*)','Opera/9.6*(*Windows NT 6.1*)*','Opera/3.5*(*Windows NT 4.0*)*','Opera/3.5*(*Windows NT 5.0*)*','Opera/3.5*(*Windows NT 5.2*)*','Opera/3.5*(*Windows NT 5.1*)*','PigBlock (Windows NT 5.1; U)*','Opera/2.1*(*Windows NT 5.2*)*','Opera/11.*(*Windows NT 6.0*)*','Opera/11.*(*Windows NT 6.1*)*','Mozilla/4.0 (*) *NetFront/3.*','Opera/11.*(*Windows NT 5.2*)*','Opera/11.*(*Windows NT 5.1*)*','Opera/3.6*(*Windows NT 4.0*)*','Opera/11.*(*Windows NT 4.0*)*','Opera/11.*(*Windows NT 5.0*)*','Opera/15.*(*Windows NT 6.1*)*','Opera/15.*(*Windows NT 6.0*)*','Opera/15.*(*Windows NT 4.0*)*','Opera/9.5*(*Windows NT 6.1*)*','Opera/12.*(*Windows NT 4.0*)*','Opera/15.*(*Windows NT 5.0*)*','Opera/15.*(*Windows NT 5.1*)*','Opera/15.*(*Windows NT 5.2*)*','Mozilla/4.0 (*) *NetFront/2.*','Opera/*(iPhone*Opera Mini/*)*','ConveraMultiMediaCrawler/0.1*','Opera/3.6*(*Windows NT 6.1*)*','Mozilla/5.0 GurujiBot/1.0 (*)','Opera/3.6*(*Windows NT 6.0*)*','Opera/3.6*(*Windows NT 5.0*)*','Opera/3.6*(*Windows NT 5.2*)*','Opera/3.6*(*Windows NT 5.1*)*','Microsoft-WebDAV-MiniRedir/*','Opera/2.*(*Windows NT 5.0*)*','Opera/2.*(*Windows NT 4.0*)*','FAST-WebCrawler/*/FirstPage*','Opera/2.*(*Windows NT 5.2*)*','Opera/4.*(*Windows NT 6.1*)*','Mozilla/?.*(*Opera?*SunOS*)*','Opera/4.*(*Windows NT 5.2*)*','Opera/2.*(*Windows NT 6.1*)*','Opera/2.*(*Windows NT 6.0*)*','Irish Blogs Aggregator/*1.0*','Opera/4.*(*Windows NT 6.0*)*','Opera/2.*(*Windows NT 5.1*)*','Opera/9.80*(*Windows 2000*)*','Opera/3.*(*Windows NT 5.0*)*','Opera/3.*(*Windows NT 5.1*)*','Opera/3.*(*Windows NT 4.0*)*','Mozilla/?.**(*SunOS*)*Opera*','ogeb browser , Version 1.1.0','Opera/* (Nintendo Wii; U; *)','Opera/3.*(*Windows NT 5.2*)*','Opera/3.*(*Windows NT 6.0*)*','Mozilla/?.*(*Opera?*Linux*)*','Opera/2.12*(*Windows 2000*)*','Mozilla/?.**(*Linux*)*Opera*','KakleBot - www.kakle.com/0.1','Opera/3.*(*Windows NT 6.1*)*','*Netcraft Web Server Survey*','Opera/4.*(*Windows NT 5.1*)*','Opera/5.*(*Windows NT 5.2*)*','Opera/8.*(*Windows NT 6.1*)*','Opera/6.*(*Windows NT 6.0*)*','Opera/5.*(*Windows NT 6.0*)*','Opera/9.*(*Windows NT 5.2*)*','Opera/7.*(*Windows NT 4.0*)*','Opera/4.*(*Windows NT 4.0*)*','Links (1.0*; CYGWIN_NT-5.1*)','Opera/9.*(*Windows NT 5.1*)*','Opera/7.*(*Windows NT 6.0*)*','Opera/6.*(*Windows NT 6.1*)*','Opera/8.*(*Windows NT 6.0*)*','Opera/10.6*(*Windows 2000*)*','Opera/8.*(*Windows NT 4.0*)*','Opera/9.*(*Windows NT 6.1*)*','Opera/8.*(*Windows NT 5.0*)*','Opera/9.*(*Windows NT 6.0*)*','Opera/8.*(*Windows NT 5.1*)*','Opera/5.*(*Windows NT 6.1*)*','Opera/8.*(*Windows NT 5.2*)*','Opera/10.5*(*Windows 2000*)*','Opera/4.*(*Windows NT 5.0*)*','Opera*(*SymbOS*Opera Mobi*)*','Opera/7.*(*Windows NT 5.0*)*','HolmesBot (http://holmes.ge)','Norbert the Spider(Burf.com)','Opera/7.*(*Windows NT 5.1*)*','Opera/9.*(*Windows NT 4.0*)*','Opera/7.*(*Windows NT 6.1*)*','Mozilla/4.0 (*NetFront/2.*)*','Opera/6.*(*Windows NT 5.0*)*','Opera/6.*(*Windows NT 4.0*)*','Epsilon SoftWorks\' MailMunky','Mozilla/4.0 (*NetFront/3.*)*','Miva (AlgoFeedback@miva.com)','ELinks/0.9* (*Digital Unix*)','Opera/5.*(*Windows NT 5.0*)*','Opera/5.*(*Windows NT 5.1*)*','Links (0.9*; CYGWIN_NT-5.1*)','Mozilla/4.0 (stealthBrowser)','Opera/5.*(*Windows NT 4.0*)*','Opera/7.*(*Windows NT 5.2*)*','Opera/6.*(*Windows NT 5.1*)*','Opera/6.*(*Windows NT 5.2*)*','Opera/9.*(*Windows NT 5.0*)*','Opera/10.1*(*Windows 2000*)*','Opera/3.5*(*Windows 2000*)*','sitecheck.internetseer.com*','PDFBot (crawler@pdfind.com)','Opera/15.*(*Windows 2000*)*','Mozilla/?.**(*UNIX*)*Opera*','Opera/10.5*(*Win 9x 4.90*)*','Opera/12.*(*Windows 2000*)*','FastSearch Web Crawler for*','Mozilla/* (*) - BrowseX (*)','Opera/10.6*(*Win 9x 4.90*)*','POE-Component-Client-HTTP/*','Opera/10.1*(*Win 9x 4.90*)*','Live (http://www.live.com/)','Opera/14.*(*Windows 2000*)*','Opera/9.80*(*Win 9x 4.90*)*','Opera/9.6*(*Windows 2000*)*','Opera/3.6*(*Windows 2000*)*','Mozilla/4.0 (fantomBrowser)','*Netcraft Webserver Survey*','Mozilla/?.*(*Opera?*UNIX*)*','http://www.yellowpages.com*','Opera/2.1*(*Windows 2000*)*','Opera/13.*(*Windows 2000*)*','Opera/10.*(*Windows 2000*)*','Opera/2.12*(*Win 9x 4.90*)*','Opera/11.*(*Windows 2000*)*','Microsoft Internet Explorer','Opera/9.5*(*Windows 2000*)*','yp-crawl@attinteractive.com','Newsgroupreporter LinkCheck','Nutscrape/* (CP/M; 8-bit*)','Opera/2.*(*Windows 2000*)*','Opera/9.80*(*Windows 95*)*','Opera/2.12*(*Windows 95*)*','Opera/9.80*(*Windows 98*)*','Opera/10.6*(*Windows 95*)*','Opera/9.80*(*Windows CE*)*','Opera/10.1*(*Windows ME*)*','JoeDog/* (X11; I; Siege *)','Opera/11.*(*Win 9x 4.90*)*','Opera/10.1*(*Windows 95*)*','Opera/3.*(*Windows 2000*)*','Opera/10.6*(*Windows 98*)*','Opera/6.*(*Windows 2000*)*','Opera/10.6*(*Windows ME*)*','Opera/2.12*(*Windows ME*)*','Opera/10.1*(*Windows 98*)*','Opera/9.80*(*Windows ME*)*','Opera/8.*(*Windows 2000*)*','Opera/*(*Windows NT 5.1*)*','Opera/9.5*(*Win 9x 4.90*)*','Opera/*(*Windows NT 6.1*)*','Opera/10.*(*Win 9x 4.90*)*','Opera/10.5*(*Windows 95*)*','Yahoo! Slurp/Site Explorer','Opera/5.*(*Windows 2000*)*','Opera/9.80*(*Windows XP*)*','Opera/13.*(*Win 9x 4.90*)*','Mozilla/4.0 (cloakBrowser)','Opera/2.1*(*Win 9x 4.90*)*','Der gro\xdfe BilderSauger*','Mozilla/5.0 (Yahoo-Test/*)','Opera/14.*(*Win 9x 4.90*)*','searchbot admin@google.com','Opera/7.*(*Windows 2000*)*','Opera/3.6*(*Win 9x 4.90*)*','Opera/10.5*(*Windows 98*)*','Opera/2.12*(*Windows 98*)*','Opera/4.*(*Windows 2000*)*','Opera/*(*Windows NT 6.0*)*','Opera/15.*(*Win 9x 4.90*)*','Opera/*(*Windows NT 5.2*)*','Opera/12.*(*Win 9x 4.90*)*','*E-Mail Address Extractor*','Opera/9.*(*Windows 2000*)*','Opera/10.5*(*Windows ME*)*','Opera/9.6*(*Win 9x 4.90*)*','Opera/3.5*(*Win 9x 4.90*)*','DomainsDB.net MetaCrawler*','Opera/*(*Windows NT 5.0*)*','Opera/*(*Windows NT 4.0*)*','AideRSS 2.* (postrank.com)','Opera/3.6*(*Windows 95*)*','Opera/2.1*(*Windows 98*)*','Opera/2.1*(*Windows 95*)*','Opera/2.*(*Win 9x 4.90*)*','Opera/2.1*(*Windows ME*)*','Opera/3.*(*Win 9x 4.90*)*','ELinks (0.13*; *FreeBSD*)','ELinks (0.13*; *OpenBSD*)','ELinks (0.13*; *Solaris*)','ELinks (0.11*; *FreeBSD*)','ELinks (0.11*; *Solaris*)','Opera/3.6*(*Windows ME*)*','Opera/9.6*(*Windows 95*)*','ELinks (0.12*; *Solaris*)','Opera/3.6*(*Windows 98*)*','LucidMedia ClickSense/4.?','Mozilla/5.0 gURLChecker/*','Opera/9.5*(*Windows 95*)*','Opera/13.*(*Windows 95*)*','Opera/13.*(*Windows 98*)*','Opera/13.*(*Windows ME*)*','Opera/4.*(*Win 9x 4.90*)*','Opera/9.5*(*Windows 98*)*','Opera/3.5*(*Windows 95*)*','Opera/9.*(*Win 9x 4.90*)*','Opera/3.5*(*Windows 98*)*','Opera/3.5*(*Windows ME*)*','Opera/9.5*(*Windows ME*)*','Opera/14.*(*Windows ME*)*','Opera/14.*(*Windows 98*)*','Mozilla/5.0 (YahooYSMcm*)','Opera/10.*(*Windows 98*)*','Motorola Internet Browser','AideRSS/2.0 (aiderss.com)','Opera/10.*(*Windows 95*)*','Opera/10.*(*Windows ME*)*','Windows-RSS-Platform/1.0*','Opera/14.*(*Windows 95*)*','Opera/7.*(*Win 9x 4.90*)*','Fast PartnerSite Crawler*','*FAST Enterprise Crawler*','Mozilla/5.0 (*) VoilaBot*','Opera/12.*(*Windows ME*)*','Windows-Media-Player/10.*','Opera/8.*(*Win 9x 4.90*)*','Windows-Media-Player/11.*','Opera/11.*(*Windows 95*)*','Opera/11.*(*Windows 98*)*','ELinks (0.12*; *OpenBSD*)','Opera/9.80*(*Macintosh*)*','ELinks (0.10*; *OpenBSD*)','bot/* (bot; *bot@bot.bot)','Opera/9.6*(*Windows 98*)*','ELinks (0.10*; *FreeBSD*)','Opera/6.*(*Win 9x 4.90*)*','Opera/11.*(*Windows ME*)*','Opera/9.6*(*Windows ME*)*','Opera/15.*(*Windows 95*)*','Google-Site-Verification*','Opera/12.*(*Windows 95*)*','Opera/12.*(*Windows 98*)*','Opera/15.*(*Windows 98*)*','Opera/15.*(*Windows ME*)*','ELinks (0.11*; *OpenBSD*)','ELinks (0.12*; *FreeBSD*)','Lincoln State Web Browser','Opera/5.*(*Win 9x 4.90*)*','ELinks (0.10*; *Solaris*)','Opera/2.12*(*Mac OS X*)*','ICRA_Semantic_spider/0.?','Google OpenSocial agent*','Opera/10.1*(*Mac OS X*)*','Lycos-Spider_(modspider)','ELinks (0.9*; *FreeBSD*)','ICRA_label_generator/1.?','ELinks/0.13* (*Solaris*)','ShowXML/1.0 libwww/5.4.0','Opera/5.*(*Windows 95*)*','Mozilla/*(*MSIE*AOL*Mac*','Mozilla/*(*MSIE*AOL*Win*','Nutch/0.? (OpenX Spider)','FAST-WebCrawler/*/Fresh*','Opera/5.*(*Windows ME*)*','Opera/5.*(*Windows 98*)*','ELinks (0.9*; *OpenBSD*)','ELinks (0.9*; *Solaris*)','IBrowse/1.22 (AmigaOS *)','Opera/6.*(*Windows 95*)*','Opera/*(*Windows 2000*)*','ELinks (0.13*; *Darwin*)','ELinks (0.13*; *CygWin*)','ELinks/0.12* (*Solaris*)','ELinks/0.12* (*FreeBSD*)','ELinks/0.12* (*OpenBSD*)','ELinks (0.13*; *NetBSD*)','Opera/3.*(*Windows 95*)*','Opera/6.*(*Windows 98*)*','ELinks/0.13* (*OpenBSD*)','Opera/6.*(*Windows ME*)*','ELinks/0.13* (*FreeBSD*)','Opera/3.*(*Windows 98*)*','Opera/3.*(*Windows ME*)*','Opera/10.5*(*Mac OS X*)*','ELinks (0.11*; *Darwin*)','Oracle Enterprise Search','Opera/9.*(*Windows 95*)*','Tcl http client package*','appie*(www.walhello.com)','ELinks/0.10* (*Solaris*)','ELinks/0.10* (*OpenBSD*)','Opera/10.6*(*Mac OS X*)*','Opera/9.*(*Windows 98*)*','Kopiczek/* (WyderOS*; *)','LG-* Polaris/5.* MMP/2.*','Opera/7.*(*Windows ME*)*','Windows-Media-Player/7.*','LG-* Polaris/7.* MMP/2.*','Opera/9.*(*Windows ME*)*','IPiumBot laurion(dot)com','Opera/2.*(*Windows ME*)*','Opera/2.*(*Windows 98*)*','Windows-Media-Player/9.*','Opera/4.*(*Windows 95*)*','ELinks (0.10*; *CygWin*)','Opera/8.*(*Windows 95*)*','Opera/8.*(*Windows 98*)*','Windows-Media-Player/8.*','Opera/8.*(*Windows ME*)*','ELinks (0.10*; *Darwin*)','Opera/4.*(*Windows 98*)*','Mozilla/4.0 (VMS_Mosaic)','Opera/2.*(*Windows 95*)*','ELinks/0.10* (*FreeBSD*)','Opera/4.*(*Windows ME*)*','ELinks (0.12*; *NetBSD*)','ELinks (0.10*; *NetBSD*)','Opera/7.*(*Windows 98*)*','LG-* Polaris/6.* MMP/2.*','ELinks/0.11* (*Solaris*)','ELinks/0.11* (*FreeBSD*)','ELinks (0.12*; *Darwin*)','MOT-SAP4_/* UP.Browser/*','MOT-GATW_/* UP.Browser/*','ELinks/0.11* (*OpenBSD*)','ELinks (0.11*; *NetBSD*)','Opera/9.80*(*Mac OS X*)*','ELinks (0.12*; *CygWin*)','MOT-8700_/* UP.Browser/*','BlogPulse (ISSpider-3.*)','Mozilla/* (PLAYSTATION*)','ELinks (0.11*; *CygWin*)','Opera/7.*(*Windows 95*)*','ELinks (0.9*; *NetBSD*)','MOT-A-0A/* UP.Browser/*','spider (tspyyp@tom.com)','ELinks (0.9*; *Darwin*)','Opera/10.1*(*FreeBSD*)*','PubSub-RSS-Reader/* (*)','gazz/*(gazz@nttr.co.jp)','blogsearchbot-pumpkin-2','ELinks (0.9*; *CygWin*)','MOT-A-2B/* UP.Browser/*','Opera/10.*(*Mac OS X*)*','Opera/9.5*(*Mac OS X*)*','Opera/3.5*(*Mac OS X*)*','WebTrends Link Analyzer','Domain Dossier utility*','ELinks/0.9* (*OpenBSD*)','ELinks/0.9* (*Solaris*)','Opera/13.*(*Mac OS X*)*','Openwave Mobile Browser','ELinks/0.9* (*FreeBSD*)','Favorites Sweeper v.3.*','Opera/15.*(*Mac OS X*)*','MOT-A-88/* UP.Browser/*','ATA-Translation-Service','Opera/12.*(*Mac OS X*)*','Opera/14.*(*Mac OS X*)*','CyberSpyder Link Test/*','Titanium 2005 (4.02.01)','XML Sitemaps Generator*','ELinks/0.12* (*NetBSD*)','IBrowse/2.3 (AmigaOS *)','Opera/2.1*(*Mac OS X*)*','Bloglines Title Fetch/*','Shelob (shelob@gmx.net)','Mozilla/4.0*(Macintosh*','ELinks (0.13*; *Linux*)','SocialSpider-Finder/0.*','Opera/11.*(*Mac OS X*)*','ELinks (0.11*; *Linux*)','Opera/10.5*(*FreeBSD*)*','Opera/9.80*(*FreeBSD*)*','Opera/3.6*(*Mac OS X*)*','ELinks (0.12*; *Linux*)','Opera/2.12*(*FreeBSD*)*','ELinks/0.12* (*CygWin*)','ELinks/0.11* (*NetBSD*)','ELinks/0.12* (*Darwin*)','ELinks/0.11* (*CygWin*)','ELinks/0.11* (*Darwin*)','sitemonitor@dnsvr.com/*','Opera/*(*Win 9x 4.90*)*','Myst Monitor Service v*','ELinks/0.10* (*NetBSD*)','ELinks/0.13* (*NetBSD*)','Morfeus Fucking Scanner','ELinks/0.13* (*CygWin*)','ELinks/0.13* (*Darwin*)','ELinks/0.10* (*CygWin*)','ELinks/0.10* (*Darwin*)','http://Anonymouse.org/*','Opera/10.6*(*FreeBSD*)*','IBrowse/2.1 (AmigaOS *)','IBrowse/2.2 (AmigaOS *)','Opera/9.6*(*Mac OS X*)*','Open Web Analytics Bot*','Mozilla/5.0 (Twiceler*)','ELinks (0.10*; *Linux*)','Opera/6.*(*Mac OS X*)*','Opera/*(*Windows XP*)*','Opera/8.*(*Mac OS X*)*','Opera/3.6*(*FreeBSD*)*','Opera/9.5*(*FreeBSD*)*','Opera/*(*Windows CE*)*','Opera/*(*Windows 98*)*','Opera/*(*Windows 95*)*','Opera/9.*(*Mac OS X*)*','Opera/9.6*(*FreeBSD*)*','Opera/5.*(*Mac OS X*)*','Opera/*(*Windows ME*)*','Opera/4.*(*Mac OS X*)*','Opera/7.*(*Mac OS X*)*','iSiloX/4.3* Windows/32','Extreme Picture Finder','ELinks (0.11*; *RISC*)','TargetYourNews.com bot','ELinks (0.11*; *OS/2*)','ELinks (0.11*; *Unix*)','ELinks/0.11* (*Linux*)','ELinks (0.12*; *BeOS*)','*Konqueror/3.*FreeBSD*','*Konqueror/3.*OpenBSD*','Iltrovatore-?etaccio/*','JetBrains Omea Reader*','ELinks (0.11*; *IRIX*)','ELinks (0.10*; *RISC*)','ELinks (0.10*; *OS/2*)','ELinks (0.10*; *IRIX*)','ELinks (0.10*; *HPUX*)','ELinks (0.10*; *Unix*)','ELinks/0.10* (*Linux*)','ELinks/0.9* (*NetBSD*)','ELinks (0.11*; *BeOS*)','Opera/10.*(*FreeBSD*)*','ELinks (0.12*; *HPUX*)','ELinks (0.12*; *IRIX*)','ELinks (0.13*; *RISC*)','ELinks (0.13*; *OS/2*)','ELinks (0.13*; *IRIX*)','ELinks (0.13*; *HPUX*)','ELinks (0.13*; *Unix*)','ELinks/0.13* (*Linux*)','ELinks/0.9* (*Darwin*)','ELinks/0.9* (*CygWin*)','ELinks (0.9*; *Linux*)','ELinks (0.13*; *BeOS*)','iSiloX/4.0* Windows/32','Microsoft URL Control*','ELinks (0.12*; *Unix*)','ELinks (0.12*; *RISC*)','ELinks (0.12*; *OS/2*)','Miscellaneous Browsers','IE/6.01 (CP/M; 8-bit*)','iSiloX/4.1* Windows/32','iSiloX/4.2* Windows/32','ELinks/0.12* (*Linux*)','ELinks (0.10*; *BeOS*)','ELinks (0.11*; *HPUX*)','Links (1.0*; FreeBSD*)','Links (0.9*; FreeBSD*)','Opera/2.1*(*FreeBSD*)*','Links (2.1*; FreeBSD*)','Opera/15.*(*FreeBSD*)*','Opera/14.*(*FreeBSD*)*','Links (2.2*; FreeBSD*)','Links (2.1*; OpenBSD*)','YahooSeeker/CafeKelsa*','SAMSUNG* *NetFront/3.*','Microsoft Outlook 2010','Opera/3.*(*Mac OS X*)*','Opera/3.5*(*FreeBSD*)*','Microsoft Outlook 2007','AndroidDownloadManager','SAMSUNG* *NetFront/2.*','Sogou develop spider/*','Links (2.2*; OpenBSD*)','Opera/2.*(*Mac OS X*)*','WinScripter iNet Tools','Opera/11.*(*FreeBSD*)*','Opera/12.*(*FreeBSD*)*','Links (2.3*; OpenBSD*)','websitepulse checker/*','HuaweiSymantecSpider/*','Opera/13.*(*FreeBSD*)*','Links (2.3*; FreeBSD*)','ELinks/0.13* (*HPUX*)','ELinks/0.13* (*IRIX*)','ELinks/0.12* (*RISC*)','ELinks/0.12* (*Unix*)','ELinks/0.13* (*BeOS*)','*BlackBerrySimulator*','*maxamine.com--robot*','Opera/9.*(*FreeBSD*)*','ELinks (0.13*; *AIX*)','Mozilla/3.0 (INGRID/*','ELinks/0.13* (*RISC*)','ELinks (0.9*; *RISC*)','ELinks (0.9*; *OS/2*)','ELinks (0.9*; *Unix*)','MOT-1*/* UP.Browser/*','ELinks/0.9* (*Linux*)','MOT-M*/* UP.Browser/*','ELinks (0.10*; *AIX*)','ELinks (0.9*; *IRIX*)','Netchart Adv Crawler*','MOT-V*/* UP.Browser/*','Opera/6.*(*FreeBSD*)*','ELinks (0.9*; *BeOS*)','ELinks (0.9*; *HPUX*)','ELinks/0.13* (*OS/2*)','ELinks/0.10* (*HPUX*)','Links (2.1*; Linux *)','ELinks/0.10* (*Unix*)','ELinks/0.11* (*OS/2*)','ELinks/0.11* (*RISC*)','ELinks/0.11* (*Unix*)','ELinks/0.10* (*RISC*)','ELinks/0.11* (*IRIX*)','ELinks/0.11* (*HPUX*)','Links (2.2*; Linux *)','Links (2.2*; NetBSD*)','ELinks (0.11*; *AIX*)','Opera/7.*(*FreeBSD*)*','ELinks/0.11* (*BeOS*)','Links (2.3*; NetBSD*)','ELinks/0.10* (*OS/2*)','ELinks (0.12*; *AIX*)','ELinks/0.12* (*HPUX*)','*BecomeBot@exava.com*','Opera/*(*Macintosh*)*','ELinks/0.12* (*IRIX*)','ELinks/0.10* (*BeOS*)','Opera/8.*(*FreeBSD*)*','ELinks/0.12* (*BeOS*)','ELinks/0.10* (*IRIX*)','Browscap Mirror v1.30','Links (0.9*; Darwin*)','MSNBot-NewsBlogs/1.0*','Opera/9.80*(*SunOS*)*','Opera/9.80*(*Linux*)*','ELinks/0.12* (*OS/2*)','ELinks/0.13* (*Unix*)','Bookmark search tool*','*Googlebot-Mobile/2.*','Infoseek SideWinder/*','Mozilla/5.0 NewsFox/*','Cocoal.icio.us/* (*)*','ezic.com http agent *','Opera/5.*(*FreeBSD*)*','multiBlocker browser*','http://arachnode.net*','HP Secure Web Browser','AdsBot-Google-Mobile*','Opera/4.*(*FreeBSD*)*','Atomic_Email_Hunter/*','Opera/2.12*(*Linux*)*','copyright sheriff (*)','Opera/2.12*(*SunOS*)*','Opera/3.*(*FreeBSD*)*','iCopyright Conductor*','Opera/2.*(*FreeBSD*)*','Opera/10.6*(*SunOS*)*','Opera/10.1*(*Linux*)*','Opera/10.1*(*SunOS*)*','Opera/10.5*(*Linux*)*','Opera/10.6*(*Linux*)*','google (*Enterprise*)','Opera/10.5*(*SunOS*)*','Mediapartners-Google*','NSO_Debugger_User/2.0','Opera/11.*(*SunOS*)*','Copyright/Plagiarism','Opera/11.*(*Linux*)*','Mozilla/4.0*(Win98;*','Mozilla/4.0*(Win95;*','Links (2.3*; Linux*)','Opera/12.*(*SunOS*)*','Opera/12.*(*Linux*)*','MSNBot-Academic/1.0*','GoogleFriendConnect*','Lycos-Spider_(T-Rex)','Opera/10.*(*SunOS*)*','Opera/10.*(*Linux*)*','Windows Media Player','googlebot-urlconsole','ELinks/0.10* (*AIX*)','Opera/9.6*(*Linux*)*','ELinks/0.9* (*BeOS*)','8484 Boston Project*','Opera/3.6*(*Linux*)*','Opera/13.*(*Linux*)*','Sogou Orion spider/*','ELinks/0.9* (*HPUX*)','Links (0.9*; Linux*)','Links (0.9*; Win32*)','Opera/9.80*(*UNIX*)*','ELinks/0.9* (*IRIX*)','Opera/3.6*(*SunOS*)*','Opera/*(*Mac OS X*)*','Opera/2.1*(*SunOS*)*','Opera/2.1*(*Linux*)*','*Baiduspider-mobile*','TeragramWebcrawler/*','Opera/14.*(*SunOS*)*','Opera/14.*(*Linux*)*','Opera/9.6*(*SunOS*)*','Opera/13.*(*SunOS*)*','Opera/15.*(*Linux*)*','Opera/15.*(*SunOS*)*','Links (1.0*; Linux*)','Links (1.0*; Win32*)','Links (2.0*; Linux*)','ELinks/0.9* (*OS/2*)','ELinks/0.9* (*Unix*)','NetCarta_WebMapper/*','LinkLint-checkonly/*','*Google Web Preview*','*Web Link Validator*','Internet Exploiter/*','HenryTheMiragoRobot*','Mozilla/*(*MSIE*AOL*','ELinks/0.9* (*RISC*)','SOFTWING_TEAR_AGENT*','Opera/3.5*(*SunOS*)*','Opera/9.5*(*SunOS*)*','*Konqueror/3.*Linux*','Funnel Web Profiler*','Opera/9.5*(*Linux*)*','ELinks/0.11* (*AIX*)','Radiation Retriever*','Microsoft Visio MSIE','BackStreet Browser *','Opera/3.5*(*Linux*)*','ELinks/0.12* (*AIX*)','Wizz RSS News Reader','Poodle_predictor_1.0','Web Image Collector*','ELinks/0.13* (*AIX*)','ELinks (0.9*; *AIX*)','GigabotSiteSearch/*','Opera/6.*(*Linux*)*','Opera/5.*(*Linux*)*','Links (1.0*; Unix*)','Links (1.0*; OS/2*)','semanticdiscovery/*','Opera/*(*FreeBSD*)*','Emacs/W3/4.* (Unix*','Sogou Pus