BackWPup – WordPress Backup Plugin - Version 1.3.0

Version Description

  • added S3 new region codes for bucket creation
  • added S3 REDUCED REDUNDANCY support on put Backups
  • jobs will aborted after 10 min. and can't run twice
  • use curl for xml dump and copy if curl not works
  • increasd min. PHP version to 5.2.0, because than all works
  • use linux cron based scheduing times
  • added rackspacecloud.com support
  • use WP 3.1 table creation
  • added plugin checks for folder and new scheduling
Download this release

Release Info

Developer danielhuesken
Plugin Icon 128x128 BackWPup – WordPress Backup Plugin
Version 1.3.0
Comparing to
See all releases

Code changes from version 1.2.1 to 1.3.0

app/backwpup_dojob.php CHANGED
@@ -7,7 +7,7 @@ if ( !defined('ABSPATH') )
7
  //function for PHP error handling
8
  function backwpup_joberrorhandler($errno, $errstr, $errfile, $errline) {
9
  global $backwpup_logfile;
10
-
11
  //genrate timestamp
12
  if (!function_exists('memory_get_usage')) { // test if memory functions compiled in
13
  $timestamp="<span style=\"background-color:c3c3c3;\" title=\"[Line: ".$errline."|File: ".basename($errfile)."\">".date_i18n('Y-m-d H:i.s').":</span> ";
@@ -29,6 +29,7 @@ function backwpup_joberrorhandler($errno, $errstr, $errfile, $errline) {
29
  $warnings=$logheader['warnings']+1;
30
  $massage=$timestamp."<span style=\"background-color:yellow;\">".__('[WARNING]','backwpup')." ".$errstr."</span>";
31
  break;
 
32
  case E_USER_ERROR:
33
  $logheader=backwpup_read_logheader($backwpup_logfile); //read error count from log header
34
  $errors=$logheader['errors']+1;
@@ -82,11 +83,14 @@ function backwpup_joberrorhandler($errno, $errstr, $errfile, $errline) {
82
  @fclose($fd);
83
  }
84
 
85
- if ($errno==E_ERROR or $errno==E_CORE_ERROR or $errno==E_COMPILE_ERROR) //Die on fatal php errors.
 
 
 
86
  die();
87
-
88
-
89
- @set_time_limit(300); //300 is most webserver time limit. 0= max time! Give script 5 min. more to work.
90
  //true for no more php error hadling.
91
  return true;
92
  } else {
@@ -94,75 +98,6 @@ function backwpup_joberrorhandler($errno, $errstr, $errfile, $errline) {
94
  }
95
  }
96
 
97
- //Job shutdown function for abort
98
- function backwpup_jobshutdown() {
99
- global $backwpup_logfile;
100
- $logheader=backwpup_read_logheader($backwpup_logfile); //read waring count from log header
101
- $cfg=get_option('backwpup'); //load config
102
- $jobs=get_option('backwpup_jobs'); //load job options
103
-
104
- if (!empty($jobs[$logheader['jobid']]['stoptime'])) //abort if job exits normaly
105
- return;
106
-
107
- backwpup_joberrorhandler(E_USER_WARNING, __('Job shutdown function is working! Please delete temp Backup files by hand.','backwpup'), __FILE__, __LINE__);
108
-
109
- //try to get last error
110
- $lasterror=error_get_last();
111
- backwpup_joberrorhandler($lasterror['type'], __('Last ERROR:','backwpup').' '.$lasterror['message'], $lasterror['file'], $lasterror['line']);
112
-
113
- //set Temp Dir
114
- $tempdir=trailingslashit($cfg['dirtemp']);
115
- if ($tempdir=='/')
116
- $tempdir=backwpup_get_upload_dir();
117
-
118
- if (is_file($tempdir.DB_NAME.'.sql') ) { //delete sql temp file
119
- unlink($tempdir.DB_NAME.'.sql');
120
- }
121
-
122
- if (is_file($tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml') ) { //delete WP XML Export temp file
123
- unlink($tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml');
124
- }
125
-
126
- $jobs[$logheader['jobid']]['stoptime']=current_time('timestamp');
127
- $jobs[$logheader['jobid']]['lastrun']=$jobs[$logheader['jobid']]['starttime'];
128
- $jobs[$logheader['jobid']]['lastruntime']=$jobs[$logheader['jobid']]['stoptime']-$jobs[$logheader['jobid']]['starttime'];
129
- update_option('backwpup_jobs',$jobs); //Save Settings
130
-
131
- //write runtime header
132
- $fd=@fopen($backwpup_logfile,"r+");
133
- while (!feof($fd)) {
134
- $line=@fgets($fd);
135
- if (stripos($line,"<meta name=\"backwpup_jobruntime\"") !== false) {
136
- @fseek($fd,$filepos);
137
- @fputs($fd,str_pad("<meta name=\"backwpup_jobruntime\" content=\"".$jobs[$logheader['jobid']]['lastruntime']."\" />",100)."\n");
138
- break;
139
- }
140
- $filepos=ftell($fd);
141
- }
142
- @fclose($fd);
143
- //logfile end
144
- $fd=fopen($backwpup_logfile,"a+");
145
- fputs($fd,"</body>\n</html>\n");
146
- fclose($fd);
147
- restore_error_handler();
148
- $logdata=backwpup_read_logheader($backwpup_logfile);
149
- //Send mail with log
150
- $sendmail=false;
151
- if ($logdata['errors']>0 and $jobs[$logheader['jobid']]['mailerroronly'] and !empty($jobs[$logheader['jobid']]['mailaddresslog']))
152
- $sendmail=true;
153
- if (!$jobs[$logheader['jobid']]['mailerroronly'] and !empty($jobs[$logheader['jobid']]['mailaddresslog']))
154
- $sendmail=true;
155
- if ($sendmail) {
156
- $mailbody=__("Jobname:","backwpup")." ".$logdata['name']."\n";
157
- $mailbody.=__("Jobtype:","backwpup")." ".$logdata['type']."\n";
158
- if (!empty($logdata['errors']))
159
- $mailbody.=__("Errors:","backwpup")." ".$logdata['errors']."\n";
160
- if (!empty($logdata['warnings']))
161
- $mailbody.=__("Warnings:","backwpup")." ".$logdata['warnings']."\n";
162
- wp_mail($jobs[$logheader['jobid']]['mailaddresslog'],__('BackWPup Log File from','backwpup').' '.date_i18n('Y-m-d H:i',$jobs[$logheader['jobid']]['starttime']).': '.$jobs[$logheader['jobid']]['name'] ,$mailbody,'',array($backwpup_logfile));
163
- }
164
- }
165
-
166
  /**
167
  * BackWPup PHP class for WordPress
168
  *
@@ -184,48 +119,29 @@ class backwpup_dojob {
184
  private $job=array();
185
 
186
  public function __construct($jobid) {
187
- global $backwpup_logfile,$wpdb;
188
  @ini_get('safe_mode','Off'); //disable safe mode
189
- //Set no user abort
190
  @ini_set('ignore_user_abort','Off'); //Set PHP ini setting
191
  ignore_user_abort(true); //user can't abort script (close windows or so.)
192
  $this->jobid=$jobid; //set job id
193
  $this->cfg=get_option('backwpup'); //load config
194
  $jobs=get_option('backwpup_jobs'); //load jobdata
195
- $jobs[$this->jobid]['starttime']=current_time('timestamp'); //set start time for job
196
- $jobs[$this->jobid]['stoptime']=''; //Set stop time for job
197
- if ($jobs[$this->jobid]['activated'] and wp_get_schedule('backwpup_cron',array('jobid'=>$this->jobid)) !== false) //set Schedule time to next scheduled
198
- $jobs[$this->jobid]['scheduletime']=wp_next_scheduled('backwpup_cron',array('jobid'=>$this->jobid));
199
- update_option('backwpup_jobs',$jobs); //Save job Settings
200
  $this->job=backwpup_check_job_vars($jobs[$this->jobid]);//Set and check job settings
201
- //set waht to do
202
- $this->todo=explode('+',$this->job['type']);
203
- //set Backup File format Dir
204
- $this->backupfileformat=$this->job['fileformart'];
205
- //set Temp Dir
206
- $this->tempdir=trailingslashit($this->cfg['dirtemp']);
207
- if (empty($this->tempdir) or $this->tempdir=='/')
208
- $this->tempdir=backwpup_get_upload_dir();
209
- //set Backup Dir
210
- $this->backupdir=$this->job['backupdir'];
211
- if (empty($this->backupdir))
212
- $this->backupdir=$this->tempdir;
213
  //set Logs Dir
214
  $this->logdir=trailingslashit($this->cfg['dirlogs']);
215
  if (empty($this->logdir) or $this->logdir=='/') {
216
  $rand = substr( md5( md5( SECURE_AUTH_KEY ) ), -5 );
217
  $this->logdir=str_replace('\\','/',trailingslashit(WP_CONTENT_DIR)).'backwpup-'.$rand.'-logs/';
218
  }
219
- //set Backup file name only for jos that makes backups
220
- if (in_array('FILE',$this->todo) or in_array('DB',$this->todo) or in_array('WPEXP',$this->todo))
221
- $this->backupfile='backwpup_'.$this->jobid.'_'.date_i18n('Y-m-d_H-i-s').$this->backupfileformat;
222
  //set Log file name
223
  $this->logfile='backwpup_log_'.date_i18n('Y-m-d_H-i-s').'.html';
 
224
  $backwpup_logfile=$this->logdir.$this->logfile;
225
- //Create log file
226
- if (!$this->_check_folders($this->logdir))
227
- return false;
228
- $fd=@fopen($backwpup_logfile,"a+");
229
  @fputs($fd,"<html>\n<head>\n");
230
  @fputs($fd,"<meta name=\"backwpup_version\" content=\"".BACKWPUP_VERSION."\" />\n");
231
  @fputs($fd,"<meta name=\"php_version\" content=\"".phpversion()."\" />\n");
@@ -236,24 +152,55 @@ class backwpup_dojob {
236
  @fputs($fd,"<meta name=\"backwpup_jobid\" content=\"".$this->jobid."\" />\n");
237
  @fputs($fd,"<meta name=\"backwpup_jobname\" content=\"".$this->job['name']."\" />\n");
238
  @fputs($fd,"<meta name=\"backwpup_jobtype\" content=\"".$this->job['type']."\" />\n");
239
- if (!empty($this->backupfile))
240
- @fputs($fd,"<meta name=\"backwpup_backupfile\" content=\"".$this->backupfile."\" />\n");
241
  @fputs($fd,str_pad("<meta name=\"backwpup_backupfilesize\" content=\"0\" />",100)."\n");
242
  @fputs($fd,str_pad("<meta name=\"backwpup_jobruntime\" content=\"0\" />",100)."\n");
243
  @fputs($fd,"<title>".sprintf(__('BackWPup Log for %1$s from %2$s at %3$s','backwpup'),$this->job['name'],date_i18n(get_option('date_format')),date_i18n(get_option('time_format')))."</title>\n</head>\n<body style=\"font-family:monospace;font-size:12px;white-space:nowrap;\">\n");
244
- @fclose($fd);
245
  //set function for PHP user defineid error handling
246
  if (defined(WP_DEBUG) and WP_DEBUG)
247
  set_error_handler('backwpup_joberrorhandler',E_ALL | E_STRICT);
248
  else
249
  set_error_handler('backwpup_joberrorhandler',E_ALL & ~E_NOTICE);
250
- //set a schutdown function.
251
- register_shutdown_function('backwpup_jobshutdown');
252
- //check dirs
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
253
  if ($this->backupdir!=backwpup_get_upload_dir()) {
254
  if (!$this->_check_folders($this->backupdir))
255
  return false;
256
  }
 
 
 
257
  //check max script execution tme
258
  if (ini_get('safe_mode') or strtolower(ini_get('safe_mode'))=='on' or ini_get('safe_mode')=='1')
259
  trigger_error(sprintf(__('PHP Safe Mode is on!!! Max exec time is %1$d sec.','backwpup'),ini_get('max_execution_time')),E_USER_WARNING);
@@ -287,6 +234,7 @@ class backwpup_dojob {
287
  $this->destination_mail();
288
  $this->destination_ftp();
289
  $this->destination_s3();
 
290
  $this->destination_dir();
291
  }
292
 
@@ -300,6 +248,8 @@ class backwpup_dojob {
300
  break;
301
  }
302
  }
 
 
303
  }
304
 
305
  private function _check_folders($folder) {
@@ -524,12 +474,13 @@ class backwpup_dojob {
524
  private function dump_db() {
525
  global $wpdb;
526
  trigger_error(__('Run Database Dump to file...','backwpup'),E_USER_NOTICE);
 
527
  $this->maintenance_mode(true);
528
 
529
  //Tables to backup
530
  $tables=$wpdb->get_col('SHOW TABLES FROM `'.DB_NAME.'`');
531
  if ($sqlerr=mysql_error($wpdb->dbh))
532
- trigger_error(sprintf(__('BackWPup database error %1$s for query %2$s','backwpup'), $sqlerr, "SHOW TABLES FROM `'.DB_NAME.'`"),E_USER_ERROR);
533
 
534
  foreach($tables as $tablekey => $tablevalue) {
535
  if (in_array($tablevalue,$this->job['dbexclude']))
@@ -589,6 +540,7 @@ class backwpup_dojob {
589
  fwrite($file, "/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;\n");
590
  fwrite($file, "/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;\n");
591
  fclose($file);
 
592
  } else {
593
  trigger_error(__('Can not create Database Dump file','backwpup'),E_USER_ERROR);
594
  }
@@ -596,30 +548,54 @@ class backwpup_dojob {
596
  trigger_error(__('No Tables to Dump','backwpup'),E_USER_WARNING);
597
  }
598
 
599
- trigger_error(__('Database Dump done!','backwpup'),E_USER_NOTICE);
600
  //add database file to backupfiles
601
- trigger_error(__('Add Database Dump to Backup:','backwpup').' '.DB_NAME.'.sql '.backwpup_formatBytes(filesize($this->tempdir.DB_NAME.'.sql')),E_USER_NOTICE);
602
- $this->allfilesize+=filesize($this->tempdir.DB_NAME.'.sql');
603
- $this->filelist[]=array(79001=>$this->tempdir.DB_NAME.'.sql',79003=>DB_NAME.'.sql');
604
-
 
 
605
  $this->maintenance_mode(false);
606
  }
607
 
608
-
609
-
610
  private function export_wp() {
611
- trigger_error(__('Run Wordpress Export to XML file...','backwpup'),E_USER_NOTICE);
612
- if (copy(plugins_url('wp_xml_export.php',__FILE__).'?wpabs='.trailingslashit(ABSPATH).'&_nonce='.substr(md5(md5(SECURE_AUTH_KEY)),10,10),$this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml')) {
613
- trigger_error(__('Export to XML done!','backwpup'),E_USER_NOTICE);
614
- //add database file to backupfiles
615
- trigger_error(__('Add XML Export to Backup:','backwpup').' wordpress.' . date( 'Y-m-d' ) . '.xml '.backwpup_formatBytes(filesize($this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml')),E_USER_NOTICE);
616
- $this->allfilesize+=filesize($this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml');
617
- $this->filelist[]=array(79001=>$this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml',79003=>'wordpress.' . date( 'Y-m-d' ) . '.xml');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
618
  } else {
619
- trigger_error(__('Can not Export to XML!','backwpup'),E_USER_ERROR);
620
  }
621
  }
622
-
623
  private function optimize_db() {
624
  global $wpdb;
625
 
@@ -1076,11 +1052,11 @@ class backwpup_dojob {
1076
  private function destination_s3() {
1077
 
1078
  if (empty($this->job['awsAccessKey']) or empty($this->job['awsSecretKey']) or empty($this->job['awsBucket']))
1079
- return false;
1080
 
1081
  if (!(extension_loaded('curl') or @dl(PHP_SHLIB_SUFFIX == 'so' ? 'curl.so' : 'php_curl.dll'))) {
1082
  trigger_error(__('Can not load curl extension is needed for S3!','backwpup'),E_USER_ERROR);
1083
- return false;
1084
  }
1085
 
1086
  if (!class_exists('S3'))
@@ -1091,7 +1067,7 @@ class backwpup_dojob {
1091
  if (in_array($this->job['awsBucket'],$s3->listBuckets())) {
1092
  trigger_error(__('Connected to S3 Bucket:','backwpup').' '.$this->job['awsBucket'],E_USER_NOTICE);
1093
  //Transfer Backup to S3
1094
- if ($s3->putObjectFile($this->backupdir.$this->backupfile, $this->job['awsBucket'], $this->job['awsdir'].$this->backupfile, S3::ACL_PRIVATE)) //transfere file to S3
1095
  trigger_error(__('Backup File transferred to S3://','backwpup').$this->job['awsBucket'].'/'.$this->job['awsdir'].$this->backupfile,E_USER_NOTICE);
1096
  else
1097
  trigger_error(__('Can not transfer backup to S3.','backwpup'),E_USER_ERROR);
@@ -1100,10 +1076,10 @@ class backwpup_dojob {
1100
  $backupfilelist=array();
1101
  if (($contents = $s3->getBucket($this->job['awsBucket'],$this->job['awsdir'])) !== false) {
1102
  foreach ($contents as $object) {
1103
- if ($this->job['awsdir'].basename($object['name']) == $object['name']) {//only in the folder and not in complete bucket
1104
- $file=basename($object['name']);
1105
- if ('backwpup_'.$this->jobid.'_' == substr(basename($file),0,strlen('backwpup_'.$this->jobid.'_')) and $this->backupfileformat == substr(basename($file),-strlen($this->backupfileformat)))
1106
- $backupfilelist[]=basename($object['name']);
1107
  }
1108
  }
1109
  }
@@ -1114,7 +1090,7 @@ class backwpup_dojob {
1114
  if ($s3->deleteObject($this->job['awsBucket'], $this->job['awsdir'].$backupfilelist[$i])) //delte files on S3
1115
  $numdeltefiles++;
1116
  else
1117
- trigger_error(__('Can not delete file on S3//:','backwpup').$this->job['awsBucket'].'/'.$this->job['awsdir'].$backupfilelist[$i],E_USER_ERROR);
1118
  }
1119
  if ($numdeltefiles>0)
1120
  trigger_error($numdeltefiles.' '.__('files deleted on S3 Bucket!','backwpup'),E_USER_NOTICE);
@@ -1125,6 +1101,94 @@ class backwpup_dojob {
1125
  }
1126
  }
1127
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1128
  private function destination_dir() {
1129
  if (empty($this->job['backupdir'])) //Go back if no destination dir
1130
  return;
@@ -1150,29 +1214,11 @@ class backwpup_dojob {
1150
  }
1151
  }
1152
  }
1153
-
1154
- public function __destruct() {
1155
- global $backwpup_logfile;
1156
-
1157
- if (is_file($this->backupdir.$this->backupfile)) {
1158
- $filesize=filesize($this->backupdir.$this->backupfile);
1159
  trigger_error(sprintf(__('Backup Archive File size is %1s','backwpup'),backwpup_formatBytes($filesize)),E_USER_NOTICE);
1160
- }
1161
-
1162
- if (empty($filesize)) //Set the filezie corectly
1163
- $filesize=0;
1164
-
1165
- if (is_file($this->tempdir.DB_NAME.'.sql') ) { //delete sql temp file
1166
- unlink($this->tempdir.DB_NAME.'.sql');
1167
- }
1168
-
1169
- if (is_file($this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml') ) { //delete WP XML Export temp file
1170
- unlink($this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml');
1171
- }
1172
-
1173
- if (empty($this->job['backupdir']) and is_file($this->backupdir.$this->backupfile)) { //delete backup file in temp dir
1174
- unlink($this->backupdir.$this->backupfile);
1175
- }
1176
 
1177
  //delete old logs
1178
  if (!empty($this->cfg['maxlogs'])) {
@@ -1194,22 +1240,46 @@ class backwpup_dojob {
1194
  trigger_error($numdeltefiles.' '.__('old Log files deleted!!!','backwpup'),E_USER_NOTICE);
1195
  }
1196
  }
1197
-
1198
  $jobs=get_option('backwpup_jobs');
1199
  $jobs[$this->jobid]['stoptime']=current_time('timestamp');
1200
  $jobs[$this->jobid]['lastrun']=$jobs[$this->jobid]['starttime'];
1201
  $jobs[$this->jobid]['lastruntime']=$jobs[$this->jobid]['stoptime']-$jobs[$this->jobid]['starttime'];
 
1202
  update_option('backwpup_jobs',$jobs); //Save Settings
1203
- trigger_error(sprintf(__('Job done in %1s sec.','backwpup'),$jobs[$this->jobid]['lastruntime']),E_USER_NOTICE);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1204
 
1205
- //write runtime header
1206
- $fd=@fopen($backwpup_logfile,"r+");
1207
  $found=0;
1208
  while (!feof($fd)) {
1209
  $line=@fgets($fd);
1210
  if (stripos($line,"<meta name=\"backwpup_jobruntime\"") !== false) {
1211
  @fseek($fd,$filepos);
1212
- @fputs($fd,str_pad("<meta name=\"backwpup_jobruntime\" content=\"".$jobs[$this->jobid]['lastruntime']."\" />",100)."\n");
1213
  $found++;
1214
  }
1215
  if (stripos($line,"<meta name=\"backwpup_backupfilesize\"") !== false) {
@@ -1223,11 +1293,11 @@ class backwpup_dojob {
1223
  }
1224
  @fclose($fd);
1225
  //logfile end
1226
- $fd=fopen($backwpup_logfile,"a+");
1227
  fputs($fd,"</body>\n</html>\n");
1228
  fclose($fd);
1229
  restore_error_handler();
1230
- $logdata=backwpup_read_logheader($backwpup_logfile);
1231
  //Send mail with log
1232
  $sendmail=false;
1233
  if ($logdata['errors']>0 and $this->job['mailerroronly'] and !empty($this->job['mailaddresslog']))
7
  //function for PHP error handling
8
  function backwpup_joberrorhandler($errno, $errstr, $errfile, $errline) {
9
  global $backwpup_logfile;
10
+
11
  //genrate timestamp
12
  if (!function_exists('memory_get_usage')) { // test if memory functions compiled in
13
  $timestamp="<span style=\"background-color:c3c3c3;\" title=\"[Line: ".$errline."|File: ".basename($errfile)."\">".date_i18n('Y-m-d H:i.s').":</span> ";
29
  $warnings=$logheader['warnings']+1;
30
  $massage=$timestamp."<span style=\"background-color:yellow;\">".__('[WARNING]','backwpup')." ".$errstr."</span>";
31
  break;
32
+ case E_ERROR:
33
  case E_USER_ERROR:
34
  $logheader=backwpup_read_logheader($backwpup_logfile); //read error count from log header
35
  $errors=$logheader['errors']+1;
83
  @fclose($fd);
84
  }
85
 
86
+ if ($errno==E_ERROR or $errno==E_CORE_ERROR or $errno==E_COMPILE_ERROR) {//Die on fatal php errors.
87
+ $fd=fopen($backwpup_logfile,"a+");
88
+ fputs($fd,"</body>\n</html>\n");
89
+ fclose($fd);
90
  die();
91
+ }
92
+ //300 is most webserver time limit. 0= max time! Give script 5 min. more to work.
93
+ @set_time_limit(300);
94
  //true for no more php error hadling.
95
  return true;
96
  } else {
98
  }
99
  }
100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  /**
102
  * BackWPup PHP class for WordPress
103
  *
119
  private $job=array();
120
 
121
  public function __construct($jobid) {
122
+ global $wpdb,$backwpup_logfile;
123
  @ini_get('safe_mode','Off'); //disable safe mode
 
124
  @ini_set('ignore_user_abort','Off'); //Set PHP ini setting
125
  ignore_user_abort(true); //user can't abort script (close windows or so.)
126
  $this->jobid=$jobid; //set job id
127
  $this->cfg=get_option('backwpup'); //load config
128
  $jobs=get_option('backwpup_jobs'); //load jobdata
 
 
 
 
 
129
  $this->job=backwpup_check_job_vars($jobs[$this->jobid]);//Set and check job settings
 
 
 
 
 
 
 
 
 
 
 
 
130
  //set Logs Dir
131
  $this->logdir=trailingslashit($this->cfg['dirlogs']);
132
  if (empty($this->logdir) or $this->logdir=='/') {
133
  $rand = substr( md5( md5( SECURE_AUTH_KEY ) ), -5 );
134
  $this->logdir=str_replace('\\','/',trailingslashit(WP_CONTENT_DIR)).'backwpup-'.$rand.'-logs/';
135
  }
136
+ //Check log file dir
137
+ if (!$this->_check_folders($this->logdir))
138
+ return false;
139
  //set Log file name
140
  $this->logfile='backwpup_log_'.date_i18n('Y-m-d_H-i-s').'.html';
141
+ //set global for error handling
142
  $backwpup_logfile=$this->logdir.$this->logfile;
143
+ //Create log file header
144
+ $fd=@fopen($this->logdir.$this->logfile,"a+");
 
 
145
  @fputs($fd,"<html>\n<head>\n");
146
  @fputs($fd,"<meta name=\"backwpup_version\" content=\"".BACKWPUP_VERSION."\" />\n");
147
  @fputs($fd,"<meta name=\"php_version\" content=\"".phpversion()."\" />\n");
152
  @fputs($fd,"<meta name=\"backwpup_jobid\" content=\"".$this->jobid."\" />\n");
153
  @fputs($fd,"<meta name=\"backwpup_jobname\" content=\"".$this->job['name']."\" />\n");
154
  @fputs($fd,"<meta name=\"backwpup_jobtype\" content=\"".$this->job['type']."\" />\n");
 
 
155
  @fputs($fd,str_pad("<meta name=\"backwpup_backupfilesize\" content=\"0\" />",100)."\n");
156
  @fputs($fd,str_pad("<meta name=\"backwpup_jobruntime\" content=\"0\" />",100)."\n");
157
  @fputs($fd,"<title>".sprintf(__('BackWPup Log for %1$s from %2$s at %3$s','backwpup'),$this->job['name'],date_i18n(get_option('date_format')),date_i18n(get_option('time_format')))."</title>\n</head>\n<body style=\"font-family:monospace;font-size:12px;white-space:nowrap;\">\n");
158
+ @fclose($fd);
159
  //set function for PHP user defineid error handling
160
  if (defined(WP_DEBUG) and WP_DEBUG)
161
  set_error_handler('backwpup_joberrorhandler',E_ALL | E_STRICT);
162
  else
163
  set_error_handler('backwpup_joberrorhandler',E_ALL & ~E_NOTICE);
164
+ //find out if job already running and abort if
165
+ if ($jobs[$this->jobid]['starttime']>0 and empty($jobs[$this->jobid]['stoptime'])) {
166
+ if ($jobs[$this->jobid]['starttime']+600>current_time('timestamp')) { //Abort old jo if work longer as 10 min. because websever has 300 sec timeout
167
+ trigger_error(__('Working Job will closed!!! And a new started!!!','backwpup'),E_USER_WARNING);
168
+ //old logfile end
169
+ $fd=fopen($jobs[$this->jobid]['logfile'],"a+");
170
+ fputs($fd,"<span style=\"background-color:c3c3c3;\" title=\"[Line: ".__LINE__."|File: ".basename(__FILE__)."\">".date_i18n('Y-m-d H:i.s').":</span> <span>".__('[ERROR]','backwpup')." ".__('Backup Aborted working to long!!!','backwpup')."</span><br />\n");
171
+ fputs($fd,"</body>\n</html>\n");
172
+ fclose($fd);
173
+ } else {
174
+ trigger_error(sprintf(__('Job %1$s already running!!!','backwpup'),$this->job['name']),E_USER_ERROR);
175
+ return false;
176
+ }
177
+ }
178
+ //Set job start settings
179
+ $jobs[$this->jobid]['starttime']=current_time('timestamp'); //set start time for job
180
+ $jobs[$this->jobid]['stoptime']=''; //Set stop time for job
181
+ $jobs[$this->jobid]['logfile']=$this->logdir.$this->logfile; //Set stop time for job
182
+ $jobs[$this->jobid]['cronnextrun']=backwpup_cron_next($jobs[$this->jobid]['cron']);
183
+ update_option('backwpup_jobs',$jobs); //Save job Settings
184
+ //set waht to do
185
+ $this->todo=explode('+',$this->job['type']);
186
+ //set Backup File format
187
+ $this->backupfileformat=$this->job['fileformart'];
188
+ //set Temp Dir
189
+ $this->tempdir=trailingslashit($this->cfg['dirtemp']);
190
+ if (empty($this->tempdir) or $this->tempdir=='/')
191
+ $this->tempdir=backwpup_get_upload_dir();
192
+ //set Backup Dir
193
+ $this->backupdir=$this->job['backupdir'];
194
+ if (empty($this->backupdir))
195
+ $this->backupdir=$this->tempdir;
196
+ //check backup dir
197
  if ($this->backupdir!=backwpup_get_upload_dir()) {
198
  if (!$this->_check_folders($this->backupdir))
199
  return false;
200
  }
201
+ //set Backup file name only for jos that makes backups
202
+ if (in_array('FILE',$this->todo) or in_array('DB',$this->todo) or in_array('WPEXP',$this->todo))
203
+ $this->backupfile='backwpup_'.$this->jobid.'_'.date_i18n('Y-m-d_H-i-s').$this->backupfileformat;
204
  //check max script execution tme
205
  if (ini_get('safe_mode') or strtolower(ini_get('safe_mode'))=='on' or ini_get('safe_mode')=='1')
206
  trigger_error(sprintf(__('PHP Safe Mode is on!!! Max exec time is %1$d sec.','backwpup'),ini_get('max_execution_time')),E_USER_WARNING);
234
  $this->destination_mail();
235
  $this->destination_ftp();
236
  $this->destination_s3();
237
+ $this->destination_rsc();
238
  $this->destination_dir();
239
  }
240
 
248
  break;
249
  }
250
  }
251
+
252
+ $this->job_end(); //call regualar job end
253
  }
254
 
255
  private function _check_folders($folder) {
474
  private function dump_db() {
475
  global $wpdb;
476
  trigger_error(__('Run Database Dump to file...','backwpup'),E_USER_NOTICE);
477
+ //Set maintenance
478
  $this->maintenance_mode(true);
479
 
480
  //Tables to backup
481
  $tables=$wpdb->get_col('SHOW TABLES FROM `'.DB_NAME.'`');
482
  if ($sqlerr=mysql_error($wpdb->dbh))
483
+ trigger_error(sprintf(__('BackWPup database error %1$s for query %2$s','backwpup'), $sqlerr, "SHOW TABLES FROM `".DB_NAME."`"),E_USER_ERROR);
484
 
485
  foreach($tables as $tablekey => $tablevalue) {
486
  if (in_array($tablevalue,$this->job['dbexclude']))
540
  fwrite($file, "/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;\n");
541
  fwrite($file, "/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;\n");
542
  fclose($file);
543
+ trigger_error(__('Database Dump done!','backwpup'),E_USER_NOTICE);
544
  } else {
545
  trigger_error(__('Can not create Database Dump file','backwpup'),E_USER_ERROR);
546
  }
548
  trigger_error(__('No Tables to Dump','backwpup'),E_USER_WARNING);
549
  }
550
 
551
+
552
  //add database file to backupfiles
553
+ if (is_file($this->tempdir.DB_NAME.'.sql')) {
554
+ trigger_error(__('Add Database Dump to Backup:','backwpup').' '.DB_NAME.'.sql '.backwpup_formatBytes(filesize($this->tempdir.DB_NAME.'.sql')),E_USER_NOTICE);
555
+ $this->allfilesize+=filesize($this->tempdir.DB_NAME.'.sql');
556
+ $this->filelist[]=array(79001=>$this->tempdir.DB_NAME.'.sql',79003=>DB_NAME.'.sql');
557
+ }
558
+ //Back from maintenance
559
  $this->maintenance_mode(false);
560
  }
561
 
 
 
562
  private function export_wp() {
563
+ if (extension_loaded('curl') or @dl(PHP_SHLIB_SUFFIX == 'so' ? 'curl.so' : 'php_curl.dll')) {
564
+ trigger_error(__('Run Wordpress Export to XML file...','backwpup'),E_USER_NOTICE);
565
+ $ch = curl_init();
566
+ curl_setopt($ch, CURLOPT_URL, plugins_url('wp_xml_export.php',__FILE__).'?wpabs='.trailingslashit(ABSPATH).'&_nonce='.substr(md5(md5(SECURE_AUTH_KEY)),10,10));
567
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
568
+ curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
569
+ curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
570
+ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
571
+ $return=curl_exec($ch);
572
+ if (!$return) {
573
+ trigger_error(__('cURL:','backwpup').' '.curl_error($ch),E_USER_ERROR);
574
+ } else {
575
+ $fd=fopen($this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml',"w+");
576
+ fwrite($fd,$return);
577
+ fclose($fd);
578
+ trigger_error(__('Add XML Export to Backup:','backwpup').' wordpress.' . date( 'Y-m-d' ) . '.xml '.backwpup_formatBytes(filesize($this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml')),E_USER_NOTICE);
579
+ $this->allfilesize+=filesize($this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml');
580
+ $this->filelist[]=array(79001=>$this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml',79003=>'wordpress.' . date( 'Y-m-d' ) . '.xml');
581
+ }
582
+ curl_close($ch);
583
+ } elseif (ini_get('allow_url_fopen')==true or ini_get('allow_url_fopen')==1 or strtolower(ini_get('allow_url_fopen'))=="on") {
584
+ trigger_error(__('Run Wordpress Export to XML file...','backwpup'),E_USER_NOTICE);
585
+ if (copy(plugins_url('wp_xml_export.php',__FILE__).'?wpabs='.trailingslashit(ABSPATH).'&_nonce='.substr(md5(md5(SECURE_AUTH_KEY)),10,10),$this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml')) {
586
+ trigger_error(__('Export to XML done!','backwpup'),E_USER_NOTICE);
587
+ //add database file to backupfiles
588
+ trigger_error(__('Add XML Export to Backup:','backwpup').' wordpress.' . date( 'Y-m-d' ) . '.xml '.backwpup_formatBytes(filesize($this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml')),E_USER_NOTICE);
589
+ $this->allfilesize+=filesize($this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml');
590
+ $this->filelist[]=array(79001=>$this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml',79003=>'wordpress.' . date( 'Y-m-d' ) . '.xml');
591
+ } else {
592
+ trigger_error(__('Can not Export to XML!','backwpup'),E_USER_ERROR);
593
+ }
594
  } else {
595
+ trigger_error(__('Can not Export to XML! no cURL or allow_url_fopen Support!','backwpup'),E_USER_WARNING);
596
  }
597
  }
598
+
599
  private function optimize_db() {
600
  global $wpdb;
601
 
1052
  private function destination_s3() {
1053
 
1054
  if (empty($this->job['awsAccessKey']) or empty($this->job['awsSecretKey']) or empty($this->job['awsBucket']))
1055
+ return;
1056
 
1057
  if (!(extension_loaded('curl') or @dl(PHP_SHLIB_SUFFIX == 'so' ? 'curl.so' : 'php_curl.dll'))) {
1058
  trigger_error(__('Can not load curl extension is needed for S3!','backwpup'),E_USER_ERROR);
1059
+ return;
1060
  }
1061
 
1062
  if (!class_exists('S3'))
1067
  if (in_array($this->job['awsBucket'],$s3->listBuckets())) {
1068
  trigger_error(__('Connected to S3 Bucket:','backwpup').' '.$this->job['awsBucket'],E_USER_NOTICE);
1069
  //Transfer Backup to S3
1070
+ if ($s3->putObjectFile($this->backupdir.$this->backupfile, $this->job['awsBucket'], $this->job['awsdir'].$this->backupfile, S3::ACL_PRIVATE,array(),null,$this->job['awsrrs'])) //transfere file to S3
1071
  trigger_error(__('Backup File transferred to S3://','backwpup').$this->job['awsBucket'].'/'.$this->job['awsdir'].$this->backupfile,E_USER_NOTICE);
1072
  else
1073
  trigger_error(__('Can not transfer backup to S3.','backwpup'),E_USER_ERROR);
1076
  $backupfilelist=array();
1077
  if (($contents = $s3->getBucket($this->job['awsBucket'],$this->job['awsdir'])) !== false) {
1078
  foreach ($contents as $object) {
1079
+ $file=basename($object['name']);
1080
+ if ($this->job['awsdir'].$file == $object['name']) {//only in the folder and not in complete bucket
1081
+ if ('backwpup_'.$this->jobid.'_' == substr($file,0,strlen('backwpup_'.$this->jobid.'_')) and $this->backupfileformat == substr($file,-strlen($this->backupfileformat)))
1082
+ $backupfilelist[]=$file;
1083
  }
1084
  }
1085
  }
1090
  if ($s3->deleteObject($this->job['awsBucket'], $this->job['awsdir'].$backupfilelist[$i])) //delte files on S3
1091
  $numdeltefiles++;
1092
  else
1093
+ trigger_error(__('Can not delete file on S3://','backwpup').$this->job['awsBucket'].'/'.$this->job['awsdir'].$backupfilelist[$i],E_USER_ERROR);
1094
  }
1095
  if ($numdeltefiles>0)
1096
  trigger_error($numdeltefiles.' '.__('files deleted on S3 Bucket!','backwpup'),E_USER_NOTICE);
1101
  }
1102
  }
1103
 
1104
+ private function destination_rsc() {
1105
+
1106
+ if (empty($this->job['rscUsername']) or empty($this->job['rscAPIKey']) or empty($this->job['rscContainer']))
1107
+ return;
1108
+
1109
+ if (!(extension_loaded('curl') or @dl(PHP_SHLIB_SUFFIX == 'so' ? 'curl.so' : 'php_curl.dll'))) {
1110
+ trigger_error(__('Can not load curl extension is needed for Rackspase Cloud!','backwpup'),E_USER_ERROR);
1111
+ return;
1112
+ }
1113
+
1114
+ if (!class_exists('CF_Authentication'))
1115
+ require_once(plugin_dir_path(__FILE__).'libs/rackspace/cloudfiles.php');
1116
+
1117
+
1118
+ $auth = new CF_Authentication($this->job['rscUsername'], $this->job['rscAPIKey']);
1119
+ $auth->ssl_use_cabundle();
1120
+ try {
1121
+ if ($auth->authenticate())
1122
+ trigger_error(__('Connected to Rackspase ...','backwpup'),E_USER_NOTICE);
1123
+ $conn = new CF_Connection($auth);
1124
+ $conn->ssl_use_cabundle();
1125
+ $is_container=false;
1126
+ $containers=$conn->get_containers();
1127
+ foreach ($containers as $container) {
1128
+ if ($container->name == $this->job['rscContainer'] )
1129
+ $is_container=true;
1130
+ }
1131
+ if (!$is_container) {
1132
+ $public_container = $conn->create_container($this->job['rscContainer']);
1133
+ $public_container->make_private();
1134
+ if (empty($public_container))
1135
+ $is_container=false;
1136
+ }
1137
+ } catch (Exception $e) {
1138
+ trigger_error(__('Rackspase Cloud API:','backwpup').' '.__($e->getMessage(),'backwpup'),E_USER_ERROR);
1139
+ return;
1140
+ }
1141
+
1142
+
1143
+ if (!$is_container) {
1144
+ trigger_error(__('Rackspase Cloud Container not exists:','backwpup').' '.$this->job['rscContainer'],E_USER_ERROR);
1145
+ return;
1146
+ }
1147
+
1148
+ try {
1149
+ //Transfer Backup to Rackspace Cloud
1150
+ $backwpupcontainer = $conn->get_container($this->job['rscContainer']);
1151
+ //if (!empty($this->job['rscdir'])) //make the foldder
1152
+ // $backwpupcontainer->create_paths($this->job['rscdir']);
1153
+ $backwpupbackup = $backwpupcontainer->create_object($this->job['rscdir'].$this->backupfile);
1154
+
1155
+ if ($backwpupbackup->load_from_filename($this->backupdir.$this->backupfile))
1156
+ trigger_error(__('Backup File transferred to RSC://','backwpup').$this->job['rscContainer'].'/'.$this->job['rscdir'].$this->backupfile,E_USER_NOTICE);
1157
+ else
1158
+ trigger_error(__('Can not transfer backup to RSC.','backwpup'),E_USER_ERROR);
1159
+
1160
+
1161
+ if ($this->job['rscmaxbackups']>0) { //Delete old backups
1162
+ $backupfilelist=array();
1163
+ $contents = $backwpupcontainer->list_objects(0,NULL,NULL,$this->job['rscdir']);
1164
+ if (is_array($contents)) {
1165
+ foreach ($contents as $object) {
1166
+ $file=basename($object);
1167
+ if ($this->job['rscdir'].$file == $object) {//only in the folder and not in complete bucket
1168
+ if ('backwpup_'.$this->jobid.'_' == substr($file,0,strlen('backwpup_'.$this->jobid.'_')) and $this->backupfileformat == substr($file,-strlen($this->backupfileformat)))
1169
+ $backupfilelist[]=$file;
1170
+ }
1171
+ }
1172
+ }
1173
+ if (sizeof($backupfilelist)>0) {
1174
+ rsort($backupfilelist);
1175
+ $numdeltefiles=0;
1176
+ for ($i=$this->job['rscmaxbackups'];$i<sizeof($backupfilelist);$i++) {
1177
+ if ($backwpupcontainer->delete_object($this->job['rscdir'].$backupfilelist[$i])) //delte files on Cloud
1178
+ $numdeltefiles++;
1179
+ else
1180
+ trigger_error(__('Can not delete file on RSC://','backwpup').$this->job['rscContainer'].'/'.$this->job['rscdir'].$backupfilelist[$i],E_USER_ERROR);
1181
+ }
1182
+ if ($numdeltefiles>0)
1183
+ trigger_error($numdeltefiles.' '.__('files deleted on Racspase Cloud Container!','backwpup'),E_USER_NOTICE);
1184
+ }
1185
+ }
1186
+ } catch (Exception $e) {
1187
+ trigger_error(__('Rackspase Cloud API:','backwpup').' '.__($e->getMessage(),'backwpup'),E_USER_ERROR);
1188
+ }
1189
+ }
1190
+
1191
+
1192
  private function destination_dir() {
1193
  if (empty($this->job['backupdir'])) //Go back if no destination dir
1194
  return;
1214
  }
1215
  }
1216
  }
1217
+
1218
+ private function job_end() {
1219
+
1220
+ if ($filesize=filesize($this->backupdir.$this->backupfile))
 
 
1221
  trigger_error(sprintf(__('Backup Archive File size is %1s','backwpup'),backwpup_formatBytes($filesize)),E_USER_NOTICE);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1222
 
1223
  //delete old logs
1224
  if (!empty($this->cfg['maxlogs'])) {
1240
  trigger_error($numdeltefiles.' '.__('old Log files deleted!!!','backwpup'),E_USER_NOTICE);
1241
  }
1242
  }
1243
+
1244
  $jobs=get_option('backwpup_jobs');
1245
  $jobs[$this->jobid]['stoptime']=current_time('timestamp');
1246
  $jobs[$this->jobid]['lastrun']=$jobs[$this->jobid]['starttime'];
1247
  $jobs[$this->jobid]['lastruntime']=$jobs[$this->jobid]['stoptime']-$jobs[$this->jobid]['starttime'];
1248
+ $jobs[$this->jobid]['logfile']='';
1249
  update_option('backwpup_jobs',$jobs); //Save Settings
1250
+ $this->job['stoptime']=$jobs[$this->jobid]['stoptime'];
1251
+ $this->job['lastrun']=$jobs[$this->jobid]['lastrun'];
1252
+ $this->job['lastruntime']=$jobs[$this->jobid]['lastruntime'];
1253
+ trigger_error(sprintf(__('Job done in %1s sec.','backwpup'),$this->job['lastruntime']),E_USER_NOTICE);
1254
+
1255
+ }
1256
+
1257
+ public function __destruct() {
1258
+
1259
+ if (!($filesize=@filesize($this->backupdir.$this->backupfile))) //Set the filezie corectly
1260
+ $filesize=0;
1261
+
1262
+ //clean up
1263
+ if (is_file($this->tempdir.DB_NAME.'.sql') ) { //delete sql temp file
1264
+ unlink($this->tempdir.DB_NAME.'.sql');
1265
+ }
1266
+
1267
+ if (is_file($this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml') ) { //delete WP XML Export temp file
1268
+ unlink($this->tempdir.'wordpress.' . date( 'Y-m-d' ) . '.xml');
1269
+ }
1270
+
1271
+ if (empty($this->job['backupdir']) and is_file($this->backupdir.$this->backupfile)) { //delete backup file in temp dir
1272
+ unlink($this->backupdir.$this->backupfile);
1273
+ }
1274
 
1275
+ //write heder info
1276
+ $fd=@fopen($this->logdir.$this->logfile,"r+");
1277
  $found=0;
1278
  while (!feof($fd)) {
1279
  $line=@fgets($fd);
1280
  if (stripos($line,"<meta name=\"backwpup_jobruntime\"") !== false) {
1281
  @fseek($fd,$filepos);
1282
+ @fputs($fd,str_pad("<meta name=\"backwpup_jobruntime\" content=\"".$this->job['lastruntime']."\" />",100)."\n");
1283
  $found++;
1284
  }
1285
  if (stripos($line,"<meta name=\"backwpup_backupfilesize\"") !== false) {
1293
  }
1294
  @fclose($fd);
1295
  //logfile end
1296
+ $fd=fopen($this->logdir.$this->logfile,"a+");
1297
  fputs($fd,"</body>\n</html>\n");
1298
  fclose($fd);
1299
  restore_error_handler();
1300
+ $logdata=backwpup_read_logheader($this->logdir.$this->logfile);
1301
  //Send mail with log
1302
  $sendmail=false;
1303
  if ($logdata['errors']>0 and $this->job['mailerroronly'] and !empty($this->job['mailaddresslog']))
app/compatibility/list-table.php ADDED
@@ -0,0 +1,669 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Base class for displaying a list of items as an ajaxified html table
5
+ *
6
+ * @package WordPress
7
+ * @since 3.1.0
8
+ */
9
+ class WP_List_Table {
10
+
11
+ /**
12
+ * The current list of items
13
+ *
14
+ * @since 3.1.0
15
+ * @var array
16
+ * @access protected
17
+ */
18
+ var $items;
19
+
20
+ /**
21
+ * Various information about the current table
22
+ *
23
+ * @since 3.1.0
24
+ * @var array
25
+ * @access private
26
+ */
27
+ var $_args;
28
+
29
+ /**
30
+ * Various information needed for displaying the pagination
31
+ *
32
+ * @since 3.1.0
33
+ * @var array
34
+ * @access private
35
+ */
36
+ var $_pagination_args = array();
37
+
38
+ /**
39
+ * The current screen
40
+ *
41
+ * @since 3.1.0
42
+ * @var object
43
+ * @access private
44
+ */
45
+ var $_screen;
46
+
47
+ /**
48
+ * Cached bulk actions
49
+ *
50
+ * @since 3.1.0
51
+ * @var array
52
+ * @access private
53
+ */
54
+ var $_actions;
55
+
56
+ /**
57
+ * Cached pagination output
58
+ *
59
+ * @since 3.1.0
60
+ * @var string
61
+ * @access private
62
+ */
63
+ var $_pagination;
64
+
65
+ /**
66
+ * Constructor. The child class should call this constructor from it's own constructor
67
+ *
68
+ * @param array $args An associative array with information about the current table
69
+ * @access protected
70
+ */
71
+ function WP_List_Table( $args ) {
72
+
73
+ $args = wp_parse_args( $args, array(
74
+ 'screen' => '',
75
+ 'plural' => '',
76
+ 'singular' => '',
77
+ 'ajax' => false
78
+ ) );
79
+
80
+ $this->_screen = $args['screen'];
81
+
82
+ if ( is_string( $this->_screen ) )
83
+ $this->_screen = convert_to_screen( $this->_screen );
84
+
85
+ if ( !$args['plural'] )
86
+ $args['plural'] = $this->_screen->base;
87
+
88
+ $this->_args = $args;
89
+
90
+ if ( $args['ajax'] ) {
91
+ wp_enqueue_script( 'admin-table' );
92
+ add_action( 'admin_footer', array( $this, '_js_vars' ) );
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Checks the current user's permissions
98
+ * @uses wp_die()
99
+ *
100
+ * @since 3.1.0
101
+ * @access public
102
+ */
103
+ function check_permissions() {
104
+ die( 'function WP_List_Table::check_permissions() must be over-ridden in a sub-class.' );
105
+ }
106
+
107
+ /**
108
+ * Prepares the list of items for displaying.
109
+ * @uses WP_List_Table::set_pagination_args()
110
+ *
111
+ * @since 3.1.0
112
+ * @access public
113
+ */
114
+ function prepare_items() {
115
+ die( 'function WP_List_Table::prepare_items() must be over-ridden in a sub-class.' );
116
+ }
117
+
118
+ /**
119
+ * An internal method that sets all the necessary pagination arguments
120
+ *
121
+ * @param array $args An associative array with information about the pagination
122
+ * @access protected
123
+ */
124
+ function set_pagination_args( $args ) {
125
+ $args = wp_parse_args( $args, array(
126
+ 'query_var' => 'paged',
127
+ 'total_items' => 0,
128
+ 'total_pages' => 0,
129
+ 'per_page' => 0,
130
+ ) );
131
+
132
+ if ( !$args['total_pages'] && $args['per_page'] > 0 )
133
+ $args['total_pages'] = ceil( $args['total_items'] / $args['per_page'] );
134
+
135
+ $this->_pagination_args = $args;
136
+ }
137
+
138
+ /**
139
+ * Access the pagination args
140
+ *
141
+ * @since 3.1.0
142
+ * @access public
143
+ *
144
+ * @param string $key
145
+ * @return array
146
+ */
147
+ function get_pagination_arg( $key ) {
148
+ if ( 'page' == $key )
149
+ return $this->get_pagenum();
150
+
151
+ return @$this->_pagination_args[ $key ];
152
+ }
153
+
154
+ /**
155
+ * Wether the table has items to display or not
156
+ *
157
+ * @since 3.1.0
158
+ * @access public
159
+ *
160
+ * @return bool
161
+ */
162
+ function has_items() {
163
+ return !empty( $this->items );
164
+ }
165
+
166
+ /**
167
+ * Message to be displayed when there are no items
168
+ *
169
+ * @since 3.1.0
170
+ * @access public
171
+ */
172
+ function no_items() {
173
+ _e( 'No items found.' );
174
+ }
175
+
176
+ /**
177
+ * Get an associative array ( option_name => option_title ) with the list
178
+ * of bulk actions available on this table.
179
+ *
180
+ * @since 3.1.0
181
+ * @access protected
182
+ *
183
+ * @return array
184
+ */
185
+ function get_bulk_actions() {
186
+ return array();
187
+ }
188
+
189
+ /**
190
+ * Display the bulk actions dropdown.
191
+ *
192
+ * @since 3.1.0
193
+ * @access public
194
+ */
195
+ function bulk_actions() {
196
+
197
+ if ( is_null( $this->_actions ) ) {
198
+ $this->_actions = $this->get_bulk_actions();
199
+ $this->_actions = apply_filters( 'bulk_actions-' . $this->_screen->base, $this->_actions );
200
+ $two = '';
201
+ }
202
+ else {
203
+ $two = '2';
204
+ }
205
+
206
+ if ( empty( $this->_actions ) )
207
+ return;
208
+
209
+ echo "<select name='action$two'>\n";
210
+ echo "<option value='-1' selected='selected'>" . __( 'Bulk Actions' ) . "</option>\n";
211
+ foreach ( $this->_actions as $name => $title )
212
+ echo "\t<option value='$name'>$title</option>\n";
213
+ echo "</select>\n";
214
+
215
+ echo "<input type='submit' value='" . esc_attr__( 'Apply' ) . "' name='doaction$two' id='doaction$two' class='button-secondary action' />\n";
216
+ }
217
+
218
+ /**
219
+ * Display a monthly dropdown for filtering items
220
+ *
221
+ * @since 3.1.0
222
+ * @access protected
223
+ */
224
+ function months_dropdown( $post_type ) {
225
+ global $wpdb, $wp_locale;
226
+
227
+ $months = $wpdb->get_results( $wpdb->prepare( "
228
+ SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month
229
+ FROM $wpdb->posts
230
+ WHERE post_type = %s
231
+ ORDER BY post_date DESC
232
+ ", $post_type ) );
233
+
234
+ $month_count = count( $months );
235
+
236
+ if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) )
237
+ return;
238
+
239
+ $m = isset( $_GET['m'] ) ? (int) $_GET['m'] : 0;
240
+ ?>
241
+ <select name='m'>
242
+ <option<?php selected( $m, 0 ); ?> value='0'><?php _e( 'Show all dates' ); ?></option>
243
+ <?php
244
+ foreach ( $months as $arc_row ) {
245
+ if ( 0 == $arc_row->year )
246
+ continue;
247
+
248
+ $month = zeroise( $arc_row->month, 2 );
249
+ $year = $arc_row->year;
250
+
251
+ printf( "<option %s value='%s'>%s</option>\n",
252
+ selected( $m, $year . $month, false ),
253
+ esc_attr( $arc_row->year . $month ),
254
+ $wp_locale->get_month( $month ) . " $year"
255
+ );
256
+ }
257
+ ?>
258
+ </select>
259
+ <?php
260
+ }
261
+
262
+ /**
263
+ * Display a view switcher
264
+ *
265
+ * @since 3.1.0
266
+ * @access protected
267
+ */
268
+ function view_switcher( $current_mode ) {
269
+ $modes = array(
270
+ 'list' => __( 'List View' ),
271
+ 'excerpt' => __( 'Excerpt View' )
272
+ );
273
+
274
+ ?>
275
+ <input type="hidden" name="mode" value="<?php echo esc_attr( $current_mode ); ?>" />
276
+ <div class="view-switch">
277
+ <?php
278
+ foreach ( $modes as $mode => $title ) {
279
+ $class = ( $current_mode == $mode ) ? 'class="current"' : '';
280
+ echo "<a href='" . esc_url( add_query_arg( 'mode', $mode, $_SERVER['REQUEST_URI'] ) ) . "' $class><img id='view-switch-$mode' src='" . esc_url( includes_url( 'images/blank.gif' ) ) . "' width='20' height='20' title='$title' alt='$title' /></a>\n";
281
+ }
282
+ ?>
283
+ </div>
284
+ <?php
285
+ }
286
+
287
+ /**
288
+ * Display a comment count bubble
289
+ *
290
+ * @since 3.1.0
291
+ * @access protected
292
+ *
293
+ * @param int $post_id
294
+ * @param int $pending_comments
295
+ */
296
+ function comments_bubble( $post_id, $pending_comments ) {
297
+ $pending_phrase = sprintf( __( '%s pending' ), number_format( $pending_comments ) );
298
+
299
+ if ( $pending_comments )
300
+ echo '<strong>';
301
+
302
+ $link = "<a href='" . add_query_arg( 'p', $post_id, admin_url('edit-comments.php') ) . "' title='$pending_phrase' class='post-com-count'><span class='comment-count'>%s</span></a>";
303
+
304
+ comments_number(
305
+ sprintf( $link, /* translators: comment count link */ _x( '0', 'comment count' ) ),
306
+ sprintf( $link, /* translators: comment count link */ _x( '1', 'comment count' ) ),
307
+ sprintf( $link, /* translators: comment count link: % will be substituted by comment count */ _x( '%', 'comment count' ) )
308
+ );
309
+
310
+ if ( $pending_comments )
311
+ echo '</strong>';
312
+ }
313
+
314
+ /**
315
+ * Get the current page number
316
+ *
317
+ * @since 3.1.0
318
+ * @access protected
319
+ *
320
+ * @return int
321
+ */
322
+ function get_pagenum( $query_var = 'paged' ) {
323
+ $pagenum = isset( $_REQUEST[$query_var] ) ? absint( $_REQUEST[$query_var] ) : 0;
324
+
325
+ return max( 1, $pagenum );
326
+ }
327
+
328
+ /**
329
+ * Display the pagination.
330
+ *
331
+ * @since 3.1.0
332
+ * @access protected
333
+ */
334
+ function pagination() {
335
+ if ( $this->_pagination ) {
336
+ echo $this->_pagination;
337
+ return;
338
+ }
339
+
340
+ if ( empty( $this->_pagination_args ) )
341
+ return;
342
+
343
+ extract( $this->_pagination_args );
344
+
345
+ if ( $total_pages < 2 )
346
+ return;
347
+
348
+ $output = '<span class="displaying-num">' . sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ) . '</span>';
349
+
350
+ $current = $this->get_pagenum( $query_var );
351
+
352
+ $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
353
+
354
+ $page_links = array();
355
+
356
+ $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
357
+ 'first-page',
358
+ esc_attr__( 'Go to the first page' ),
359
+ esc_url( remove_query_arg( $query_var, $current_url ) ),
360
+ '&laquo;&laquo;'
361
+ );
362
+
363
+ $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
364
+ 'prev-page',
365
+ esc_attr__( 'Go to the previous page' ),
366
+ esc_url( add_query_arg( $query_var, max( 1, $current-1 ), $current_url ) ),
367
+ '&laquo;'
368
+ );
369
+
370
+ $html_current_page = sprintf( "<input class='current-page' title='%s' type='text' name='%s' value='%s' size='%d' />",
371
+ esc_attr__( 'Current page' ),
372
+ esc_attr( $query_var ),
373
+ number_format_i18n( $current ),
374
+ strlen( $total_pages )
375
+ );
376
+ $html_total_pages = sprintf( "<span class='total-pages'>%s</span>", number_format_i18n( $total_pages ) );
377
+ $page_links[] = sprintf( _x( '%s of %s', 'paging' ), $html_current_page, $html_total_pages );
378
+
379
+ $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
380
+ 'next-page',
381
+ esc_attr__( 'Go to the next page' ),
382
+ esc_url( add_query_arg( $query_var, min( $total_pages, $current+1 ), $current_url ) ),
383
+ '&raquo;'
384
+ );
385
+
386
+ $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
387
+ 'last-page',
388
+ esc_attr__( 'Go to the last page' ),
389
+ esc_url( add_query_arg( $query_var, $total_pages, $current_url ) ),
390
+ '&raquo;&raquo;'
391
+ );
392
+
393
+ $output .= join( "\n", $page_links );
394
+
395
+ $this->_pagination = "<div class='tablenav-pages'>$output</div>";
396
+
397
+ echo $this->_pagination;
398
+ }
399
+
400
+ /**
401
+ * Get a list of columns. The format is internal_name => title
402
+ *
403
+ * @since 3.1.0
404
+ * @access protected
405
+ *
406
+ * @return array
407
+ */
408
+ function get_columns() {
409
+ die( 'function WP_List_Table::get_columns() must be over-ridden in a sub-class.' );
410
+ }
411
+
412
+ /**
413
+ * Get a list of sortable columns. The format is internal_name => orderby
414
+ *
415
+ * @since 3.1.0
416
+ * @access protected
417
+ *
418
+ * @return array
419
+ */
420
+ function get_sortable_columns() {
421
+ return array();
422
+ }
423
+
424
+ /**
425
+ * Get a list of hidden columns.
426
+ *
427
+ * @since 3.1.0
428
+ * @access private
429
+ *
430
+ * @return array
431
+ */
432
+ function get_hidden_columns() {
433
+ return (array) get_user_option( 'manage' . $this->_screen->id. 'columnshidden' );
434
+ }
435
+
436
+ /**
437
+ * Get a list of all, hidden and sortable columns, with filter applied
438
+ *
439
+ * @since 3.1.0
440
+ * @access protected
441
+ *
442
+ * @return array
443
+ */
444
+ function get_column_headers() {
445
+ if ( !isset( $this->_column_headers ) ) {
446
+ $columns = apply_filters( 'manage_' . $this->_screen->id . '_columns', $this->get_columns() );
447
+ $sortable = apply_filters( 'manage_' . $this->_screen->id . '_sortable_columns', $this->get_sortable_columns() );
448
+ $hidden = $this->get_hidden_columns();
449
+
450
+ $this->_column_headers = array( $columns, $hidden, $sortable );
451
+ }
452
+
453
+ return $this->_column_headers;
454
+ }
455
+
456
+ /**
457
+ * Print column headers, accounting for hidden and sortable columns.
458
+ *
459
+ * @since 3.1.0
460
+ * @access protected
461
+ */
462
+ function print_column_headers( $with_id = true ) {
463
+ $screen = $this->_screen;
464
+
465
+ list( $columns, $hidden, $sortable ) = $this->get_column_headers();
466
+
467
+ $styles = array();
468
+
469
+ $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
470
+
471
+ if ( isset( $_GET['orderby'] ) )
472
+ $current_orderby = $_GET['orderby'];
473
+ else
474
+ $current_orderby = '';
475
+
476
+ if ( isset( $_GET['order'] ) && 'desc' == $_GET['order'] )
477
+ $current_order = 'desc';
478
+ else
479
+ $current_order = 'asc';
480
+
481
+ foreach ( $columns as $column_key => $column_display_name ) {
482
+ $class = array( 'manage-column', "column-$column_key" );
483
+
484
+ $style = '';
485
+ if ( in_array( $column_key, $hidden ) )
486
+ $style = 'display:none;';
487
+
488
+ if ( isset( $styles[$screen->id] ) && isset( $styles[$screen->id][$column_key] ) )
489
+ $style .= ' ' . $styles[$screen->id][$column_key];
490
+ $style = ' style="' . $style . '"';
491
+
492
+ if ( 'cb' == $column_key )
493
+ $class[] = 'check-column';
494
+ elseif ( in_array( $column_key, array( 'posts', 'comments', 'links' ) ) )
495
+ $class[] = 'num';
496
+
497
+ if ( isset( $sortable[$column_key] ) ) {
498
+ $orderby = $sortable[$column_key];
499
+ if ( $current_orderby == $orderby ) {
500
+ $order = 'asc' == $current_order ? 'desc' : 'asc';
501
+ $class[] = "sorted-$current_order";
502
+ } else {
503
+ $order = 'asc';
504
+ $class[] = 'sortable';
505
+ }
506
+ $column_display_name = '<a href="' . esc_url( add_query_arg( compact( 'orderby', 'order' ), $current_url ) ) . '">' . $column_display_name . '</a>';
507
+ $column_display_name .= '<div class="sorting-indicator"></div>';
508
+ }
509
+
510
+ $id = $with_id ? "id='$column_key'" : '';
511
+
512
+ if ( !empty( $class ) )
513
+ $class = "class='" . join( ' ', $class ) . "'";
514
+
515
+ echo "<th scope='col' $id $class $style>$column_display_name</th>";
516
+ }
517
+ }
518
+
519
+ /**
520
+ * Display the table or a message if there are no items
521
+ *
522
+ * @since 3.1.0
523
+ * @access public
524
+ */
525
+ function display() {
526
+ if ( $this->has_items() ) {
527
+ $this->display_table();
528
+ } else {
529
+ echo '<br class="clear">';
530
+ $this->extra_tablenav( 'top' );
531
+ echo '<br class="clear">';
532
+ echo '<p>';
533
+ $this->no_items();
534
+ echo '</p>';
535
+ }
536
+ }
537
+
538
+ /**
539
+ * Get a list of CSS classes for the <table> tag
540
+ *
541
+ * @since 3.1.0
542
+ * @access protected
543
+ *
544
+ * @return array
545
+ */
546
+ function get_table_classes() {
547
+ extract( $this->_args );
548
+
549
+ return array( 'widefat', 'fixed', $plural );
550
+ }
551
+
552
+ /**
553
+ * Display the full table
554
+ *
555
+ * @since 3.1.0
556
+ * @access public
557
+ */
558
+ function display_table() {
559
+ extract( $this->_args );
560
+
561
+ $this->display_tablenav( 'top' );
562
+
563
+ ?>
564
+ <table class="<?php echo implode( ' ', $this->get_table_classes() ); ?>" cellspacing="0">
565
+ <thead>
566
+ <tr>
567
+ <?php $this->print_column_headers(); ?>
568
+ </tr>
569
+ </thead>
570
+
571
+ <tfoot>
572
+ <tr>
573
+ <?php $this->print_column_headers( false ); ?>
574
+ </tr>
575
+ </tfoot>
576
+
577
+ <tbody id="the-list"<?php if ( $singular ) echo " class='list:$singular'"; ?>>
578
+ <?php $this->display_rows(); ?>
579
+ </tbody>
580
+ </table>
581
+ <?php
582
+
583
+ $this->display_tablenav( 'bottom' );
584
+ }
585
+
586
+ /**
587
+ * Generate the table navigation above or below the table
588
+ *
589
+ * @since 3.1.0
590
+ * @access protected
591
+ */
592
+ function display_tablenav( $which ) {
593
+ if ( 'top' == $which )
594
+ wp_nonce_field( 'bulk-' . $this->_args['plural'] );
595
+ ?>
596
+ <div class="tablenav">
597
+
598
+ <div class="alignleft actions">
599
+ <?php $this->bulk_actions( $which ); ?>
600
+ </div>
601
+
602
+ <?php
603
+ $this->extra_tablenav( $which );
604
+ $this->pagination( $which );
605
+ ?>
606
+
607
+ <br class="clear">
608
+ </div>
609
+
610
+ <br class="clear">
611
+ <?php
612
+ }
613
+
614
+ /**
615
+ * Extra controls to be displayed between bulk actions and pagination
616
+ *
617
+ * @since 3.1.0
618
+ * @access protected
619
+ */
620
+ function extra_tablenav( $which ) {}
621
+
622
+ /**
623
+ * Generate the <tbody> part of the table
624
+ *
625
+ * @since 3.1.0
626
+ * @access protected
627
+ */
628
+ function display_rows() {
629
+ die( 'function WP_List_Table::display_rows() must be over-ridden in a sub-class.' );
630
+ }
631
+
632
+ /**
633
+ * Handle an incoming ajax request ( called from admin-ajax.php )
634
+ *
635
+ * @access public
636
+ */
637
+ function ajax_response() {
638
+ $this->check_permissions();
639
+ $this->prepare_items();
640
+
641
+ extract( $this->_args );
642
+ extract( $this->_pagination_args );
643
+
644
+ ob_start();
645
+ $this->display_rows();
646
+ $rows = ob_get_clean();
647
+
648
+ die( json_encode( array(
649
+ 'rows' => $rows,
650
+ 'total_items' => sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ),
651
+ 'total_pages' => $total_pages
652
+ ) ) );
653
+ }
654
+
655
+ /**
656
+ * Send required variables to JavaScript land
657
+ *
658
+ * @access private
659
+ */
660
+ function _js_vars() {
661
+ extract( $this->_args );
662
+
663
+ $class = get_class( $this );
664
+
665
+ printf( "<script type='text/javascript'>list_args = %s;</script>\n",
666
+ json_encode( compact( 'screen', 'class' ) )
667
+ );
668
+ }
669
+ }
app/functions.php CHANGED
@@ -7,118 +7,192 @@ if ( !defined('ABSPATH') )
7
  function backwpup_menu_entry() {
8
  $hook = add_management_page(__('BackWPup','backwpup'), __('BackWPup','backwpup'), '10', 'BackWPup','backwpup_options_page') ;
9
  add_action('load-'.$hook, 'backwpup_options_load');
10
- add_contextual_help($hook,backwpup_show_help());
11
- switch($_REQUEST['action']) {
12
- case 'logs':
13
- case 'delete-logs':
14
- register_column_headers($hook,array('cb'=>'<input type="checkbox" />','id'=>__('Job','backwpup'),'type'=>__('Type','backwpup'),'log'=>__('Backup/Log Date/Time','backwpup'),'status'=>__('Status','backwpup'),'size'=>__('Size','backwpup'),'runtime'=>__('Runtime','backwpup')));
15
- break;
16
- case 'edit':
17
- break;
18
- case 'settings':
19
- break;
20
- case 'tools':
21
- break;
22
- case 'backups':
23
- case 'delete-backup':
24
- register_column_headers($hook,array('cb'=>'<input type="checkbox" />','id'=>__('Job','backwpup'),'backup'=>__('Backupfile','backwpup'),'size'=>__('Size','backwpup')));
25
- break;
26
- case 'runnow':
27
- add_action('load-'.$hook, 'backwpup_send_no_cache_header');
28
- add_action('admin_head-'.$hook, 'backwpup_meta_no_cache');
29
- break;
30
- case 'view_log':
31
- break;
32
- case 'delete':
33
- case 'copy':
34
- default:
35
- register_column_headers($hook,array('cb'=>'<input type="checkbox" />','id'=>__('ID','backwpup'),'jobname'=>__('Job Name','backwpup'),'type'=>__('Type','backwpup'),'next'=>__('Next Run','backwpup'),'last'=>__('Last Run','backwpup')));
36
- break;
37
- }
38
- }
39
-
40
- // Help too display
41
- function backwpup_show_help() {
42
- $help .= '<div class="metabox-prefs">';
43
- $help .= '<a href="http://wordpress.org/tags/backwpup" target="_blank">'.__('Support').'</a>';
44
- $help .= ' | <a href="http://wordpress.org/extend/plugins/backwpup/faq/" target="_blank">' . __('FAQ') . '</a>';
45
- $help .= ' | <a href="http://danielhuesken.de/portfolio/backwpup" target="_blank">' . __('Plugin Homepage', 'backwpup') . '</a>';
46
- $help .= ' | <a href="http://wordpress.org/extend/plugins/backwpup" target="_blank">' . __('Plugin Home on WordPress.org', 'backwpup') . '</a>';
47
- $help .= ' | <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=daniel%40huesken-net%2ede&amp;item_name=Daniel%20Huesken%20Plugin%20Donation&amp;item_number=BackWPup&amp;no_shipping=0&amp;no_note=1&amp;tax=0&amp;currency_code=EUR&amp;lc=DE&amp;bn=PP%2dDonationsBF&amp;charset=UTF%2d8" target="_blank">' . __('Donate') . '</a>';
48
- $help .= " | <script type=\"text/javascript\">
49
- var flattr_btn = 'compact';
50
- var flattr_url = 'http://danielhuesken.de/portfolio/backwpup/';
51
- </script><script src=\"http://api.flattr.com/button/load.js\" type=\"text/javascript\"></script>";
52
- $help .= "</div>\n";
53
- $help .= '<div class="metabox-prefs">';
54
- $help .= __('Version:', 'backwpup').' '.BACKWPUP_VERSION.' | ';
55
- $help .= __('Author:', 'backwpup').' <a href="http://danielhuesken.de" target="_blank">Daniel H&uuml;sken</a>';
56
- $help .= "</div>\n";
57
- return $help;
58
  }
59
 
60
  //Options Page
61
  function backwpup_options_page() {
62
- global $wpdb,$backwpup_message,$page_hook;
63
  if (!current_user_can(10))
64
  wp_die('No rights');
65
  if(!empty($backwpup_message))
66
  echo '<div id="message" class="updated fade"><p><strong>'.$backwpup_message.'</strong></p></div>';
67
- switch($_REQUEST['action']) {
68
  case 'edit':
69
- $jobs=get_option('backwpup_jobs');
70
- $jobid = (int) $_REQUEST['jobid'];
71
- check_admin_referer('edit-job');
72
- require_once(plugin_dir_path(__FILE__).'options-jobs.php');
73
  break;
74
  case 'logs':
75
- $cfg=get_option('backwpup');
76
- require_once(plugin_dir_path(__FILE__).'options-logs.php');
 
 
 
 
 
 
 
 
 
77
  break;
78
  case 'settings':
79
- $cfg=get_option('backwpup');
80
  require_once(plugin_dir_path(__FILE__).'options-settings.php');
81
  break;
82
  case 'tools':
83
  require_once(plugin_dir_path(__FILE__).'options-tools.php');
84
  break;
85
  case 'backups':
86
- require_once(plugin_dir_path(__FILE__).'options-backups.php');
 
 
 
 
 
 
 
 
 
 
87
  break;
88
  case 'runnow':
89
  $jobid = (int) $_GET['jobid'];
90
  check_admin_referer('runnow-job_' . $jobid);
91
  $jobs=get_option('backwpup_jobs');
92
- require_once(plugin_dir_path(__FILE__).'options-runnow.php');
 
 
 
 
 
 
 
93
  break;
94
  case 'view_log':
95
  check_admin_referer('view-log_'.basename($_GET['logfile']));
96
- require_once(plugin_dir_path(__FILE__).'options-view_log.php');
 
 
 
 
 
 
 
97
  break;
98
  default:
99
- $jobs=get_option('backwpup_jobs');
100
- require_once(plugin_dir_path(__FILE__).'options.php');
 
 
 
 
 
 
 
 
 
101
  break;
102
  }
103
  }
104
 
105
  //Options Page
106
  function backwpup_options_load() {
107
- global $wpdb,$backwpup_message;
 
108
  if (!current_user_can(10))
109
  wp_die('No rights');
110
  //Css for Admin Section
111
  wp_enqueue_style('BackWpup',plugins_url('css/options.css',__FILE__),'',BACKWPUP_VERSION,'screen');
112
  wp_enqueue_script('BackWpupOptions',plugins_url('js/options.js',__FILE__),'',BACKWPUP_VERSION,true);
113
- //For save Options
114
- require_once(plugin_dir_path(__FILE__).'options-save.php');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  }
116
 
117
- //delete Otions
118
- function backwpup_plugin_uninstall() {
119
- delete_option('backwpup');
120
- delete_option('backwpup_jobs');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
  }
 
122
 
123
  //Checking,upgrade and default job setting
124
  function backwpup_check_job_vars($jobsettings) {
@@ -141,18 +215,25 @@ if ( !defined('ABSPATH') )
141
  if (!isset($jobsettings['activated']) or !is_bool($jobsettings['activated']))
142
  $jobsettings['activated']=false;
143
 
144
- if (!isset($jobsettings['scheduletime']) or !is_numeric($jobsettings['scheduletime']))
145
- $jobsettings['scheduletime']=current_time('timestamp');
146
-
147
- if (!isset($jobsettings['scheduleintervaltype']) or !is_int($jobsettings['scheduleintervaltype']))
148
- $jobsettings['scheduleintervaltype']=3600;
149
- if ($jobsettings['scheduleintervaltype']!=60 and $jobsettings['scheduleintervaltype']!=3600 and $jobsettings['scheduleintervaltype']!=86400)
150
- $jobsettings['scheduleintervaltype']=3600;
 
 
 
 
 
 
151
 
152
- if (!isset($jobsettings['scheduleintervalteimes']) or !is_int($jobsettings['scheduleintervalteimes']) or ($jobsettings['scheduleintervalteimes']<1 and $jobsettings['scheduleintervalteimes']>100))
153
- $jobsettings['scheduleintervalteimes']=1;
154
 
155
- $jobsettings['scheduleinterval']=$jobsettings['scheduleintervaltype']*$jobsettings['scheduleintervalteimes'];
 
156
 
157
  if (!is_string($jobsettings['mailaddresslog']) or false === $pos=strpos($jobsettings['mailaddresslog'],'@') or false === strpos($jobsettings['mailaddresslog'],'.',$pos))
158
  $jobsettings['mailaddresslog']=get_option('admin_email');
@@ -308,6 +389,9 @@ if ( !defined('ABSPATH') )
308
  if (!isset($jobsettings['awsSSL']) or !is_bool($jobsettings['awsSSL']))
309
  $jobsettings['awsSSL']=true;
310
 
 
 
 
311
  if (!isset($jobsettings['awsBucket']) or !is_string($jobsettings['awsBucket']))
312
  $jobsettings['awsBucket']='';
313
 
@@ -320,6 +404,24 @@ if ( !defined('ABSPATH') )
320
  if (!isset($jobsettings['awsmaxbackups']) or !is_int($jobsettings['awsmaxbackups']))
321
  $jobsettings['awsmaxbackups']=0;
322
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
323
  if (!is_string($jobsettings['mailaddress']) or false === $pos=strpos($jobsettings['mailaddress'],'@') or false === strpos($jobsettings['mailaddress'],'.',$pos))
324
  $jobsettings['mailaddress']='';
325
 
@@ -329,14 +431,18 @@ if ( !defined('ABSPATH') )
329
 
330
  //On Plugin activate
331
  function backwpup_plugin_activate() {
332
- //add cron jobs
333
  $jobs=get_option('backwpup_jobs');
334
  if (is_array($jobs)) {
335
  foreach ($jobs as $jobid => $jobvalue) {
336
- if ($jobvalue['activated'] and wp_get_schedule('backwpup_cron',array('jobid'=>$jobid)) === false)
337
- wp_schedule_event($jobvalue['scheduletime'], 'backwpup_int_'.$jobid, 'backwpup_cron',array('jobid'=>$jobid));
 
338
  }
339
  }
 
 
 
340
  //Set defaults
341
  $cfg=get_option('backwpup'); //Load Settings
342
  if (empty($cfg['mailsndemail'])) $cfg['mailsndemail']=sanitize_email(get_bloginfo( 'admin_email' ));
@@ -357,8 +463,15 @@ if ( !defined('ABSPATH') )
357
 
358
  //on Plugin deaktivate
359
  function backwpup_plugin_deactivate() {
360
- //remove cron jobs
361
  $jobs=get_option('backwpup_jobs');
 
 
 
 
 
 
 
362
  wp_clear_scheduled_hook('backwpup_cron');
363
  }
364
 
@@ -381,25 +494,27 @@ if ( !defined('ABSPATH') )
381
 
382
  //Add cron interval
383
  function backwpup_intervals($schedules) {
384
- $jobs=get_option('backwpup_jobs'); //Load Settings
385
- if (is_array($jobs)) {
386
- foreach ($jobs as $jobkey => $jobvalue) {
387
- if (!empty($jobvalue['scheduleinterval']))
388
- $intervals['backwpup_int_'.$jobkey]=array('interval' => $jobvalue['scheduleinterval'], 'display' => __('BackWPup Job '.$jobkey, 'backwpup'));
 
 
 
 
 
 
 
 
 
389
  }
390
- if (is_array($intervals))
391
- $schedules=array_merge($intervals,$schedules);
392
  }
393
- return $schedules;
394
  }
395
 
396
  //DoJob
397
- function backwpup_dojob($args) {
398
  global $backwpup_logfile;
399
- if (is_array($args)) //cron gifes no complete array back!!!
400
- extract($args, EXTR_SKIP );
401
- else
402
- $jobid=$args;
403
  if (empty($jobid))
404
  return false;
405
  require_once('backwpup_dojob.php');
@@ -454,7 +569,7 @@ if ( !defined('ABSPATH') )
454
 
455
  //read log file header
456
  function backwpup_read_logheader($logfile) {
457
- $headers=array("backwpup_version" => "version","backwpup_logtime" => "logtime","backwpup_errors" => "errors","backwpup_warnings" => "warnings","backwpup_jobid" => "jobid","backwpup_jobname" => "name","backwpup_jobtype" => "type","backwpup_jobruntime" => "runtime","backwpup_backupfile" => "backupfile","backwpup_backupfilesize" => "backupfilesize");
458
  if (!is_readable($logfile))
459
  return false;
460
  //Read file
@@ -524,13 +639,13 @@ if ( !defined('ABSPATH') )
524
  echo '<strong>'.__('Scheduled Jobs:','backwpup').'</strong><br />';
525
  if (is_array($jobs)) {
526
  foreach ($jobs as $jobid => $jobvalue) {
527
- if (wp_next_scheduled('backwpup_cron',array('jobid'=>$jobid))) {
528
  echo '<a href="'.wp_nonce_url('admin.php?page=BackWPup&action=edit&jobid='.$jobid, 'edit-job').'" title="'.__('Edit Job','backwpup').'">';
529
  if ($jobvalue['starttime']>0 and empty($jobvalue['stoptime'])) {
530
  $runtime=current_time('timestamp')-$jobvalue['starttime'];
531
  echo __('Running since:','backwpup').' '.$runtime.' '.__('sec.','backwpup');
532
- } elseif ($time=wp_next_scheduled('backwpup_cron',array('jobid'=>$jobid))) {
533
- echo date_i18n(get_option('date_format'),$time).' '.date_i18n(get_option('time_format'),$time);
534
  }
535
  echo ': <span>'.$jobvalue['name'].'</span></a><br />';
536
  }
@@ -617,71 +732,102 @@ if ( !defined('ABSPATH') )
617
  $jobs=get_option('backwpup_jobs'); //Load jobs
618
  $filecounter=0;
619
  $files=array();
 
620
  if (extension_loaded('curl') or @dl(PHP_SHLIB_SUFFIX == 'so' ? 'curl.so' : 'php_curl.dll')) {
621
- if (!class_exists('S3'))
622
- require_once(plugin_dir_path(__FILE__).'libs/S3.php');
 
 
623
  }
624
-
625
  if (!is_array($jobs)) //return is Jobs empty
626
  return false;
627
-
628
  foreach ($jobs as $jobid => $jobvalue) { //go job by job
629
  $jobvalue=backwpup_check_job_vars($jobvalue); //Check job values
630
  $todo=explode('+',$jobvalue['type']); //only for backup jobs
631
  if (!in_array('FILE',$todo) and !in_array('DB',$todo) and !in_array('WPEXP',$todo))
632
  continue;
633
-
634
  //Get files/filinfo in backup folder
635
- if (!empty($jobvalue['backupdir'])) {
636
  if ( $dir = @opendir( $jobvalue['backupdir'] ) ) {
637
  while (($file = readdir( $dir ) ) !== false ) {
638
- if (substr($file,0,1)=='.' or strtolower(substr($file,-4))=='.zip' or !(strtolower(substr($file,-4))=='.tar' or strtolower(substr($file,-7))=='.tar.gz' or strtolower(substr($file,-4))=='.tar.bz2'))
639
  continue;
640
  if (is_file($jobvalue['backupdir'].$file)) {
641
  $files[$filecounter]['type']='FOLDER';
642
  $files[$filecounter]['jobid']=$jobid;
643
  $files[$filecounter]['file']=$jobvalue['backupdir'].$file;
644
  $files[$filecounter]['filename']=$file;
645
- $files[$filecounter]['downloadurl']=wp_nonce_url('admin.php?page=BackWPup&action=download&file='.$jobvalue['backupdir'].$file, 'download-backup_'.$file);
646
  $files[$filecounter]['filesize']=filesize($jobvalue['backupdir'].$file);
647
  $files[$filecounter]['time']=filemtime($jobvalue['backupdir'].$file);
648
  $filecounter++;
649
  }
650
  }
651
  closedir( $dir );
 
652
  }
653
  }
654
  //Get files/filinfo from S3
655
- if (class_exists('S3')) {
656
  if (!empty($jobvalue['awsAccessKey']) and !empty($jobvalue['awsSecretKey']) and !empty($jobvalue['awsBucket'])) {
657
  $s3 = new S3($jobvalue['awsAccessKey'], $jobvalue['awsSecretKey'], $jobvalue['awsSSL']);
658
  if (($contents = $s3->getBucket($jobvalue['awsBucket'],$jobvalue['awsdir'])) !== false) {
659
  foreach ($contents as $object) {
660
- if (strtolower(substr($object['name'],-4))=='.zip' or strtolower(substr($object['name'],-4))=='.tar' or strtolower(substr($object['name'],-7))=='.tar.gz' or strtolower(substr($object['name'],-4))=='.tar.bz2') {
661
  $files[$filecounter]['type']='S3';
662
  $files[$filecounter]['jobid']=$jobid;
663
  $files[$filecounter]['file']=$object['name'];
664
  $files[$filecounter]['filename']=basename($object['name']);
665
- $files[$filecounter]['downloadurl']=wp_nonce_url('admin.php?page=BackWPup&action=downloads3&file='.$object['name'].'&jobid='.$jobid, 'downloads3-backup_'.$object['name']);
666
  $files[$filecounter]['filesize']=$object['size'];
667
  $files[$filecounter]['time']=$object['time'];
668
  $filecounter++;
669
  }
670
  }
671
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
672
  }
673
  }
674
  //Get files/filinfo from FTP
675
- if (!empty($jobvalue['ftphost']) and !empty($jobvalue['ftpuser']) and !empty($jobvalue['ftppass'])) {
676
  $ftpport=21;
677
  $ftphost=$jobvalue['ftphost'];
678
  if (false !== strpos($jobvalue['ftphost'],':')) //look for port
679
  list($ftphost,$ftpport)=explode(':',$jobvalue,2);
680
-
681
  $SSL=false;
682
  if (function_exists('ftp_ssl_connect')) { //make SSL FTP connection
683
  $ftp_conn_id = ftp_ssl_connect($ftphost,$ftpport,10);
684
- if ($ftp_conn_id)
685
  $SSL=true;
686
  }
687
  if (!$ftp_conn_id) { //make normal FTP conection if SSL not work
@@ -704,7 +850,7 @@ if ( !defined('ABSPATH') )
704
  ftp_pasv($ftp_conn_id, true);
705
  if ($ftpfilelist=ftp_nlist($ftp_conn_id, $jobvalue['ftpdir'])) {
706
  foreach($ftpfilelist as $ftpfiles) {
707
- if (basename($ftpfiles)=='.' or basename($ftpfiles)=='..' or substr(basename($ftpfiles),0,1)=='.' or !(strtolower(substr($ftpfiles,-4))=='.zip' or strtolower(substr($ftpfiles,-4))=='.tar' or strtolower(substr($ftpfiles,-7))=='.tar.gz' or strtolower(substr($ftpfiles,-4))=='.tar.bz2'))
708
  continue;
709
  $files[$filecounter]['type']='FTP';
710
  $files[$filecounter]['jobid']=$jobid;
@@ -712,16 +858,21 @@ if ( !defined('ABSPATH') )
712
  $files[$filecounter]['filename']=basename($ftpfiles);
713
  $files[$filecounter]['downloadurl']="ftp://".$jobvalue['ftpuser'].":".base64_decode($jobvalue['ftppass'])."@".$jobvalue['ftphost'].$ftpfiles;
714
  $files[$filecounter]['filesize']=ftp_size($ftp_conn_id,$ftpfiles);
715
- $filecounter++;
 
 
 
 
716
  }
717
  }
718
  }
 
719
  }
720
  }
721
  //Sort list
722
- $tmp = Array();
723
- foreach($files as &$ma)
724
- $tmp[] = &$ma["filename"];
725
  array_multisort($tmp, SORT_DESC, $files);
726
  return $files;
727
  }
@@ -734,35 +885,282 @@ if ( !defined('ABSPATH') )
734
  } else {
735
  $awsAccessKey=$_POST['awsAccessKey'];
736
  $awsSecretKey=$_POST['awsSecretKey'];
737
- $selected=$_POST['selected'];
738
  $ajax=true;
739
  }
740
- require_once(plugin_dir_path(__FILE__).'libs/S3.php');
 
741
  if (empty($awsAccessKey)) {
742
  echo '<span id="awsBucket" style="color:red;">'.__('Missing Access Key ID!','backwpup').'</span>';
743
- die();
 
 
 
744
  }
745
  if (empty($awsSecretKey)) {
746
  echo '<span id="awsBucket" style="color:red;">'.__('Missing Secret Access Key!','backwpup').'</span>';
747
- die();
 
 
 
748
  }
749
  $s3 = new S3($awsAccessKey, $awsSecretKey, false);
750
  $buckets=@$s3->listBuckets();
751
  if (!is_array($buckets)) {
752
  echo '<span id="awsBucket" style="color:red;">'.__('No Buckets found! Or wrong Keys!','backwpup').'</span>';
753
- die();
 
 
 
754
  }
755
  echo '<select name="awsBucket" id="awsBucket">';
756
  foreach ($buckets as $bucket) {
757
- echo "<option ".selected(strtolower($selected),strtolower($bucket),false).">".$bucket."</option>";
758
  }
759
  echo '</select>';
760
  if ($ajax)
761
  die();
 
 
762
  }
763
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
764
  // add all action and so on only if plugin loaded.
765
  function backwpup_init() {
 
 
766
  //Disabele WP_Corn
767
  $cfg=get_option('backwpup');
768
  if ($cfg['disablewpcron'])
@@ -777,12 +1175,18 @@ if ( !defined('ABSPATH') )
777
  //add cron intervals
778
  add_filter('cron_schedules', 'backwpup_intervals');
779
  //Actions for Cron job
780
- add_action('backwpup_cron', 'backwpup_dojob');
 
 
 
781
  //add Dashboard widget
782
  if (current_user_can(10))
783
  add_action('wp_dashboard_setup', 'backwpup_add_dashboard');
784
  // add ajax function
785
  add_action('wp_ajax_backwpup_get_aws_buckets', 'backwpup_get_aws_buckets');
 
 
 
786
  }
787
 
788
  ?>
7
  function backwpup_menu_entry() {
8
  $hook = add_management_page(__('BackWPup','backwpup'), __('BackWPup','backwpup'), '10', 'BackWPup','backwpup_options_page') ;
9
  add_action('load-'.$hook, 'backwpup_options_load');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  }
11
 
12
  //Options Page
13
  function backwpup_options_page() {
14
+ global $table,$backwpup_message,$page_hook;
15
  if (!current_user_can(10))
16
  wp_die('No rights');
17
  if(!empty($backwpup_message))
18
  echo '<div id="message" class="updated fade"><p><strong>'.$backwpup_message.'</strong></p></div>';
19
+ switch($_REQUEST['subpage']) {
20
  case 'edit':
21
+ require_once(plugin_dir_path(__FILE__).'options-edit-job.php');
 
 
 
22
  break;
23
  case 'logs':
24
+ echo "<div class=\"wrap\">";
25
+ echo "<div id=\"icon-tools\" class=\"icon32\"><br /></div>";
26
+ echo "<h2>".__('BackWPup Logs', 'backwpup')."</h2>";
27
+ backwpup_option_submenues();
28
+ echo "<form id=\"posts-filter\" action=\"\" method=\"post\">";
29
+ echo "<input type=\"hidden\" name=\"page\" value=\"BackWPup\" />";
30
+ echo "<input type=\"hidden\" name=\"subpage\" value=\"logs\" />";
31
+ $table->display();
32
+ echo "<div id=\"ajax-response\"></div>";
33
+ echo "</form>";
34
+ echo "</div>";
35
  break;
36
  case 'settings':
 
37
  require_once(plugin_dir_path(__FILE__).'options-settings.php');
38
  break;
39
  case 'tools':
40
  require_once(plugin_dir_path(__FILE__).'options-tools.php');
41
  break;
42
  case 'backups':
43
+ echo "<div class=\"wrap\">";
44
+ echo "<div id=\"icon-tools\" class=\"icon32\"><br /></div>";
45
+ echo "<h2>".__('BackWPup Manage Backups', 'backwpup')."</h2>";
46
+ backwpup_option_submenues();
47
+ echo "<form id=\"posts-filter\" action=\"\" method=\"post\">";
48
+ echo "<input type=\"hidden\" name=\"page\" value=\"BackWPup\" />";
49
+ echo "<input type=\"hidden\" name=\"subpage\" value=\"backups\" />";
50
+ $table->display();
51
+ echo "<div id=\"ajax-response\"></div>";
52
+ echo "</form>";
53
+ echo "</div>";
54
  break;
55
  case 'runnow':
56
  $jobid = (int) $_GET['jobid'];
57
  check_admin_referer('runnow-job_' . $jobid);
58
  $jobs=get_option('backwpup_jobs');
59
+ echo "<div class=\"wrap\">";
60
+ echo "<div id=\"icon-tools\" class=\"icon32\"><br /></div>";
61
+ echo "<h2>".__('BackWPup Job Running', 'backwpup')."</h2>";
62
+ backwpup_option_submenues();
63
+ echo "<br class=\"clear\" />";
64
+ echo "<big>".__('Running Job','backwpup')." <strong>".$jobs[$jobid]['name']."</strong></big>";
65
+ echo "<iframe src=\"".wp_nonce_url(plugins_url('options-runnow-iframe.php',__FILE__).'?wpabs='.trailingslashit(ABSPATH).'&jobid=' . $jobid, 'dojob-now_' . $jobid)."\" name=\"runframe\" id=\"runframe\" width=\"100%\" height=\"450\" align=\"left\" scrolling=\"auto\" style=\"border: 1px solid gray\" frameborder=\"0\"></iframe>";
66
+ echo "</div>";
67
  break;
68
  case 'view_log':
69
  check_admin_referer('view-log_'.basename($_GET['logfile']));
70
+ echo "<div class=\"wrap\">";
71
+ echo "<div id=\"icon-tools\" class=\"icon32\"><br /></div>";
72
+ echo "<h2>".__('BackWPup View Logs', 'backwpup')."</h2>";
73
+ backwpup_option_submenues();
74
+ echo "<br class=\"clear\" />";
75
+ echo "<big>".__('View Log','backwpup')." <strong>".basename($_GET['logfile'])."</strong></big>";
76
+ echo "<iframe src=\"".wp_nonce_url(plugins_url('options-view_log-iframe.php',__FILE__).'?wpabs='.trailingslashit(ABSPATH).'&logfile=' . $_GET['logfile'], 'viewlognow_'.basename($_GET['logfile']))."\" name=\"logframe\" id=\"logframe\" width=\"100%\" height=\"450\" align=\"left\" scrolling=\"auto\" style=\"border: 1px solid gray\" frameborder=\"0\"></iframe>";
77
+ echo "</div>";
78
  break;
79
  default:
80
+ echo "<div class=\"wrap\">";
81
+ echo "<div id=\"icon-tools\" class=\"icon32\"><br /></div>";
82
+ echo "<h2>".__('BackWPup', 'backwpup')."&nbsp;<a href=\"".wp_nonce_url('admin.php?page=BackWPup&subpage=edit&jobid=0', 'edit-job')."\" class=\"button add-new-h2\">".esc_html__('Add New')."</a></h2>";
83
+ backwpup_option_submenues();
84
+ echo "<form id=\"posts-filter\" action=\"\" method=\"post\">";
85
+ echo "<input type=\"hidden\" name=\"page\" value=\"BackWPup\" />";
86
+ echo "<input type=\"hidden\" name=\"subpage\" value=\"\" />";
87
+ $table->display();
88
+ echo "<div id=\"ajax-response\"></div>";
89
+ echo "</form>";
90
+ echo "</div>";
91
  break;
92
  }
93
  }
94
 
95
  //Options Page
96
  function backwpup_options_load() {
97
+ global $current_screen,$table,$backwpup_message;
98
+
99
  if (!current_user_can(10))
100
  wp_die('No rights');
101
  //Css for Admin Section
102
  wp_enqueue_style('BackWpup',plugins_url('css/options.css',__FILE__),'',BACKWPUP_VERSION,'screen');
103
  wp_enqueue_script('BackWpupOptions',plugins_url('js/options.js',__FILE__),'',BACKWPUP_VERSION,true);
104
+ add_contextual_help($current_screen,
105
+ '<div class="metabox-prefs">'.
106
+ '<a href="http://wordpress.org/tags/backwpup" target="_blank">'.__('Support').'</a>'.
107
+ ' | <a href="http://wordpress.org/extend/plugins/backwpup/faq/" target="_blank">' . __('FAQ') . '</a>'.
108
+ ' | <a href="http://danielhuesken.de/portfolio/backwpup" target="_blank">' . __('Plugin Homepage', 'backwpup') . '</a>'.
109
+ ' | <a href="http://wordpress.org/extend/plugins/backwpup" target="_blank">' . __('Plugin Home on WordPress.org', 'backwpup') . '</a>'.
110
+ ' | <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=daniel%40huesken-net%2ede&amp;item_name=Daniel%20Huesken%20Plugin%20Donation&amp;item_number=BackWPup&amp;no_shipping=0&amp;no_note=1&amp;tax=0&amp;currency_code=EUR&amp;lc=DE&amp;bn=PP%2dDonationsBF&amp;charset=UTF%2d8" target="_blank">' . __('Donate') . '</a>'.
111
+ ' | <script type="text/javascript">
112
+ var flattr_btn = \'compact\'
113
+ var flattr_url = \'http://danielhuesken.de/portfolio/backwpup/\'
114
+ </script><script src="http://api.flattr.com/button/load.js" type="text/javascript"></script>'.
115
+ '</div>'.
116
+ '<div class="metabox-prefs">'.
117
+ __('Version:', 'backwpup').' '.BACKWPUP_VERSION.' | '.
118
+ __('Author:', 'backwpup').' <a href="http://danielhuesken.de" target="_blank">Daniel H&uuml;sken</a>'.
119
+ '</div>'
120
+ );
121
+
122
+ if ($_REQUEST['action2']!='-1' and !empty($_REQUEST['doaction2']))
123
+ $_REQUEST['action']=$_REQUEST['action2'];
124
+
125
+ switch($_REQUEST['subpage']) {
126
+ case 'logs':
127
+ if (!empty($_REQUEST['action'])) {
128
+ require_once('options-save.php');
129
+ backwpup_log_operations($_REQUEST['action']);
130
+ }
131
+ $table = new BackWPup_Logs_Table;
132
+ $table->check_permissions();
133
+ $table->prepare_items();
134
+ break;
135
+ case 'edit':
136
+ if (!empty($_POST['submit'])) {
137
+ require_once('options-save.php');
138
+ $backwpup_message=backwpup_save_job();
139
+ }
140
+ break;
141
+ case 'settings':
142
+ if (!empty($_POST['submit'])) {
143
+ require_once('options-save.php');
144
+ $backwpup_message=backwpup_save_settings();
145
+ }
146
+ break;
147
+ case 'tools':
148
+ break;
149
+ case 'backups':
150
+ if (!empty($_REQUEST['action'])) {
151
+ require_once('options-save.php');
152
+ backwpup_backups_operations($_REQUEST['action']);
153
+ }
154
+ $table = new BackWPup_Backups_Table;
155
+ $table->check_permissions();
156
+ $table->prepare_items();
157
+ break;
158
+ case 'runnow':
159
+ break;
160
+ case 'view_log':
161
+ break;
162
+ default:
163
+ if (!empty($_REQUEST['action'])) {
164
+ require_once('options-save.php');
165
+ backwpup_job_operations($_REQUEST['action']);
166
+ }
167
+ $table = new BackWPup_Jobs_Table;
168
+ $table->check_permissions();
169
+ $table->prepare_items();
170
+ break;
171
+ }
172
  }
173
 
174
+
175
+ function backwpup_option_submenues() {
176
+ $maincurrent="";$logscurrent="";$backupscurrent="";$toolscurrent="";$settingscurrent="";
177
+ if (empty($_REQUEST['subpage']))
178
+ $maincurrent=" class=\"current\"";
179
+ if ($_REQUEST['subpage']=='logs')
180
+ $logscurrent=" class=\"current\"";
181
+ if ($_REQUEST['subpage']=='backups')
182
+ $backupscurrent=" class=\"current\"";
183
+ if ($_REQUEST['subpage']=='tools')
184
+ $toolscurrent=" class=\"current\"";
185
+ if ($_REQUEST['subpage']=='settings')
186
+ $settingscurrent=" class=\"current\"";
187
+ echo "<ul class=\"subsubsub\">";
188
+ echo "<li><a href=\"admin.php?page=BackWPup\"$maincurrent>".__('Jobs','backwpup')."</a> |</li>";
189
+ echo "<li><a href=\"admin.php?page=BackWPup&amp;subpage=logs\"$logscurrent>".__('Logs','backwpup')."</a> |</li>";
190
+ echo "<li><a href=\"admin.php?page=BackWPup&amp;subpage=backups\"$backupscurrent>".__('Backups','backwpup')."</a> |</li>";
191
+ echo "<li><a href=\"admin.php?page=BackWPup&amp;subpage=tools\"$toolscurrent>".__('Tools','backwpup')."</a> |</li>";
192
+ echo "<li><a href=\"admin.php?page=BackWPup&amp;subpage=settings\"$settingscurrent>".__('Settings','backwpup')."</a></li>";
193
+ echo "</ul>";
194
  }
195
+
196
 
197
  //Checking,upgrade and default job setting
198
  function backwpup_check_job_vars($jobsettings) {
215
  if (!isset($jobsettings['activated']) or !is_bool($jobsettings['activated']))
216
  $jobsettings['activated']=false;
217
 
218
+ //upgrade ode schedule
219
+ if (!isset($jobsettings['cron']) and isset($jobsettings['scheduletime']) and isset($jobsettings['scheduleintervaltype']) and isset($jobsettings['scheduleintervalteimes'])) { //Upgrade to cron string
220
+ if ($jobsettings['scheduleintervaltype']==60) { //Min
221
+ $jobsettings['cron']='*/'.$jobsettings['scheduleintervalteimes'].' * * * *';
222
+ }
223
+ if ($jobsettings['scheduleintervaltype']==3600) { //Houer
224
+ $jobsettings['cron']=(date('i',$jobsettings['scheduletime'])*1).' */'.$jobsettings['scheduleintervalteimes'].' * * *';
225
+ }
226
+ if ($jobsettings['scheduleintervaltype']==86400) { //Days
227
+ $jobsettings['cron']=(date('i',$jobsettings['scheduletime'])*1).' '.date('G',$jobsettings['scheduletime']).' */'.$jobsettings['scheduleintervalteimes'].' * *';
228
+ }
229
+ $jobsettings['cronnextrun']=backwpup_cron_next($jobsettings['cron']);
230
+ }
231
 
232
+ if (!isset($jobsettings['cron']) or !is_string($jobsettings['cron']))
233
+ $jobsettings['cron']='0 3 * * *';
234
 
235
+ if (!isset($jobsettings['cronnextrun']) or !is_numeric($jobsettings['cronnextrun']))
236
+ $jobsettings['cronnextrun']=backwpup_cron_next($jobsettings['cron']);
237
 
238
  if (!is_string($jobsettings['mailaddresslog']) or false === $pos=strpos($jobsettings['mailaddresslog'],'@') or false === strpos($jobsettings['mailaddresslog'],'.',$pos))
239
  $jobsettings['mailaddresslog']=get_option('admin_email');
389
  if (!isset($jobsettings['awsSSL']) or !is_bool($jobsettings['awsSSL']))
390
  $jobsettings['awsSSL']=true;
391
 
392
+ if (!isset($jobsettings['awsrrs']) or !is_bool($jobsettings['awsrrs']))
393
+ $jobsettings['awsrrs']=false;
394
+
395
  if (!isset($jobsettings['awsBucket']) or !is_string($jobsettings['awsBucket']))
396
  $jobsettings['awsBucket']='';
397
 
404
  if (!isset($jobsettings['awsmaxbackups']) or !is_int($jobsettings['awsmaxbackups']))
405
  $jobsettings['awsmaxbackups']=0;
406
 
407
+ if (!isset($jobsettings['rscUsername']) or !is_string($jobsettings['rscUsername']))
408
+ $jobsettings['rscUsername']='';
409
+
410
+ if (!isset($jobsettings['rscAPIKey']) or !is_string($jobsettings['rscAPIKey']))
411
+ $jobsettings['rscAPIKey']='';
412
+
413
+ if (!isset($jobsettings['rscContainer']) or !is_string($jobsettings['rscContainer']))
414
+ $jobsettings['rscContainer']='';
415
+
416
+ if (!isset($jobsettings['rscdir']) or !is_string($jobsettings['rscdir']) or $jobsettings['rscdir']=='/')
417
+ $jobsettings['rscdir']='';
418
+ $jobsettings['rscdir']=trailingslashit(str_replace('//','/',str_replace('\\','/',trim($jobsettings['rscdir']))));
419
+ if (substr($jobsettings['rscdir'],0,1)=='/')
420
+ $jobsettings['rscdir']=substr($jobsettings['rscdir'],1);
421
+
422
+ if (!isset($jobsettings['rscmaxbackups']) or !is_int($jobsettings['rscmaxbackups']))
423
+ $jobsettings['rscmaxbackups']=0;
424
+
425
  if (!is_string($jobsettings['mailaddress']) or false === $pos=strpos($jobsettings['mailaddress'],'@') or false === strpos($jobsettings['mailaddress'],'.',$pos))
426
  $jobsettings['mailaddress']='';
427
 
431
 
432
  //On Plugin activate
433
  function backwpup_plugin_activate() {
434
+ //remove old cron jobs
435
  $jobs=get_option('backwpup_jobs');
436
  if (is_array($jobs)) {
437
  foreach ($jobs as $jobid => $jobvalue) {
438
+ if ($time=wp_next_scheduled('backwpup_cron',array('jobid'=>$jobid))) {
439
+ wp_unschedule_event($time,'backwpup_cron',array('jobid'=>$jobid));
440
+ }
441
  }
442
  }
443
+ wp_clear_scheduled_hook('backwpup_cron');
444
+ //make schedule
445
+ wp_schedule_event(0, 'backwpup_int', 'backwpup_cron');
446
  //Set defaults
447
  $cfg=get_option('backwpup'); //Load Settings
448
  if (empty($cfg['mailsndemail'])) $cfg['mailsndemail']=sanitize_email(get_bloginfo( 'admin_email' ));
463
 
464
  //on Plugin deaktivate
465
  function backwpup_plugin_deactivate() {
466
+ //remove old cron jobs
467
  $jobs=get_option('backwpup_jobs');
468
+ if (is_array($jobs)) {
469
+ foreach ($jobs as $jobid => $jobvalue) {
470
+ if ($time=wp_next_scheduled('backwpup_cron',array('jobid'=>$jobid))) {
471
+ wp_unschedule_event($time,'backwpup_cron',array('jobid'=>$jobid));
472
+ }
473
+ }
474
+ }
475
  wp_clear_scheduled_hook('backwpup_cron');
476
  }
477
 
494
 
495
  //Add cron interval
496
  function backwpup_intervals($schedules) {
497
+ $intervals['backwpup_int']=array('interval' => '300', 'display' => __('BackWPup', 'backwpup'));
498
+ $schedules=array_merge($intervals,$schedules);
499
+ return $schedules;
500
+ }
501
+
502
+
503
+ //cron work
504
+ function backwpup_cron() {
505
+ $jobs=get_option('backwpup_jobs');
506
+ foreach ($jobs as $jobid => $jobvalue) {
507
+ if (!$jobvalue['activated'])
508
+ continue;
509
+ if ($jobvalue['cronnextrun']<=current_time('timestamp')) {
510
+ backwpup_dojob($jobid);
511
  }
 
 
512
  }
 
513
  }
514
 
515
  //DoJob
516
+ function backwpup_dojob($jobid) {
517
  global $backwpup_logfile;
 
 
 
 
518
  if (empty($jobid))
519
  return false;
520
  require_once('backwpup_dojob.php');
569
 
570
  //read log file header
571
  function backwpup_read_logheader($logfile) {
572
+ $headers=array("backwpup_version" => "version","backwpup_logtime" => "logtime","backwpup_errors" => "errors","backwpup_warnings" => "warnings","backwpup_jobid" => "jobid","backwpup_jobname" => "name","backwpup_jobtype" => "type","backwpup_jobruntime" => "runtime","backwpup_backupfilesize" => "backupfilesize");
573
  if (!is_readable($logfile))
574
  return false;
575
  //Read file
639
  echo '<strong>'.__('Scheduled Jobs:','backwpup').'</strong><br />';
640
  if (is_array($jobs)) {
641
  foreach ($jobs as $jobid => $jobvalue) {
642
+ if ($jobvalue['activated']) {
643
  echo '<a href="'.wp_nonce_url('admin.php?page=BackWPup&action=edit&jobid='.$jobid, 'edit-job').'" title="'.__('Edit Job','backwpup').'">';
644
  if ($jobvalue['starttime']>0 and empty($jobvalue['stoptime'])) {
645
  $runtime=current_time('timestamp')-$jobvalue['starttime'];
646
  echo __('Running since:','backwpup').' '.$runtime.' '.__('sec.','backwpup');
647
+ } elseif (!empty($jobvalue['cronnextrun'])) {
648
+ echo date(get_option('date_format'),$jobvalue['cronnextrun']).' '.date(get_option('time_format'),$jobvalue['cronnextrun']);
649
  }
650
  echo ': <span>'.$jobvalue['name'].'</span></a><br />';
651
  }
732
  $jobs=get_option('backwpup_jobs'); //Load jobs
733
  $filecounter=0;
734
  $files=array();
735
+ $donefolders=array();
736
  if (extension_loaded('curl') or @dl(PHP_SHLIB_SUFFIX == 'so' ? 'curl.so' : 'php_curl.dll')) {
737
+ if (!class_exists('S3'))
738
+ require_once(plugin_dir_path(__FILE__).'libs/S3.php');
739
+ if (!class_exists('CF_Authentication'))
740
+ require_once(plugin_dir_path(__FILE__).'libs/rackspace/cloudfiles.php');
741
  }
742
+
743
  if (!is_array($jobs)) //return is Jobs empty
744
  return false;
745
+
746
  foreach ($jobs as $jobid => $jobvalue) { //go job by job
747
  $jobvalue=backwpup_check_job_vars($jobvalue); //Check job values
748
  $todo=explode('+',$jobvalue['type']); //only for backup jobs
749
  if (!in_array('FILE',$todo) and !in_array('DB',$todo) and !in_array('WPEXP',$todo))
750
  continue;
751
+
752
  //Get files/filinfo in backup folder
753
+ if (!empty($jobvalue['backupdir']) and !in_array($jobvalue['backupdir'],$donefolders)) {
754
  if ( $dir = @opendir( $jobvalue['backupdir'] ) ) {
755
  while (($file = readdir( $dir ) ) !== false ) {
756
+ if (substr($file,0,1)=='.' or !(strtolower(substr($file,-4))=='.zip' or strtolower(substr($file,-4))=='.tar' or strtolower(substr($file,-7))=='.tar.gz' or strtolower(substr($file,-8))=='.tar.bz2'))
757
  continue;
758
  if (is_file($jobvalue['backupdir'].$file)) {
759
  $files[$filecounter]['type']='FOLDER';
760
  $files[$filecounter]['jobid']=$jobid;
761
  $files[$filecounter]['file']=$jobvalue['backupdir'].$file;
762
  $files[$filecounter]['filename']=$file;
763
+ $files[$filecounter]['downloadurl']=wp_nonce_url('admin.php?page=BackWPup&subpage=backups&action=download&file='.$jobvalue['backupdir'].$file, 'download-backup_'.$file);
764
  $files[$filecounter]['filesize']=filesize($jobvalue['backupdir'].$file);
765
  $files[$filecounter]['time']=filemtime($jobvalue['backupdir'].$file);
766
  $filecounter++;
767
  }
768
  }
769
  closedir( $dir );
770
+ $donefolders[]=$jobvalue['backupdir'];
771
  }
772
  }
773
  //Get files/filinfo from S3
774
+ if (class_exists('S3') and !in_array($jobvalue['awsAccessKey'].'|'.$jobvalue['awsBucket'].'|'.$jobvalue['awsdir'],$donefolders)) {
775
  if (!empty($jobvalue['awsAccessKey']) and !empty($jobvalue['awsSecretKey']) and !empty($jobvalue['awsBucket'])) {
776
  $s3 = new S3($jobvalue['awsAccessKey'], $jobvalue['awsSecretKey'], $jobvalue['awsSSL']);
777
  if (($contents = $s3->getBucket($jobvalue['awsBucket'],$jobvalue['awsdir'])) !== false) {
778
  foreach ($contents as $object) {
779
+ if (strtolower(substr($object['name'],-4))=='.zip' or strtolower(substr($object['name'],-4))=='.tar' or strtolower(substr($object['name'],-7))=='.tar.gz' or strtolower(substr($object['name'],-8))=='.tar.bz2') {
780
  $files[$filecounter]['type']='S3';
781
  $files[$filecounter]['jobid']=$jobid;
782
  $files[$filecounter]['file']=$object['name'];
783
  $files[$filecounter]['filename']=basename($object['name']);
784
+ $files[$filecounter]['downloadurl']=wp_nonce_url('admin.php?page=BackWPup&subpage=backups&action=downloads3&file='.$object['name'].'&jobid='.$jobid, 'downloads3-backup_'.$object['name']);
785
  $files[$filecounter]['filesize']=$object['size'];
786
  $files[$filecounter]['time']=$object['time'];
787
  $filecounter++;
788
  }
789
  }
790
  }
791
+ $donefolders[]=$jobvalue['awsAccessKey'].'|'.$jobvalue['awsBucket'].'|'.$jobvalue['awsdir'];
792
+ }
793
+ }
794
+ //Get files/filinfo from RSC
795
+ if (class_exists('CF_Authentication') and !in_array($jobvalue['rscUsername'].'|'.$jobvalue['rscContainer'].'|'.$jobvalue['rscdir'],$donefolders)) {
796
+ if (!empty($jobvalue['rscUsername']) and !empty($jobvalue['rscAPIKey']) and !empty($jobvalue['rscContainer'])) {
797
+ $auth = new CF_Authentication($jobvalue['rscUsername'], $jobvalue['rscAPIKey']);
798
+ $auth->ssl_use_cabundle();
799
+ if ($auth->authenticate()) {
800
+ $conn = new CF_Connection($auth);
801
+ $conn->ssl_use_cabundle();
802
+ $backwpupcontainer = $conn->get_container($jobvalue['rscContainer']);
803
+ $contents = $backwpupcontainer->get_objects(0,NULL,NULL,$jobvalue['rscdir']);
804
+ foreach ($contents as $object) {
805
+ if (strtolower(substr($object->name,-4))=='.zip' or strtolower(substr($object->name,-4))=='.tar' or strtolower(substr($object->name,-7))=='.tar.gz' or strtolower(substr($object->name,-8))=='.tar.bz2') {
806
+ $files[$filecounter]['type']='RSC';
807
+ $files[$filecounter]['jobid']=$jobid;
808
+ $files[$filecounter]['file']=$object->name;
809
+ $files[$filecounter]['filename']=basename($object->name);
810
+ $files[$filecounter]['downloadurl']=wp_nonce_url('admin.php?page=BackWPup&subpage=backups&action=downloadrsc&file='.$object->name.'&jobid='.$jobid, 'downloadrsc-backup_'.$object->name);
811
+ $files[$filecounter]['filesize']=$object->content_length;
812
+ $files[$filecounter]['time']=$object->last_modified;
813
+ $filecounter++;
814
+ }
815
+ }
816
+ $donefolders[]=$jobvalue['rscUsername'].'|'.$jobvalue['rscContainer'].'|'.$jobvalue['rscdir'];
817
+ }
818
  }
819
  }
820
  //Get files/filinfo from FTP
821
+ if (!empty($jobvalue['ftphost']) and !empty($jobvalue['ftpuser']) and !empty($jobvalue['ftppass']) and !in_array($jobvalue['ftphost'].'|'.$jobvalue['ftpuser'].'|'.$jobvalue['ftpdir'],$donefolders)) {
822
  $ftpport=21;
823
  $ftphost=$jobvalue['ftphost'];
824
  if (false !== strpos($jobvalue['ftphost'],':')) //look for port
825
  list($ftphost,$ftpport)=explode(':',$jobvalue,2);
826
+
827
  $SSL=false;
828
  if (function_exists('ftp_ssl_connect')) { //make SSL FTP connection
829
  $ftp_conn_id = ftp_ssl_connect($ftphost,$ftpport,10);
830
+ if ($ftp_conn_id)
831
  $SSL=true;
832
  }
833
  if (!$ftp_conn_id) { //make normal FTP conection if SSL not work
850
  ftp_pasv($ftp_conn_id, true);
851
  if ($ftpfilelist=ftp_nlist($ftp_conn_id, $jobvalue['ftpdir'])) {
852
  foreach($ftpfilelist as $ftpfiles) {
853
+ if (substr(basename($ftpfiles),0,1)=='.' or !(strtolower(substr($ftpfiles,-4))=='.zip' or strtolower(substr($ftpfiles,-4))=='.tar' or strtolower(substr($ftpfiles,-7))=='.tar.gz' or strtolower(substr($ftpfiles,-8))=='.tar.bz2'))
854
  continue;
855
  $files[$filecounter]['type']='FTP';
856
  $files[$filecounter]['jobid']=$jobid;
858
  $files[$filecounter]['filename']=basename($ftpfiles);
859
  $files[$filecounter]['downloadurl']="ftp://".$jobvalue['ftpuser'].":".base64_decode($jobvalue['ftppass'])."@".$jobvalue['ftphost'].$ftpfiles;
860
  $files[$filecounter]['filesize']=ftp_size($ftp_conn_id,$ftpfiles);
861
+ if ('backwpup_log_' == substr(basename($ftpfiles),0,strlen('backwpup_log_'))) {
862
+ $filnameparts=explode('_',substr(basename($ftpfiles),0,strpos(basename($ftpfiles),'.')));
863
+ $files[$filecounter]['time']=strtotime($filnameparts[2].' '.str_replace('-',':',$filnameparts[3]));
864
+ }
865
+ $filecounter++;
866
  }
867
  }
868
  }
869
+ $donefolders[]=$jobvalue['ftphost'].'|'.$jobvalue['ftpuser'].'|'.$jobvalue['ftpdir'];
870
  }
871
  }
872
  //Sort list
873
+ $tmp = Array();
874
+ foreach($files as &$ma)
875
+ $tmp[] = &$ma["time"];
876
  array_multisort($tmp, SORT_DESC, $files);
877
  return $files;
878
  }
885
  } else {
886
  $awsAccessKey=$_POST['awsAccessKey'];
887
  $awsSecretKey=$_POST['awsSecretKey'];
888
+ $awsselected=$_POST['awsselected'];
889
  $ajax=true;
890
  }
891
+ if (!class_exists('S3'))
892
+ require_once(plugin_dir_path(__FILE__).'libs/S3.php');
893
  if (empty($awsAccessKey)) {
894
  echo '<span id="awsBucket" style="color:red;">'.__('Missing Access Key ID!','backwpup').'</span>';
895
+ if ($ajax)
896
+ die();
897
+ else
898
+ return;
899
  }
900
  if (empty($awsSecretKey)) {
901
  echo '<span id="awsBucket" style="color:red;">'.__('Missing Secret Access Key!','backwpup').'</span>';
902
+ if ($ajax)
903
+ die();
904
+ else
905
+ return;
906
  }
907
  $s3 = new S3($awsAccessKey, $awsSecretKey, false);
908
  $buckets=@$s3->listBuckets();
909
  if (!is_array($buckets)) {
910
  echo '<span id="awsBucket" style="color:red;">'.__('No Buckets found! Or wrong Keys!','backwpup').'</span>';
911
+ if ($ajax)
912
+ die();
913
+ else
914
+ return;
915
  }
916
  echo '<select name="awsBucket" id="awsBucket">';
917
  foreach ($buckets as $bucket) {
918
+ echo "<option ".selected(strtolower($awsselected),strtolower($bucket),false).">".$bucket."</option>";
919
  }
920
  echo '</select>';
921
  if ($ajax)
922
  die();
923
+ else
924
+ return;
925
  }
926
 
927
+ //ajax/normal get Container for RSC select box
928
+ function backwpup_get_rsc_container($args='') {
929
+ if (is_array($args)) {
930
+ extract($args);
931
+ $ajax=false;
932
+ } else {
933
+ $rscUsername=$_POST['rscUsername'];
934
+ $rscAPIKey=$_POST['rscAPIKey'];
935
+ $rscselected=$_POST['rscselected'];
936
+ $ajax=true;
937
+ }
938
+ if (!class_exists('CF_Authentication'))
939
+ require_once(plugin_dir_path(__FILE__).'libs/rackspace/cloudfiles.php');
940
+
941
+ if (empty($rscUsername)) {
942
+ echo '<span id="rscContainer" style="color:red;">'.__('Missing Username!','backwpup').'</span>';
943
+ if ($ajax)
944
+ die();
945
+ else
946
+ return;
947
+ }
948
+ if (empty($rscAPIKey)) {
949
+ echo '<span id="rscContainer" style="color:red;">'.__('Missing API Key!','backwpup').'</span>';
950
+ if ($ajax)
951
+ die();
952
+ else
953
+ return;
954
+ }
955
+ $auth = new CF_Authentication($rscUsername, $rscAPIKey);
956
+
957
+ try {
958
+ $auth->authenticate();
959
+ $conn = new CF_Connection($auth);
960
+ $containers=$conn->get_containers();
961
+ } catch (Exception $e) {
962
+ echo '<span id="rscContainer" style="color:red;">'.__($e->getMessage(),'backwpup').'</span>';
963
+ if ($ajax)
964
+ die();
965
+ else
966
+ return;
967
+ }
968
+
969
+ if (!is_array($containers)) {
970
+ echo '<span id="rscContainer" style="color:red;">'.__('No Containerss found!','backwpup').'</span>';
971
+ if ($ajax)
972
+ die();
973
+ else
974
+ return;
975
+ }
976
+ echo '<select name="rscContainer" id="rscContainer">';
977
+ foreach ($containers as $container) {
978
+ echo "<option ".selected(strtolower($rscselected),strtolower($container->name),false).">".$container->name."</option>";
979
+ }
980
+ echo '</select>';
981
+ if ($ajax)
982
+ die();
983
+ else
984
+ return;
985
+ }
986
+
987
+ //Calcs next run for a cron string as timestamp
988
+ function backwpup_cron_next($cronstring) {
989
+ //Cronstring zerlegen
990
+ list($cronstr['minutes'],$cronstr['hours'],$cronstr['mday'],$cronstr['mon'],$cronstr['wday'])=explode(' ',$cronstring,5);
991
+
992
+ //make arrys form string
993
+ foreach ($cronstr as $key => $value) {
994
+ if (strstr($value,','))
995
+ $cronarray[$key]=explode(',',$value);
996
+ else
997
+ $cronarray[$key]=array(0=>$value);
998
+ }
999
+ //make arrys complete with ranges and steps
1000
+ foreach ($cronarray as $cronarraykey => $cronarrayvalue) {
1001
+ $cron[$cronarraykey]=array();
1002
+ foreach ($cronarrayvalue as $key => $value) {
1003
+ //steps
1004
+ $step=1;
1005
+ if (strstr($value,'/'))
1006
+ list($value,$step)=explode('/',$value,2);
1007
+ //replase weekeday 7 with 0 for sundays
1008
+ if ($cronarraykey=='wday')
1009
+ $value=str_replace('7','0',$value);
1010
+ //ranges
1011
+ if (strstr($value,'-')) {
1012
+ list($first,$last)=explode('-',$value,2);
1013
+ if (!is_numeric($first) or !is_numeric($last) or $last>60 or $first>60) //check
1014
+ return false;
1015
+ if ($cronarraykey=='minutes' and $step<5) //set step ninmum to 5 min.
1016
+ $step=5;
1017
+ $range=array();
1018
+ for ($i=$first;$i<=$last;$i=$i+$step)
1019
+ $range[]=$i;
1020
+ $cron[$cronarraykey]=array_merge($cron[$cronarraykey],$range);
1021
+ } elseif ($value=='*') {
1022
+ $range=array();
1023
+ if ($cronarraykey=='minutes') {
1024
+ if ($step<5) //set step ninmum to 5 min.
1025
+ $step=5;
1026
+ for ($i=0;$i<=59;$i=$i+$step)
1027
+ $range[]=$i;
1028
+ }
1029
+ if ($cronarraykey=='hours') {
1030
+ for ($i=0;$i<=23;$i=$i+$step)
1031
+ $range[]=$i;
1032
+ }
1033
+ if ($cronarraykey=='mday') {
1034
+ for ($i=$step;$i<=31;$i=$i+$step)
1035
+ $range[]=$i;
1036
+ }
1037
+ if ($cronarraykey=='mon') {
1038
+ for ($i=$step;$i<=12;$i=$i+$step)
1039
+ $range[]=$i;
1040
+ }
1041
+ if ($cronarraykey=='wday') {
1042
+ for ($i=0;$i<=6;$i=$i+$step)
1043
+ $range[]=$i;
1044
+ }
1045
+ $cron[$cronarraykey]=array_merge($cron[$cronarraykey],$range);
1046
+ } else {
1047
+ //Month names
1048
+ if (strtolower($value)=='jan')
1049
+ $value=1;
1050
+ if (strtolower($value)=='feb')
1051
+ $value=2;
1052
+ if (strtolower($value)=='mar')
1053
+ $value=3;
1054
+ if (strtolower($value)=='apr')
1055
+ $value=4;
1056
+ if (strtolower($value)=='may')
1057
+ $value=5;
1058
+ if (strtolower($value)=='jun')
1059
+ $value=6;
1060
+ if (strtolower($value)=='jul')
1061
+ $value=7;
1062
+ if (strtolower($value)=='aug')
1063
+ $value=8;
1064
+ if (strtolower($value)=='sep')
1065
+ $value=9;
1066
+ if (strtolower($value)=='oct')
1067
+ $value=10;
1068
+ if (strtolower($value)=='nov')
1069
+ $value=11;
1070
+ if (strtolower($value)=='dec')
1071
+ $value=12;
1072
+ //Week Day names
1073
+ if (strtolower($value)=='sun')
1074
+ $value=0;
1075
+ if (strtolower($value)=='sat')
1076
+ $value=6;
1077
+ if (strtolower($value)=='mon')
1078
+ $value=1;
1079
+ if (strtolower($value)=='tue')
1080
+ $value=2;
1081
+ if (strtolower($value)=='wed')
1082
+ $value=3;
1083
+ if (strtolower($value)=='thu')
1084
+ $value=4;
1085
+ if (strtolower($value)=='fri')
1086
+ $value=5;
1087
+ if (!is_numeric($value) or $value>60) //check
1088
+ return false;
1089
+ $cron[$cronarraykey]=array_merge($cron[$cronarraykey],array(0=>$value));
1090
+ }
1091
+ }
1092
+ }
1093
+
1094
+ //calc next timestamp
1095
+ $currenttime=current_time('timestamp');
1096
+ foreach (array(date('Y'),date('Y')+1) as $year) {
1097
+ foreach ($cron['mon'] as $mon) {
1098
+ foreach ($cron['mday'] as $mday) {
1099
+ foreach ($cron['hours'] as $hours) {
1100
+ foreach ($cron['minutes'] as $minutes) {
1101
+ $timestamp=mktime($hours,$minutes,0,$mon,$mday,$year);
1102
+ if (in_array(date('w',$timestamp),$cron['wday']) and $timestamp>$currenttime) {
1103
+ return $timestamp;
1104
+ }
1105
+ }
1106
+ }
1107
+ }
1108
+ }
1109
+ }
1110
+ return false;
1111
+ }
1112
+
1113
+ function backwpup_env_checks() {
1114
+ global $wp_version,$backwpup_admin_message;
1115
+ $message='';
1116
+ $checks=true;
1117
+ $cfg=get_option('backwpup');
1118
+ if (version_compare($wp_version, '2.8', '<')) { // check WP Version
1119
+ $message.=__('- WordPress 2.8 or heiger needed!','backwpup') . '<br />';
1120
+ $checks=false;
1121
+ }
1122
+ if (version_compare(phpversion(), '5.2.0', '<')) { // check PHP Version
1123
+ $message.=__('- PHP 5.2.0 or higher needed!','backwpup') . '<br />';
1124
+ $checks=false;
1125
+ }
1126
+ if (!is_dir($cfg['dirlogs'])) { // check logs folder
1127
+ $message.=__('- Logs Folder not exists:','backwpup') . ' '.$cfg['dirlogs'].'<br />';
1128
+ }
1129
+ if (!is_writable($cfg['dirlogs'])) { // check logs folder
1130
+ $message.=__('- Logs Folder not writeable:','backwpup') . ' '.$cfg['dirlogs'].'<br />';
1131
+ }
1132
+ if (!is_dir($cfg['dirtemp'])) { // check Temp folder
1133
+ $message.=__('- Temp Folder not exists:','backwpup') . ' '.$cfg['dirtemp'].'<br />';
1134
+ }
1135
+ if (!is_writable($cfg['dirtemp'])) { // check Temp folder
1136
+ $message.=__('- Temp Folder not writeable:','backwpup') . ' '.$cfg['dirtemp'].'<br />';
1137
+ }
1138
+ if (!is_writable($cfg['dirtemp'])) { // check Temp folder
1139
+ $message.=__('- Temp Folder not writeable:','backwpup') . ' '.$cfg['dirtemp'].'<br />';
1140
+ }
1141
+ $jobs=get_option('backwpup_jobs');
1142
+ foreach ($jobs as $jobid => $jobvalue) { //check for old cheduling
1143
+ if (isset($jobvalue['scheduletime']) and empty($jobvalue['cron']))
1144
+ $message.=__('- Please Check Scheduling time for Job:','backwpup') . ' '.$jobid.'. '.$jobvalue['name'].'<br />';
1145
+ }
1146
+ if (wp_next_scheduled('backwpup_cron')!=0 and wp_next_scheduled('backwpup_cron')>(time()+360)) { //check cron jobs work
1147
+ $message.=__("- WP-Cron don't working please check it!","backwpup") .'<br />';
1148
+ }
1149
+ //put massage if one
1150
+ if (!empty($message))
1151
+ $backwpup_admin_message = '<div id="message" class="error fade"><strong>BackWPup:</strong><br />'.$message.'</div>';
1152
+ return $checks;
1153
+ }
1154
+
1155
+ function backwpup_admin_notice() {
1156
+ global $backwpup_admin_message;
1157
+ echo $backwpup_admin_message;
1158
+ }
1159
+
1160
  // add all action and so on only if plugin loaded.
1161
  function backwpup_init() {
1162
+ if (!backwpup_env_checks())
1163
+ return;
1164
  //Disabele WP_Corn
1165
  $cfg=get_option('backwpup');
1166
  if ($cfg['disablewpcron'])
1175
  //add cron intervals
1176
  add_filter('cron_schedules', 'backwpup_intervals');
1177
  //Actions for Cron job
1178
+ add_action('backwpup_cron', 'backwpup_cron');
1179
+ //test if cron active
1180
+ if (!(wp_next_scheduled('backwpup_cron')))
1181
+ wp_schedule_event(0, 'backwpup_int', 'backwpup_cron');
1182
  //add Dashboard widget
1183
  if (current_user_can(10))
1184
  add_action('wp_dashboard_setup', 'backwpup_add_dashboard');
1185
  // add ajax function
1186
  add_action('wp_ajax_backwpup_get_aws_buckets', 'backwpup_get_aws_buckets');
1187
+ add_action('wp_ajax_backwpup_get_rsc_container', 'backwpup_get_rsc_container');
1188
+ //load tables Classes
1189
+ require_once('list-tables.php');
1190
  }
1191
 
1192
  ?>
app/js/options.js CHANGED
@@ -5,12 +5,14 @@ jQuery(document).ready( function($) {
5
  $('#fileformart').show();
6
  $('#toftp').show();
7
  $('#toamazon').show();
 
8
  $('#todir').show();
9
  $('#tomail').show();
10
  } else {
11
  $('#fileformart').hide();
12
  $('#toftp').hide();
13
  $('#toamazon').hide();
 
14
  $('#todir').hide();
15
  $('#tomail').hide();
16
  }
@@ -53,7 +55,7 @@ jQuery(document).ready( function($) {
53
  action: 'backwpup_get_aws_buckets',
54
  awsAccessKey: awsAccessKey,
55
  awsSecretKey: awsSecretKey,
56
- selected: awsBucket
57
  };
58
  $.post(ajaxurl, data, function(response) {
59
  $('#awsBucket').remove();
@@ -63,8 +65,25 @@ jQuery(document).ready( function($) {
63
 
64
  $('#awsAccessKey').change(function() {awsgetbucket();});
65
  $('#awsSecretKey').change(function() {awsgetbucket();});
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
 
67
- $('#reloadbuckets').onClick(awsgetbucket());
 
68
 
69
  if ( $('#title').val() == '' )
70
  $('#title').siblings('#title-prompt-text').css('visibility', '');
5
  $('#fileformart').show();
6
  $('#toftp').show();
7
  $('#toamazon').show();
8
+ $('#torsc').show();
9
  $('#todir').show();
10
  $('#tomail').show();
11
  } else {
12
  $('#fileformart').hide();
13
  $('#toftp').hide();
14
  $('#toamazon').hide();
15
+ $('#torsc').hide();
16
  $('#todir').hide();
17
  $('#tomail').hide();
18
  }
55
  action: 'backwpup_get_aws_buckets',
56
  awsAccessKey: awsAccessKey,
57
  awsSecretKey: awsSecretKey,
58
+ awsselected: awsBucket
59
  };
60
  $.post(ajaxurl, data, function(response) {
61
  $('#awsBucket').remove();
65
 
66
  $('#awsAccessKey').change(function() {awsgetbucket();});
67
  $('#awsSecretKey').change(function() {awsgetbucket();});
68
+
69
+ function rscgetcontainer() {
70
+ var rscUsername = $('#rscUsername').val();
71
+ var rscAPIKey = $('#rscAPIKey').val();
72
+ var rscContainer = $('#rscContainerselected').val();
73
+ var data = {
74
+ action: 'backwpup_get_rsc_container',
75
+ rscUsername: rscUsername,
76
+ rscAPIKey: rscAPIKey,
77
+ rscselected: rscContainer
78
+ };
79
+ $.post(ajaxurl, data, function(response) {
80
+ $('#rscContainer').remove();
81
+ $('#rscContainerselected').after(response);
82
+ });
83
+ }
84
 
85
+ $('#rscUsername').change(function() {rscgetcontainer();});
86
+ $('#rscAPIKey').change(function() {rscgetcontainer();});
87
 
88
  if ( $('#title').val() == '' )
89
  $('#title').siblings('#title-prompt-text').css('visibility', '');
app/libs/S3.php CHANGED
@@ -34,8 +34,17 @@
34
  * @link http://undesigned.org.za/2007/10/22/amazon-s3-php-class
35
  * @version 0.4.0
36
  */
 
 
 
 
 
 
 
 
 
37
  class S3 {
38
- // ACL flags
39
  const ACL_PRIVATE = 'private';
40
  const ACL_PUBLIC_READ = 'public-read';
41
  const ACL_PUBLIC_READ_WRITE = 'public-read-write';
@@ -210,7 +219,7 @@ class S3 {
210
  if ($location !== false) {
211
  $dom = new DOMDocument;
212
  $createBucketConfiguration = $dom->createElement('CreateBucketConfiguration');
213
- $locationConstraint = $dom->createElement('LocationConstraint', strtoupper($location));
214
  $createBucketConfiguration->appendChild($locationConstraint);
215
  $dom->appendChild($createBucketConfiguration);
216
  $rest->data = $dom->saveXML();
@@ -296,9 +305,10 @@ class S3 {
296
  * @param constant $acl ACL constant
297
  * @param array $metaHeaders Array of x-amz-meta-* headers
298
  * @param array $requestHeaders Array of request headers or content type as a string
 
299
  * @return boolean
300
  */
301
- public static function putObject($input, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $requestHeaders = array()) {
302
  if ($input === false) return false;
303
  $rest = new S3Request('PUT', $bucket, $uri);
304
 
@@ -348,6 +358,7 @@ class S3 {
348
 
349
  $rest->setAmzHeader('x-amz-acl', $acl);
350
  foreach ($metaHeaders as $h => $v) $rest->setAmzHeader('x-amz-meta-'.$h, $v);
 
351
  $rest->getResponse();
352
  } else
353
  $rest->response->error = array('code' => 0, 'message' => 'Missing input parameters');
@@ -371,10 +382,11 @@ class S3 {
371
  * @param constant $acl ACL constant
372
  * @param array $metaHeaders Array of x-amz-meta-* headers
373
  * @param string $contentType Content type
 
374
  * @return boolean
375
  */
376
- public static function putObjectFile($file, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $contentType = null) {
377
- return self::putObject(self::inputFile($file), $bucket, $uri, $acl, $metaHeaders, $contentType);
378
  }
379
 
380
 
34
  * @link http://undesigned.org.za/2007/10/22/amazon-s3-php-class
35
  * @version 0.4.0
36
  */
37
+ /**
38
+ * Amazon S3 PHP class extende from Daniel Hüsken
39
+ *
40
+ * @link http://danielhuesken.de
41
+ * @version 0.4.0.1
42
+ * added REDUCED_REDUNDANCY support
43
+ * fixed case sensitive bucket locations
44
+ * removed curl opt CURLOPT_FOLLOWLOCATION because opdenbasedir warnings
45
+ */
46
  class S3 {
47
+ // ACL flags
48
  const ACL_PRIVATE = 'private';
49
  const ACL_PUBLIC_READ = 'public-read';
50
  const ACL_PUBLIC_READ_WRITE = 'public-read-write';
219
  if ($location !== false) {
220
  $dom = new DOMDocument;
221
  $createBucketConfiguration = $dom->createElement('CreateBucketConfiguration');
222
+ $locationConstraint = $dom->createElement('LocationConstraint', $location);
223
  $createBucketConfiguration->appendChild($locationConstraint);
224
  $dom->appendChild($createBucketConfiguration);
225
  $rest->data = $dom->saveXML();
305
  * @param constant $acl ACL constant
306
  * @param array $metaHeaders Array of x-amz-meta-* headers
307
  * @param array $requestHeaders Array of request headers or content type as a string
308
+ * @param boolean $rrs put files with REDUCED_REDUNDANCY
309
  * @return boolean
310
  */
311
+ public static function putObject($input, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $requestHeaders = array(),$rrs = false) {
312
  if ($input === false) return false;
313
  $rest = new S3Request('PUT', $bucket, $uri);
314
 
358
 
359
  $rest->setAmzHeader('x-amz-acl', $acl);
360
  foreach ($metaHeaders as $h => $v) $rest->setAmzHeader('x-amz-meta-'.$h, $v);
361
+ if ($rrs) $rest->setAmzHeader('x-amz-storage-class', 'REDUCED_REDUNDANCY');
362
  $rest->getResponse();
363
  } else
364
  $rest->response->error = array('code' => 0, 'message' => 'Missing input parameters');
382
  * @param constant $acl ACL constant
383
  * @param array $metaHeaders Array of x-amz-meta-* headers
384
  * @param string $contentType Content type
385
+ * @param boolean $rrs put files with REDUCED_REDUNDANCY
386
  * @return boolean
387
  */
388
+ public static function putObjectFile($file, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $contentType = null, $rrs=false) {
389
+ return self::putObject(self::inputFile($file), $bucket, $uri, $acl, $metaHeaders, $contentType, $rrs);
390
  }
391
 
392
 
app/libs/class_webdav_client.php ADDED
@@ -0,0 +1,1542 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ CVS:
4
+ $Id: class_webdav_client.php,v 1.7 2004/08/18 14:12:40 chris Exp $
5
+ $Author: chris $
6
+ $Date: 2004/08/18 14:12:40 $
7
+ $Revision: 1.7 $
8
+ */
9
+ /**
10
+ * webdav_client v0.1.3, a php based webdav client class.
11
+ *
12
+ * Copyright (C) 2003 Christian Juerges
13
+ *
14
+ * This library is free software; you can redistribute it and/or
15
+ * modify it under the terms of the GNU Lesser General Public
16
+ * License as published by the Free Software Foundation; either
17
+ * version 2.1 of the License, or (at your option) any later version.
18
+ *
19
+ * This library 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 GNU
22
+ * Lesser General Public License for more details.
23
+
24
+ * You should have received a copy of the GNU Lesser General Public
25
+ * License along with this library; if not, write to the Free Software
26
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27
+ *
28
+ */
29
+ /**
30
+ * class webdav client. a php based nearly rfc 2518 conforming client.
31
+ *
32
+ * This class implements methods to get access to an webdav server.
33
+ * Most of the methods return false on error, an passtrough integer (http response status) on success
34
+ * or an array in case of a multistatus response (207) from the webdav server.
35
+ * It's your responsibility to handle the webdav server responses in an proper manner.
36
+ *
37
+ * @author Christian Juerges <christian.juerges@xwave.ch>, Xwave GmbH, Josefstr. 92, 8005 Zuerich - Switzerland.
38
+ * @version 0.1.3
39
+ * @copyright (C) 2003/2004, Christian Juerges
40
+ * @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License
41
+ * @package webdav_client
42
+ */
43
+ class webdav_client {
44
+
45
+ var $_debug = false;
46
+ var $_fp;
47
+ var $_server;
48
+ var $_port = 80;
49
+ var $_path ='/';
50
+ var $_user;
51
+ var $_protocol = 'HTTP/1.0';
52
+ var $_pass;
53
+ var $_socket_timeout = 5;
54
+ var $_errno;
55
+ var $_errstr;
56
+ var $_user_agent = 'php class webdav_client $Revision: 1.7 $';
57
+ var $_crlf = "\r\n";
58
+ var $_req;
59
+ var $_resp_status;
60
+ var $_parser;
61
+ var $_xmltree;
62
+
63
+ var $_tree;
64
+ var $_ls = array();
65
+ var $_ls_ref;
66
+ var $_ls_ref_cdata;
67
+
68
+ var $_delete = array();
69
+ var $_delete_ref;
70
+ var $_delete_ref_cdata;
71
+
72
+ var $_lock = array();
73
+ var $_lock_ref;
74
+ var $_lock_rec_cdata;
75
+
76
+
77
+ var $_null = NULL;
78
+ var $_header='';
79
+ var $_body='';
80
+ var $_connection_closed = false;
81
+ var $_maxheaderlenth = 1000;
82
+
83
+ /**#@-*/
84
+
85
+ /**
86
+ * Constructor - does nothing...
87
+ */
88
+ function webdav_client() {
89
+ // do nothing here
90
+ }
91
+
92
+ /**
93
+ * Set webdav server. FQN or IP address.
94
+ * @param string server
95
+ */
96
+ function set_server($server) {
97
+ $this->_server = $server;
98
+ }
99
+
100
+ /**
101
+ * Set tcp port of webdav server. Default is 80.
102
+ * @param int port
103
+ */
104
+ function set_port($port) {
105
+ $this->_port = $port;
106
+ }
107
+
108
+ /**
109
+ * set user name for authentification
110
+ * @param string user
111
+ */
112
+ function set_user($user) {
113
+ $this->_user = $user;
114
+ }
115
+
116
+ /**
117
+ * Set password for authentification
118
+ * @param string pass
119
+ */
120
+ function set_pass($pass) {
121
+ $this->_pass = $pass;
122
+ }
123
+
124
+ /**
125
+ * set debug on (1) or off (0).
126
+ * produces a lot of debug messages in webservers error log if set to on (1).
127
+ * @param bool debug
128
+ */
129
+ function set_debug($debug) {
130
+ $this->_debug = $debug;
131
+ }
132
+
133
+ /**
134
+ * Set which HTTP protocol will be used.
135
+ * Value 1 defines that HTTP/1.1 should be used (Keeps Connection to webdav server alive).
136
+ * Otherwise HTTP/1.0 will be used.
137
+ * @param int version
138
+ */
139
+ function set_protocol($version) {
140
+ if ($version == 1) {
141
+ $this->_protocol = 'HTTP/1.1';
142
+ } else {
143
+ $this->_protocol = 'HTTP/1.0';
144
+ }
145
+ $this->_error_log('HTTP Protocol was set to ' . $this->_protocol);
146
+
147
+ }
148
+
149
+ /**
150
+ * Convert ISO 8601 Date and Time Profile used in RFC 2518 to an unix timestamp.
151
+ * @access private
152
+ * @param string iso8601
153
+ * @return unixtimestamp on sucess. Otherwise false.
154
+ */
155
+ function iso8601totime($iso8601) {
156
+ /*
157
+
158
+ date-time = full-date "T" full-time
159
+
160
+ full-date = date-fullyear "-" date-month "-" date-mday
161
+ full-time = partial-time time-offset
162
+
163
+ date-fullyear = 4DIGIT
164
+ date-month = 2DIGIT ; 01-12
165
+ date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on
166
+ month/year
167
+ time-hour = 2DIGIT ; 00-23
168
+ time-minute = 2DIGIT ; 00-59
169
+ time-second = 2DIGIT ; 00-59, 00-60 based on leap second rules
170
+ time-secfrac = "." 1*DIGIT
171
+ time-numoffset = ("+" / "-") time-hour ":" time-minute
172
+ time-offset = "Z" / time-numoffset
173
+
174
+ partial-time = time-hour ":" time-minute ":" time-second
175
+ [time-secfrac]
176
+ */
177
+
178
+ $regs = array();
179
+ /* [1] [2] [3] [4] [5] [6] */
180
+ if (ereg('^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})Z$', $iso8601, $regs)) {
181
+ return mktime($regs[4],$regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
182
+ }
183
+ // to be done: regex for partial-time...apache webdav mod never returns partial-time
184
+
185
+ return false;
186
+ }
187
+
188
+ /**
189
+ * Open's a socket to a webdav server
190
+ * @return bool true on success. Otherwise false.
191
+ */
192
+ function open() {
193
+ // let's try to open a socket
194
+ $this->_error_log('open a socket connection');
195
+ $this->_fp = fsockopen ($this->_server, $this->_port, $this->_errno, $this->_errstr, $this->_socket_timeout);
196
+ // set_time_limit(30);
197
+ socket_set_blocking($this->_fp, true);
198
+ if (!$this->_fp) {
199
+ $this->_error_log("$this->_errstr ($this->_errno)\n");
200
+ return false;
201
+ } else {
202
+ $this->_connection_closed = false;
203
+ $this->_error_log('socket is open: ' . $this->_fp);
204
+ return true;
205
+ }
206
+ }
207
+
208
+ /**
209
+ * Closes an open socket.
210
+ */
211
+ function close() {
212
+ $this->_error_log('closing socket ' . $this->_fp);
213
+ $this->_connection_closed = true;
214
+ fclose($this->_fp);
215
+ }
216
+
217
+ /**
218
+ * Check's if server is a webdav compliant server.
219
+ * True if server returns a DAV Element in Header and when
220
+ * schema 1,2 is supported.
221
+ * @return bool true if server is webdav server. Otherwise false.
222
+ */
223
+ function check_webdav() {
224
+ $resp = $this->options();
225
+ if (!$resp) {
226
+ return false;
227
+ }
228
+ $this->_error_log($resp['header']['DAV']);
229
+ // check schema
230
+ if (preg_match('/1,2/', $resp['header']['DAV'])) {
231
+ return true;
232
+ }
233
+ // otherwise return false
234
+ return false;
235
+ }
236
+
237
+
238
+ /**
239
+ * Get options from webdav server.
240
+ * @return array with all header fields returned from webdav server. false if server does not speak http.
241
+ */
242
+ function options() {
243
+ $this->_header_unset();
244
+ $this->_create_basic_request('OPTIONS');
245
+ $this->_send_request();
246
+ $this->_get_respond();
247
+ $response = $this->_process_respond();
248
+ // validate the response ...
249
+ // check http-version
250
+ if ($response['status']['http-version'] == 'HTTP/1.1' ||
251
+ $response['status']['http-version'] == 'HTTP/1.0') {
252
+ return $response;
253
+ }
254
+ $this->_error_log('Response was not even http');
255
+ return false;
256
+
257
+ }
258
+
259
+ /**
260
+ * Public method mkcol
261
+ *
262
+ * Creates a new collection/directory on a webdav server
263
+ * @param string path
264
+ * @return int status code received as reponse from webdav server (see rfc 2518)
265
+ */
266
+ function mkcol($path) {
267
+ $this->_path = $this->_translate_uri($path);
268
+ $this->_header_unset();
269
+ $this->_create_basic_request('MKCOL');
270
+ $this->_send_request();
271
+ $this->_get_respond();
272
+ $response = $this->_process_respond();
273
+ // validate the response ...
274
+ // check http-version
275
+ if ($response['status']['http-version'] == 'HTTP/1.1' ||
276
+ $response['status']['http-version'] == 'HTTP/1.0') {
277
+ /* seems to be http ... proceed
278
+ just return what server gave us
279
+ rfc 2518 says:
280
+ 201 (Created) - The collection or structured resource was created in its entirety.
281
+ 403 (Forbidden) - This indicates at least one of two conditions: 1) the server does not allow the creation of collections at the given
282
+ location in its namespace, or 2) the parent collection of the Request-URI exists but cannot accept members.
283
+ 405 (Method Not Allowed) - MKCOL can only be executed on a deleted/non-existent resource.
284
+ 409 (Conflict) - A collection cannot be made at the Request-URI until one or more intermediate collections have been created.
285
+ 415 (Unsupported Media Type)- The server does not support the request type of the body.
286
+ 507 (Insufficient Storage) - The resource does not have sufficient space to record the state of the resource after the execution of this method.
287
+ */
288
+ return $response['status']['status-code'];
289
+ }
290
+
291
+ }
292
+
293
+ /**
294
+ * Public method get
295
+ *
296
+ * Gets a file from a webdav collection.
297
+ * @param string path, string &buffer
298
+ * @return status code and &$buffer (by reference) with response data from server on success. False on error.
299
+ */
300
+ function get($path, &$buffer) {
301
+ $this->_path = $this->_translate_uri($path);
302
+ $this->_header_unset();
303
+ $this->_create_basic_request('GET');
304
+ $this->_send_request();
305
+ $this->_get_respond();
306
+ $response = $this->_process_respond();
307
+
308
+ // validate the response
309
+ // check http-version
310
+ if ($response['status']['http-version'] == 'HTTP/1.1' ||
311
+ $response['status']['http-version'] == 'HTTP/1.0') {
312
+ // seems to be http ... proceed
313
+ // We expect a 200 code
314
+ if ($response['status']['status-code'] == 200 ) {
315
+ $this->_error_log('returning buffer with ' . strlen($response['body']) . ' bytes.');
316
+ $buffer = $response['body'];
317
+ }
318
+ return $response['status']['status-code'];
319
+ }
320
+ // ups: no http status was returned ?
321
+ return false;
322
+ }
323
+
324
+ /**
325
+ * Public method put
326
+ *
327
+ * Puts a file into a collection.
328
+ * Data is putted as one chunk!
329
+ * @param string path, string data
330
+ * @return int status-code read from webdavserver. False on error.
331
+ */
332
+ function put($path, $data ) {
333
+ $this->_path = $this->_translate_uri($path);
334
+ $this->_header_unset();
335
+ $this->_create_basic_request('PUT');
336
+ // add more needed header information ...
337
+ $this->_header_add('Content-length: ' . strlen($data));
338
+ $this->_header_add('Content-type: application/octet-stream');
339
+ // send header
340
+ $this->_send_request();
341
+ // send the rest (data)
342
+ fputs($this->_fp, $data);
343
+ $this->_get_respond();
344
+ $response = $this->_process_respond();
345
+
346
+ // validate the response
347
+ // check http-version
348
+ if ($response['status']['http-version'] == 'HTTP/1.1' ||
349
+ $response['status']['http-version'] == 'HTTP/1.0') {
350
+ // seems to be http ... proceed
351
+ // We expect a 200 or 204 status code
352
+ // see rfc 2068 - 9.6 PUT...
353
+ // print 'http ok<br>';
354
+ return $response['status']['status-code'];
355
+ }
356
+ // ups: no http status was returned ?
357
+ return false;
358
+ }
359
+
360
+ /**
361
+ * Public method put_file
362
+ *
363
+ * Read a file as stream and puts it chunk by chunk into webdav server collection.
364
+ * Look at php documenation for legal filenames with fopen();
365
+ *
366
+ * @param string targetpath, string filename
367
+ * @return int status code. False on error.
368
+ */
369
+ function put_file($path, $filename) {
370
+ // try to open the file ...
371
+ $handle = @fopen ($filename, 'r');
372
+ if ($handle) {
373
+ // $this->_fp = pfsockopen ($this->_server, $this->_port, $this->_errno, $this->_errstr, $this->_socket_timeout);
374
+ $this->_path = $this->_translate_uri($path);
375
+ $this->_header_unset();
376
+ $this->_create_basic_request('PUT');
377
+ // add more needed header information ...
378
+ $this->_header_add('Content-length: ' . filesize($filename));
379
+ $this->_header_add('Content-type: application/octet-stream');
380
+ // send header
381
+ $this->_send_request();
382
+ while (!feof($handle)) {
383
+ fputs($this->_fp,fgets($handle,4096));
384
+ }
385
+ fclose($handle);
386
+ $this->_get_respond();
387
+ $response = $this->_process_respond();
388
+
389
+ // validate the response
390
+ // check http-version
391
+ if ($response['status']['http-version'] == 'HTTP/1.1' ||
392
+ $response['status']['http-version'] == 'HTTP/1.0') {
393
+ // seems to be http ... proceed
394
+ // We expect a 200 or 204 status code
395
+ // see rfc 2068 - 9.6 PUT...
396
+ // print 'http ok<br>';
397
+ return $response['status']['status-code'];
398
+ }
399
+ // ups: no http status was returned ?
400
+ return false;
401
+ } else {
402
+ $this->_error_log('could not open ' . $filename);
403
+ return false;
404
+ }
405
+
406
+ }
407
+
408
+ /**
409
+ * Public method get_file
410
+ *
411
+ * Gets a file from a collection into local filesystem.
412
+ * fopen() is used.
413
+ * @param string srcpath, string localpath
414
+ * @return true on success. false on error.
415
+ */
416
+ function get_file($srcpath, $localpath) {
417
+
418
+ if ($this->get($srcpath, $buffer)) {
419
+ $handle = fopen ($localpath, 'w');
420
+ if ($handle) {
421
+ fwrite($handle, $buffer);
422
+ fclose($handle);
423
+ return true;
424
+ } else {
425
+ return false;
426
+ }
427
+ } else {
428
+ return false;
429
+ }
430
+ }
431
+
432
+ /**
433
+ * Public method copy_file
434
+ *
435
+ * Copy a file on webdav server
436
+ * Duplicates a file on the webdav server (serverside).
437
+ * All work is done on the webdav server. If you set param overwrite as true,
438
+ * the target will be overwritten.
439
+ *
440
+ * @param string src_path, string dest_path, bool overwrite
441
+ * @return int status code (look at rfc 2518). false on error.
442
+ */
443
+ function copy_file($src_path, $dst_path, $overwrite) {
444
+ $this->_path = $this->_translate_uri($src_path);
445
+ $this->_header_unset();
446
+ $this->_create_basic_request('COPY');
447
+ $this->_header_add(sprintf('Destination: http://%s%s', $this->_server, $this->_translate_uri($dst_path)));
448
+ if ($overwrite) {
449
+ $this->_header_add('Overwrite: T');
450
+ } else {
451
+ $this->_header_add('Overwrite: F');
452
+ }
453
+ $this->_header_add('');
454
+ $this->_send_request();
455
+ $this->_get_respond();
456
+ $response = $this->_process_respond();
457
+ // validate the response ...
458
+ // check http-version
459
+ if ($response['status']['http-version'] == 'HTTP/1.1' ||
460
+ $response['status']['http-version'] == 'HTTP/1.0') {
461
+ /* seems to be http ... proceed
462
+ just return what server gave us (as defined in rfc 2518) :
463
+ 201 (Created) - The source resource was successfully copied. The copy operation resulted in the creation of a new resource.
464
+ 204 (No Content) - The source resource was successfully copied to a pre-existing destination resource.
465
+ 403 (Forbidden) - The source and destination URIs are the same.
466
+ 409 (Conflict) - A resource cannot be created at the destination until one or more intermediate collections have been created.
467
+ 412 (Precondition Failed) - The server was unable to maintain the liveness of the properties listed in the propertybehavior XML element
468
+ or the Overwrite header is "F" and the state of the destination resource is non-null.
469
+ 423 (Locked) - The destination resource was locked.
470
+ 502 (Bad Gateway) - This may occur when the destination is on another server and the destination server refuses to accept the resource.
471
+ 507 (Insufficient Storage) - The destination resource does not have sufficient space to record the state of the resource after the
472
+ execution of this method.
473
+ */
474
+ return $response['status']['status-code'];
475
+ }
476
+ return false;
477
+ }
478
+
479
+ /**
480
+ * Public method copy_coll
481
+ *
482
+ * Copy a collection on webdav server
483
+ * Duplicates a collection on the webdav server (serverside).
484
+ * All work is done on the webdav server. If you set param overwrite as true,
485
+ * the target will be overwritten.
486
+ *
487
+ * @param string src_path, string dest_path, bool overwrite
488
+ * @return int status code (look at rfc 2518). false on error.
489
+ */
490
+ function copy_coll($src_path, $dst_path, $overwrite) {
491
+ $this->_path = $this->_translate_uri($src_path);
492
+ $this->_header_unset();
493
+ $this->_create_basic_request('COPY');
494
+ $this->_header_add(sprintf('Destination: http://%s%s', $this->_server, $this->_translate_uri($dst_path)));
495
+ $this->_header_add('Depth: Infinity');
496
+
497
+ $xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n";
498
+ $xml .= "<d:propertybehavior xmlns:d=\"DAV:\">\r\n";
499
+ $xml .= " <d:keepalive>*</d:keepalive>\r\n";
500
+ $xml .= "</d:propertybehavior>\r\n";
501
+
502
+ $this->_header_add('Content-length: ' . strlen($xml));
503
+ $this->_header_add('Content-type: text/xml');
504
+ $this->_send_request();
505
+ // send also xml
506
+ fputs($this->_fp, $xml);
507
+ $this->_get_respond();
508
+ $response = $this->_process_respond();
509
+ // validate the response ...
510
+ // check http-version
511
+ if ($response['status']['http-version'] == 'HTTP/1.1' ||
512
+ $response['status']['http-version'] == 'HTTP/1.0') {
513
+ /* seems to be http ... proceed
514
+ just return what server gave us (as defined in rfc 2518) :
515
+ 201 (Created) - The source resource was successfully copied. The copy operation resulted in the creation of a new resource.
516
+ 204 (No Content) - The source resource was successfully copied to a pre-existing destination resource.
517
+ 403 (Forbidden) - The source and destination URIs are the same.
518
+ 409 (Conflict) - A resource cannot be created at the destination until one or more intermediate collections have been created.
519
+ 412 (Precondition Failed) - The server was unable to maintain the liveness of the properties listed in the propertybehavior XML element
520
+ or the Overwrite header is "F" and the state of the destination resource is non-null.
521
+ 423 (Locked) - The destination resource was locked.
522
+ 502 (Bad Gateway) - This may occur when the destination is on another server and the destination server refuses to accept the resource.
523
+ 507 (Insufficient Storage) - The destination resource does not have sufficient space to record the state of the resource after the
524
+ execution of this method.
525
+ */
526
+ return $response['status']['status-code'];
527
+ }
528
+ return false;
529
+ }
530
+
531
+ /**
532
+ * Public method move
533
+ *
534
+ * Move a file or collection on webdav server (serverside)
535
+ * If you set param overwrite as true, the target will be overwritten.
536
+ *
537
+ * @param string src_path, string dest_path, bool overwrite
538
+ * @return int status code (look at rfc 2518). false on error.
539
+ */
540
+ // --------------------------------------------------------------------------
541
+ // public method move
542
+ // move/rename a file/collection on webdav server
543
+ function move($src_path,$dst_path, $overwrite) {
544
+
545
+ $this->_path = $this->_translate_uri($src_path);
546
+ $this->_header_unset();
547
+
548
+ $this->_create_basic_request('MOVE');
549
+ // dst_path should not be uri translated....
550
+ $this->_header_add(sprintf('Destination: http://%s%s', $this->_server, $dst_path));
551
+ if ($overwrite) {
552
+ $this->_header_add('Overwrite: T');
553
+ } else {
554
+ $this->_header_add('Overwrite: F');
555
+ }
556
+ $this->_header_add('');
557
+
558
+ $this->_send_request();
559
+ $this->_get_respond();
560
+ $response = $this->_process_respond();
561
+ // validate the response ...
562
+ // check http-version
563
+ if ($response['status']['http-version'] == 'HTTP/1.1' ||
564
+ $response['status']['http-version'] == 'HTTP/1.0') {
565
+ /* seems to be http ... proceed
566
+ just return what server gave us (as defined in rfc 2518) :
567
+ 201 (Created) - The source resource was successfully moved, and a new resource was created at the destination.
568
+ 204 (No Content) - The source resource was successfully moved to a pre-existing destination resource.
569
+ 403 (Forbidden) - The source and destination URIs are the same.
570
+ 409 (Conflict) - A resource cannot be created at the destination until one or more intermediate collections have been created.
571
+ 412 (Precondition Failed) - The server was unable to maintain the liveness of the properties listed in the propertybehavior XML element
572
+ or the Overwrite header is "F" and the state of the destination resource is non-null.
573
+ 423 (Locked) - The source or the destination resource was locked.
574
+ 502 (Bad Gateway) - This may occur when the destination is on another server and the destination server refuses to accept the resource.
575
+
576
+ 201 (Created) - The collection or structured resource was created in its entirety.
577
+ 403 (Forbidden) - This indicates at least one of two conditions: 1) the server does not allow the creation of collections at the given
578
+ location in its namespace, or 2) the parent collection of the Request-URI exists but cannot accept members.
579
+ 405 (Method Not Allowed) - MKCOL can only be executed on a deleted/non-existent resource.
580
+ 409 (Conflict) - A collection cannot be made at the Request-URI until one or more intermediate collections have been created.
581
+ 415 (Unsupported Media Type)- The server does not support the request type of the body.
582
+ 507 (Insufficient Storage) - The resource does not have sufficient space to record the state of the resource after the execution of this method.
583
+ */
584
+ return $response['status']['status-code'];
585
+ }
586
+ return false;
587
+ }
588
+
589
+ /**
590
+ * Public method lock
591
+ *
592
+ * Lock a file or collection.
593
+ *
594
+ * Lock uses this->_user as lock owner.
595
+ *
596
+ * @param string path
597
+ * @return int status code (look at rfc 2518). false on error.
598
+ */
599
+ function lock($path) {
600
+ $this->_path = $this->_translate_uri($path);
601
+ $this->_header_unset();
602
+ $this->_create_basic_request('LOCK');
603
+ $this->_header_add('Timeout: Infinite');
604
+ $this->_header_add('Content-type: text/xml');
605
+ // create the xml request ...
606
+ $xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n";
607
+ $xml .= "<D:lockinfo xmlns:D='DAV:'\r\n>";
608
+ $xml .= " <D:lockscope><D:exclusive/></D:lockscope>\r\n";
609
+ $xml .= " <D:locktype><D:write/></D:locktype>\r\n";
610
+ $xml .= " <D:owner>\r\n";
611
+ $xml .= " <D:href>".($this->_user)."</D:href>\r\n";
612
+ $xml .= " </D:owner>\r\n";
613
+ $xml .= "</D:lockinfo>\r\n";
614
+ $this->_header_add('Content-length: ' . strlen($xml));
615
+ $this->_send_request();
616
+ // send also xml
617
+ fputs($this->_fp, $xml);
618
+ $this->_get_respond();
619
+ $response = $this->_process_respond();
620
+ // validate the response ... (only basic validation)
621
+ // check http-version
622
+ if ($response['status']['http-version'] == 'HTTP/1.1' ||
623
+ $response['status']['http-version'] == 'HTTP/1.0') {
624
+ /* seems to be http ... proceed
625
+ rfc 2518 says:
626
+ 200 (OK) - The lock request succeeded and the value of the lockdiscovery property is included in the body.
627
+ 412 (Precondition Failed) - The included lock token was not enforceable on this resource or the server could not satisfy the
628
+ request in the lockinfo XML element.
629
+ 423 (Locked) - The resource is locked, so the method has been rejected.
630
+ */
631
+
632
+ switch($response['status']['status-code']) {
633
+ case 200:
634
+ // collection was successfully locked... see xml response to get lock token...
635
+ if (strcmp($response['header']['Content-Type'], 'text/xml; charset="utf-8"') == 0) {
636
+ // ok let's get the content of the xml stuff
637
+ $this->_parser = xml_parser_create_ns();
638
+ // forget old data...
639
+ unset($this->_lock[$this->_parser]);
640
+ unset($this->_xmltree[$this->_parser]);
641
+ xml_parser_set_option($this->_parser,XML_OPTION_SKIP_WHITE,0);
642
+ xml_parser_set_option($this->_parser,XML_OPTION_CASE_FOLDING,0);
643
+ xml_set_object($this->_parser, $this);
644
+ xml_set_element_handler($this->_parser, "_lock_startElement", "_endElement");
645
+ xml_set_character_data_handler($this->_parser, "_lock_cdata");
646
+
647
+ if (!xml_parse($this->_parser, $response['body'])) {
648
+ die(sprintf("XML error: %s at line %d",
649
+ xml_error_string(xml_get_error_code($this->_parser)),
650
+ xml_get_current_line_number($this->_parser)));
651
+ }
652
+
653
+ // Free resources
654
+ xml_parser_free($this->_parser);
655
+ // add status code to array
656
+ $this->_lock[$this->_parser]['status'] = 200;
657
+ return $this->_lock[$this->_parser];
658
+
659
+ } else {
660
+ print 'Missing Content-Type: text/xml header in response.<br>';
661
+ }
662
+ return false;
663
+
664
+ default:
665
+ // hmm. not what we expected. Just return what we got from webdav server
666
+ // someone else has to handle it.
667
+ $this->_lock['status'] = $response['status']['status-code'];
668
+ return $this->_lock;
669
+ }
670
+ }
671
+
672
+
673
+ }
674
+
675
+
676
+ /**
677
+ * Public method unlock
678
+ *
679
+ * Unlock a file or collection.
680
+ *
681
+ * @param string path, string locktoken
682
+ * @return int status code (look at rfc 2518). false on error.
683
+ */
684
+ function unlock($path, $locktoken) {
685
+ $this->_path = $this->_translate_uri($path);
686
+ $this->_header_unset();
687
+ $this->_create_basic_request('UNLOCK');
688
+ $this->_header_add(sprintf('Lock-Token: <%s>', $locktoken));
689
+ $this->_send_request();
690
+ $this->_get_respond();
691
+ $response = $this->_process_respond();
692
+ if ($response['status']['http-version'] == 'HTTP/1.1' ||
693
+ $response['status']['http-version'] == 'HTTP/1.0') {
694
+ /* seems to be http ... proceed
695
+ rfc 2518 says:
696
+ 204 (OK) - The 204 (No Content) status code is used instead of 200 (OK) because there is no response entity body.
697
+ */
698
+ return $response['status']['status-code'];
699
+ }
700
+ return false;
701
+ }
702
+
703
+ /** --------------------------------------------------------------------------
704
+ * Public method delete
705
+ *
706
+ * deletes a collection/directory on a webdav server
707
+ * @param string path
708
+ * @return int status code (look at rfc 2518). false on error.
709
+ */
710
+ function delete($path) {
711
+ $this->_path = $this->_translate_uri($path);
712
+ $this->_header_unset();
713
+ $this->_create_basic_request('DELETE');
714
+ /* $this->_header_add('Content-Length: 0'); */
715
+ $this->_header_add('');
716
+ $this->_send_request();
717
+ $this->_get_respond();
718
+ $response = $this->_process_respond();
719
+
720
+ // validate the response ...
721
+ // check http-version
722
+ if ($response['status']['http-version'] == 'HTTP/1.1' ||
723
+ $response['status']['http-version'] == 'HTTP/1.0') {
724
+ // seems to be http ... proceed
725
+ // We expect a 207 Multi-Status status code
726
+ // print 'http ok<br>';
727
+
728
+ switch ($response['status']['status-code']) {
729
+ case 207:
730
+ // collection was NOT deleted... see xml response for reason...
731
+ // next there should be a Content-Type: text/xml; charset="utf-8" header line
732
+ if (strcmp($response['header']['Content-Type'], 'text/xml; charset="utf-8"') == 0) {
733
+ // ok let's get the content of the xml stuff
734
+ $this->_parser = xml_parser_create_ns();
735
+ // forget old data...
736
+ unset($this->_delete[$this->_parser]);
737
+ unset($this->_xmltree[$this->_parser]);
738
+ xml_parser_set_option($this->_parser,XML_OPTION_SKIP_WHITE,0);
739
+ xml_parser_set_option($this->_parser,XML_OPTION_CASE_FOLDING,0);
740
+ xml_set_object($this->_parser, $this);
741
+ xml_set_element_handler($this->_parser, "_delete_startElement", "_endElement");
742
+ xml_set_character_data_handler($this->_parser, "_delete_cdata");
743
+
744
+ if (!xml_parse($this->_parser, $response['body'])) {
745
+ die(sprintf("XML error: %s at line %d",
746
+ xml_error_string(xml_get_error_code($this->_parser)),
747
+ xml_get_current_line_number($this->_parser)));
748
+ }
749
+
750
+ print_r($this->_delete[$this->_parser]);
751
+ print "<br>";
752
+
753
+ // Free resources
754
+ xml_parser_free($this->_parser);
755
+ $this->_delete[$this->_parser]['status'] = $response['status']['status-code'];
756
+ return $this->_delete[$this->_parser];
757
+
758
+ } else {
759
+ print 'Missing Content-Type: text/xml header in response.<br>';
760
+ }
761
+ return false;
762
+
763
+ default:
764
+ // collection or file was successfully deleted
765
+ $this->_delete['status'] = $response['status']['status-code'];
766
+ return $this->_delete;
767
+
768
+
769
+ }
770
+ }
771
+
772
+ }
773
+
774
+ /**
775
+ * Public method ls
776
+ *
777
+ * Get's directory information from webdav server into flat a array using PROPFIND
778
+ * @param string path
779
+ * @return array dirinfo, false on error
780
+ */
781
+ function ls($path) {
782
+
783
+ if (trim($path) == '') {
784
+ $this->_error_log('Missing a path in method ls');
785
+ return false;
786
+ }
787
+ $this->_path = $this->_translate_uri($path);
788
+
789
+ $this->_header_unset();
790
+ $this->_create_basic_request('PROPFIND');
791
+ $this->_header_add('Depth: 1');
792
+ $this->_header_add('Content-type: text/xml');
793
+ // create profind xml request...
794
+ $xml = "<?xml version=\"1.0\"?>\r\n";
795
+ $xml .= "<A:propfind xmlns:A=\"DAV:\">\r\n";
796
+ // shall we get all properties ?
797
+ $xml .= " <A:allprop/>\r\n";
798
+ // or should we better get only wanted props ?
799
+ $xml .= "</A:propfind>\r\n";
800
+ $this->_header_add('Content-length: ' . strlen($xml));
801
+ $this->_send_request();
802
+ $this->_error_log($xml);
803
+ fputs($this->_fp, $xml);
804
+ $this->_get_respond();
805
+ $response = $this->_process_respond();
806
+ // validate the response ... (only basic validation)
807
+ // check http-version
808
+ if ($response['status']['http-version'] == 'HTTP/1.1' ||
809
+ $response['status']['http-version'] == 'HTTP/1.0') {
810
+ // seems to be http ... proceed
811
+ // We expect a 207 Multi-Status status code
812
+ // print 'http ok<br>';
813
+ if (strcmp($response['status']['status-code'],'207') == 0 ) {
814
+ // ok so far
815
+ // next there should be a Content-Type: text/xml; charset="utf-8" header line
816
+ if (strcmp($response['header']['Content-Type'], 'text/xml; charset="utf-8"') == 0) {
817
+ // ok let's get the content of the xml stuff
818
+ $this->_parser = xml_parser_create_ns();
819
+ // forget old data...
820
+ unset($this->_ls[$this->_parser]);
821
+ unset($this->_xmltree[$this->_parser]);
822
+ xml_parser_set_option($this->_parser,XML_OPTION_SKIP_WHITE,0);
823
+ xml_parser_set_option($this->_parser,XML_OPTION_CASE_FOLDING,0);
824
+ xml_set_object($this->_parser, $this);
825
+ xml_set_element_handler($this->_parser, "_propfind_startElement", "_endElement");
826
+ xml_set_character_data_handler($this->_parser, "_propfind_cdata");
827
+
828
+
829
+ if (!xml_parse($this->_parser, $response['body'])) {
830
+ die(sprintf("XML error: %s at line %d",
831
+ xml_error_string(xml_get_error_code($this->_parser)),
832
+ xml_get_current_line_number($this->_parser)));
833
+ }
834
+
835
+ // Free resources
836
+ xml_parser_free($this->_parser);
837
+ return $this->_ls[$this->_parser];
838
+ } else {
839
+ $this->_error_log('Missing Content-Type: text/xml header in response!!');
840
+ return false;
841
+ }
842
+ }
843
+ }
844
+
845
+ // response was not http
846
+ $this->_error_log('Ups in method ls: error in response from server');
847
+ return false;
848
+ }
849
+
850
+
851
+ /**
852
+ * Public method gpi
853
+ *
854
+ * Get's path information from webdav server for one element
855
+ * @param string path
856
+ * @return array dirinfo. false on error
857
+ */
858
+ function gpi($path) {
859
+
860
+ // split path by last "/"
861
+ $path = rtrim($path, "/");
862
+ $item = basename($path);
863
+ $dir = dirname($path);
864
+
865
+ $list = $this->ls($dir);
866
+
867
+ // be sure it is an array
868
+ if (is_array($list)) {
869
+ foreach($list as $e) {
870
+
871
+ $fullpath = urldecode($e['href']);
872
+ $filename = basename($fullpath);
873
+
874
+ if ($filename == $item && $filename != "" and $fullpath != $dir."/") {
875
+ return $e;
876
+ }
877
+ }
878
+ }
879
+ return false;
880
+ }
881
+
882
+ /**
883
+ * Public method is_file
884
+ *
885
+ * Gather whether a path points to a file or not
886
+ * @param string path
887
+ * @return bool true or false
888
+ */
889
+ function is_file($path) {
890
+
891
+ $item = $this->gpi($path);
892
+
893
+ if ($item === false) {
894
+ return false;
895
+ } else {
896
+ return ($item['resourcetype'] != 'collection');
897
+ }
898
+ }
899
+
900
+ /**
901
+ * Public method is_dir
902
+ *
903
+ * Gather whether a path points to a directory
904
+ * @param string path
905
+ * return bool true or false
906
+ */
907
+ function is_dir($path) {
908
+
909
+ $item = $this->gpi($path);
910
+
911
+ if ($item === false) {
912
+ return false;
913
+ } else {
914
+ return ($item['resourcetype'] == 'collection');
915
+ }
916
+ }
917
+
918
+
919
+ /**
920
+ * Public method mput
921
+ *
922
+ * Puts multiple files and directories onto a webdav server
923
+ * Param fileList must be in format array("localpath" => "destpath")
924
+ * @param array filelist
925
+ * @return bool true on success. otherwise int status code on error
926
+ */
927
+ function mput($filelist) {
928
+
929
+ $result = true;
930
+
931
+ while (list($localpath, $destpath) = each($filelist)) {
932
+
933
+ $localpath = rtrim($localpath, "/");
934
+ $destpath = rtrim($destpath, "/");
935
+
936
+ // attempt to create target path
937
+ if (is_dir($localpath)) {
938
+ $pathparts = explode("/", $destpath."/ "); // add one level, last level will be created as dir
939
+ } else {
940
+ $pathparts = explode("/", $destpath);
941
+ }
942
+ $checkpath = "";
943
+ for ($i=1; $i<sizeof($pathparts)-1; $i++) {
944
+ $checkpath .= "/" . $pathparts[$i];
945
+ if (!($this->is_dir($checkpath))) {
946
+
947
+ $result &= ($this->mkcol($checkpath) == 201 );
948
+ }
949
+ }
950
+
951
+ if ($result) {
952
+ // recurse directories
953
+ if (is_dir($localpath)) {
954
+ $dp = opendir($localpath);
955
+ $fl = array();
956
+ while($filename = readdir($dp)) {
957
+ if ((is_file($localpath."/".$filename) || is_dir($localpath."/".$filename)) && $filename!="." && $filename != "..") {
958
+ $fl[$localpath."/".$filename] = $destpath."/".$filename;
959
+ }
960
+ }
961
+ $result &= $this->mput($fl);
962
+ } else {
963
+ $result &= ($this->put_file($destpath, $localpath) == 201);
964
+ }
965
+ }
966
+ }
967
+ return $result;
968
+ }
969
+
970
+ /**
971
+ * Public method mget
972
+ *
973
+ * Gets multiple files and directories
974
+ * FileList must be in format array("remotepath" => "localpath")
975
+ * @param array filelist
976
+ * @return bool true on succes, other int status code on error
977
+ */
978
+ function mget($filelist) {
979
+
980
+ $result = true;
981
+
982
+ while (list($remotepath, $localpath) = each($filelist)) {
983
+
984
+ $localpath = rtrim($localpath, "/");
985
+ $remotepath = rtrim($remotepath, "/");
986
+
987
+ // attempt to create local path
988
+ if ($this->is_dir($remotepath)) {
989
+ $pathparts = explode("/", $localpath."/ "); // add one level, last level will be created as dir
990
+ } else {
991
+ $pathparts = explode("/", $localpath);
992
+ }
993
+ $checkpath = "";
994
+ for ($i=1; $i<sizeof($pathparts)-1; $i++) {
995
+ $checkpath .= "/" . $pathparts[$i];
996
+ if (!is_dir($checkpath)) {
997
+
998
+ $result &= mkdir($checkpath);
999
+ }
1000
+ }
1001
+
1002
+ if ($result) {
1003
+ // recurse directories
1004
+ if ($this->is_dir($remotepath)) {
1005
+ $list = $this->ls($remotepath);
1006
+
1007
+ $fl = array();
1008
+ foreach($list as $e) {
1009
+ $fullpath = urldecode($e['href']);
1010
+ $filename = basename($fullpath);
1011
+ if ($filename != '' and $fullpath != $remotepath . '/') {
1012
+ $fl[$remotepath."/".$filename] = $localpath."/".$filename;
1013
+ }
1014
+ }
1015
+ $result &= $this->mget($fl);
1016
+ } else {
1017
+ $result &= ($this->get_file($remotepath, $localpath));
1018
+ }
1019
+ }
1020
+ }
1021
+ return $result;
1022
+ }
1023
+
1024
+ // --------------------------------------------------------------------------
1025
+ // private xml callback and helper functions starting here
1026
+ // --------------------------------------------------------------------------
1027
+
1028
+
1029
+ /**
1030
+ * Private method _endelement
1031
+ *
1032
+ * a generic endElement method (used for all xml callbacks)
1033
+ * @param resource parser, string name
1034
+ * @access private
1035
+ */
1036
+
1037
+ function _endElement($parser, $name) {
1038
+ $this->_xmltree[$parser] = substr($this->_xmltree[$parser],0, strlen($this->_xmltree[$parser]) - (strlen($name) + 1));
1039
+ }
1040
+
1041
+ /**
1042
+ * Private method _propfind_startElement
1043
+ *
1044
+ * Is needed by public method ls.
1045
+ * Generic method will called by php xml_parse when a xml start element tag has been detected.
1046
+ * The xml tree will translated into a flat php array for easier access.
1047
+ * @param resource parser, string name, string attrs
1048
+ * @access private
1049
+ */
1050
+ function _propfind_startElement($parser, $name, $attrs) {
1051
+ // lower XML Names... maybe break a RFC, don't know ...
1052
+
1053
+ $propname = strtolower($name);
1054
+ $this->_xmltree[$parser] .= $propname . '_';
1055
+
1056
+ // translate xml tree to a flat array ...
1057
+ switch($this->_xmltree[$parser]) {
1058
+ case 'dav::multistatus_dav::response_':
1059
+ // new element in mu
1060
+ $this->_ls_ref =& $this->_ls[$parser][];
1061
+ break;
1062
+ case 'dav::multistatus_dav::response_dav::href_':
1063
+ $this->_ls_ref_cdata = &$this->_ls_ref['href'];
1064
+ break;
1065
+ case 'dav::multistatus_dav::response_dav::propstat_dav::prop_dav::creationdate_':
1066
+ $this->_ls_ref_cdata = &$this->_ls_ref['creationdate'];
1067
+ break;
1068
+ case 'dav::multistatus_dav::response_dav::propstat_dav::prop_dav::getlastmodified_':
1069
+ $this->_ls_ref_cdata = &$this->_ls_ref['lastmodified'];
1070
+ break;
1071
+ case 'dav::multistatus_dav::response_dav::propstat_dav::prop_dav::getcontenttype_':
1072
+ $this->_ls_ref_cdata = &$this->_ls_ref['getcontenttype'];
1073
+ break;
1074
+ case 'dav::multistatus_dav::response_dav::propstat_dav::prop_dav::getcontentlength_':
1075
+ $this->_ls_ref_cdata = &$this->_ls_ref['getcontentlength'];
1076
+ break;
1077
+ case 'dav::multistatus_dav::response_dav::propstat_dav::prop_dav::lockdiscovery_dav::activelock_dav::depth_':
1078
+ $this->_ls_ref_cdata = &$this->_ls_ref['activelock_depth'];
1079
+ break;
1080
+ case 'dav::multistatus_dav::response_dav::propstat_dav::prop_dav::lockdiscovery_dav::activelock_dav::owner_dav::href_':
1081
+ $this->_ls_ref_cdata = &$this->_ls_ref['activelock_owner'];
1082
+ break;
1083
+ case 'dav::multistatus_dav::response_dav::propstat_dav::prop_dav::lockdiscovery_dav::activelock_dav::owner_':
1084
+ $this->_ls_ref_cdata = &$this->_ls_ref['activelock_owner'];
1085
+ break;
1086
+ case 'dav::multistatus_dav::response_dav::propstat_dav::prop_dav::lockdiscovery_dav::activelock_dav::timeout_':
1087
+ $this->_ls_ref_cdata = &$this->_ls_ref['activelock_timeout'];
1088
+ break;
1089
+ case 'dav::multistatus_dav::response_dav::propstat_dav::prop_dav::lockdiscovery_dav::activelock_dav::locktoken_dav::href_':
1090
+ $this->_ls_ref_cdata = &$this->_ls_ref['activelock_token'];
1091
+ break;
1092
+ case 'dav::multistatus_dav::response_dav::propstat_dav::prop_dav::lockdiscovery_dav::activelock_dav::locktype_dav::write_':
1093
+ $this->_ls_ref_cdata = &$this->_ls_ref['activelock_type'];
1094
+ $this->_ls_ref_cdata = 'write';
1095
+ $this->_ls_ref_cdata = &$this->_null;
1096
+ break;
1097
+ case 'dav::multistatus_dav::response_dav::propstat_dav::prop_dav::resourcetype_dav::collection_':
1098
+ $this->_ls_ref_cdata = &$this->_ls_ref['resourcetype'];
1099
+ $this->_ls_ref_cdata = 'collection';
1100
+ $this->_ls_ref_cdata = &$this->_null;
1101
+ break;
1102
+ case 'dav::multistatus_dav::response_dav::propstat_dav::status_':
1103
+ $this->_ls_ref_cdata = &$this->_ls_ref['status'];
1104
+ break;
1105
+
1106
+ default:
1107
+ // handle unknown xml elements...
1108
+ $this->_ls_ref_cdata = &$this->_ls_ref[$this->_xmltree[$parser]];
1109
+ }
1110
+ }
1111
+
1112
+ /**
1113
+ * Private method _propfind_cData
1114
+ *
1115
+ * Is needed by public method ls.
1116
+ * Will be called by php xml_set_character_data_handler() when xml data has to be handled.
1117
+ * Stores data found into class var _ls_ref_cdata
1118
+ * @param resource parser, string cdata
1119
+ * @access private
1120
+ */
1121
+ function _propfind_cData($parser, $cdata) {
1122
+ if (trim($cdata) <> '') {
1123
+ $this->_ls_ref_cdata = $cdata;
1124
+ } else {
1125
+ // do nothing
1126
+ }
1127
+ }
1128
+
1129
+ /**
1130
+ * Private method _delete_startElement
1131
+ *
1132
+ * Is used by public method delete.
1133
+ * Will be called by php xml_parse.
1134
+ * @param resource parser, string name, string attrs)
1135
+ * @access private
1136
+ */
1137
+ function _delete_startElement($parser, $name, $attrs) {
1138
+ // lower XML Names... maybe break a RFC, don't know ...
1139
+ $propname = strtolower($name);
1140
+ $this->_xmltree[$parser] .= $propname . '_';
1141
+
1142
+ // translate xml tree to a flat array ...
1143
+ switch($this->_xmltree[$parser]) {
1144
+ case 'dav::multistatus_dav::response_':
1145
+ // new element in mu
1146
+ $this->_delete_ref =& $this->_delete[$parser][];
1147
+ break;
1148
+ case 'dav::multistatus_dav::response_dav::href_':
1149
+ $this->_delete_ref_cdata = &$this->_ls_ref['href'];
1150
+ break;
1151
+
1152
+ default:
1153
+ // handle unknown xml elements...
1154
+ $this->_delete_cdata = &$this->_delete_ref[$this->_xmltree[$parser]];
1155
+ }
1156
+ }
1157
+
1158
+
1159
+ /**
1160
+ * Private method _delete_cData
1161
+ *
1162
+ * Is used by public method delete.
1163
+ * Will be called by php xml_set_character_data_handler() when xml data has to be handled.
1164
+ * Stores data found into class var _delete_ref_cdata
1165
+ * @param resource parser, string cdata
1166
+ * @access private
1167
+ */
1168
+ function _delete_cData($parser, $cdata) {
1169
+ if (trim($cdata) <> '') {
1170
+ $this->_delete_ref_cdata = $cdata;
1171
+ } else {
1172
+ // do nothing
1173
+ }
1174
+ }
1175
+
1176
+
1177
+ /**
1178
+ * Private method _lock_startElement
1179
+ *
1180
+ * Is needed by public method lock.
1181
+ * Mmethod will called by php xml_parse when a xml start element tag has been detected.
1182
+ * The xml tree will translated into a flat php array for easier access.
1183
+ * @param resource parser, string name, string attrs
1184
+ * @access private
1185
+ */
1186
+ function _lock_startElement($parser, $name, $attrs) {
1187
+ // lower XML Names... maybe break a RFC, don't know ...
1188
+ $propname = strtolower($name);
1189
+ $this->_xmltree[$parser] .= $propname . '_';
1190
+
1191
+ // translate xml tree to a flat array ...
1192
+ /*
1193
+ dav::prop_dav::lockdiscovery_dav::activelock_dav::depth_=
1194
+ dav::prop_dav::lockdiscovery_dav::activelock_dav::owner_dav::href_=
1195
+ dav::prop_dav::lockdiscovery_dav::activelock_dav::timeout_=
1196
+ dav::prop_dav::lockdiscovery_dav::activelock_dav::locktoken_dav::href_=
1197
+ */
1198
+ switch($this->_xmltree[$parser]) {
1199
+ case 'dav::prop_dav::lockdiscovery_dav::activelock_':
1200
+ // new element
1201
+ $this->_lock_ref =& $this->_lock[$parser][];
1202
+ break;
1203
+ case 'dav::prop_dav::lockdiscovery_dav::activelock_dav::locktype_dav::write_':
1204
+ $this->_lock_ref_cdata = &$this->_lock_ref['locktype'];
1205
+ $this->_lock_cdata = 'write';
1206
+ $this->_lock_cdata = &$this->_null;
1207
+ break;
1208
+ case 'dav::prop_dav::lockdiscovery_dav::activelock_dav::lockscope_dav::exclusive_':
1209
+ $this->_lock_ref_cdata = &$this->_lock_ref['lockscope'];
1210
+ $this->_lock_ref_cdata = 'exclusive';
1211
+ $this->_lock_ref_cdata = &$this->_null;
1212
+ break;
1213
+ case 'dav::prop_dav::lockdiscovery_dav::activelock_dav::depth_':
1214
+ $this->_lock_ref_cdata = &$this->_lock_ref['depth'];
1215
+ break;
1216
+ case 'dav::prop_dav::lockdiscovery_dav::activelock_dav::owner_dav::href_':
1217
+ $this->_lock_ref_cdata = &$this->_lock_ref['owner'];
1218
+ break;
1219
+ case 'dav::prop_dav::lockdiscovery_dav::activelock_dav::timeout_':
1220
+ $this->_lock_ref_cdata = &$this->_lock_ref['timeout'];
1221
+ break;
1222
+ case 'dav::prop_dav::lockdiscovery_dav::activelock_dav::locktoken_dav::href_':
1223
+ $this->_lock_ref_cdata = &$this->_lock_ref['locktoken'];
1224
+ break;
1225
+ default:
1226
+ // handle unknown xml elements...
1227
+ $this->_lock_cdata = &$this->_lock_ref[$this->_xmltree[$parser]];
1228
+
1229
+ }
1230
+ }
1231
+
1232
+ /**
1233
+ * Private method _lock_cData
1234
+ *
1235
+ * Is used by public method lock.
1236
+ * Will be called by php xml_set_character_data_handler() when xml data has to be handled.
1237
+ * Stores data found into class var _lock_ref_cdata
1238
+ * @param resource parser, string cdata
1239
+ * @access private
1240
+ */
1241
+ function _lock_cData($parser, $cdata) {
1242
+ if (trim($cdata) <> '') {
1243
+ // $this->_error_log(($this->_xmltree[$parser]) . '='. htmlentities($cdata));
1244
+ $this->_lock_ref_cdata = $cdata;
1245
+ } else {
1246
+ // do nothing
1247
+ }
1248
+ }
1249
+
1250
+
1251
+ /**
1252
+ * Private method _header_add
1253
+ *
1254
+ * extends class var array _req
1255
+ * @param string string
1256
+ * @access private
1257
+ */
1258
+ function _header_add($string) {
1259
+ $this->_req[] = $string;
1260
+ }
1261
+
1262
+ /**
1263
+ * Private method _header_unset
1264
+ *
1265
+ * unsets class var array _req
1266
+ * @access private
1267
+ */
1268
+
1269
+ function _header_unset() {
1270
+ unset($this->_req);
1271
+ }
1272
+
1273
+ /**
1274
+ * Private method _create_basic_request
1275
+ *
1276
+ * creates by using private method _header_add an general request header.
1277
+ * @param string method
1278
+ * @access private
1279
+ */
1280
+ function _create_basic_request($method) {
1281
+ $request = '';
1282
+ $this->_header_add(sprintf('%s %s %s', $method, $this->_path, $this->_protocol));
1283
+ $this->_header_add(sprintf('Host: %s', $this->_server));
1284
+ // $request .= sprintf('Connection: Keep-Alive');
1285
+ $this->_header_add(sprintf('User-Agent: %s', $this->_user_agent));
1286
+ $this->_header_add(sprintf('Authorization: Basic %s', base64_encode("$this->_user:$this->_pass")));
1287
+ }
1288
+
1289
+ /**
1290
+ * Private method _send_request
1291
+ *
1292
+ * Sends a ready formed http/webdav request to webdav server.
1293
+ * @access private
1294
+ */
1295
+ function _send_request() {
1296
+ // check if stream is declared to be open
1297
+ // only logical check we are not sure if socket is really still open ...
1298
+ if ($this->_connection_closed) {
1299
+ // reopen it
1300
+ // be sure to close the open socket.
1301
+ $this->close();
1302
+ $this->_reopen();
1303
+ }
1304
+
1305
+ // convert array to string
1306
+ $buffer = implode("\r\n", $this->_req);
1307
+ $buffer .= "\r\n\r\n";
1308
+ $this->_error_log($buffer);
1309
+ fputs($this->_fp, $buffer);
1310
+ }
1311
+
1312
+ /**
1313
+ * Private method _get_respond
1314
+ *
1315
+ * Read the reponse of the webdav server.
1316
+ * Stores data into class vars _header for the header data and
1317
+ * _body for the rest of the response.
1318
+ * This routine is the weakest part of this class, because it very depends how php does handle a socket stream.
1319
+ * If the stream is blocked for some reason php is blocked as well.
1320
+ * @access private
1321
+ */
1322
+ function _get_respond() {
1323
+ $this->_error_log('_get_respond()');
1324
+ // init vars (good coding style ;-)
1325
+ $buffer = '';
1326
+ $header = '';
1327
+ // attention: do not make max_chunk_size to big....
1328
+ $max_chunk_size = 8192;
1329
+ // be sure we got a open ressource
1330
+ if (! $this->_fp) {
1331
+ $this->_error_log('socket is not open. Can not process response');
1332
+ return false;
1333
+ }
1334
+
1335
+ // following code maybe helps to improve socket behaviour ... more testing needed
1336
+ // disabled at the moment ...
1337
+ // socket_set_timeout($this->_fp,1 );
1338
+ // $socket_state = socket_get_status($this->_fp);
1339
+
1340
+ // read stream one byte by another until http header ends
1341
+ $i = 0;
1342
+ do {
1343
+ $header.=fread($this->_fp,1);
1344
+ $i++;
1345
+ } while (!preg_match('/\\r\\n\\r\\n$/',$header) && $i < $this->_maxheaderlenth);
1346
+
1347
+ $this->_error_log($header);
1348
+
1349
+ if (preg_match('/Connection: close\\r\\n/', $header)) {
1350
+ // This says that the server will close connection at the end of this stream.
1351
+ // Therefore we need to reopen the socket, before are sending the next request...
1352
+ $this->_error_log('Connection: close found');
1353
+ $this->_connection_closed = true;
1354
+ }
1355
+ // check how to get the data on socket stream
1356
+ // chunked or content-length (HTTP/1.1) or
1357
+ // one block until feof is received (HTTP/1.0)
1358
+ switch(true) {
1359
+ case (preg_match('/Transfer\\-Encoding:\\s+chunked\\r\\n/',$header)):
1360
+ $this->_error_log('Getting HTTP/1.1 chunked data...');
1361
+ do {
1362
+ $byte = '';
1363
+ $chunk_size='';
1364
+ do {
1365
+ $chunk_size.=$byte;
1366
+ $byte=fread($this->_fp,1);
1367
+ // check what happens while reading, because I do not really understand how php reads the socketstream...
1368
+ // but so far - it seems to work here - tested with php v4.3.1 on apache 1.3.27 and Debian Linux 3.0 ...
1369
+ if (strlen($byte) == 0) {
1370
+ $this->_error_log('_get_respond: warning --> read zero bytes');
1371
+ }
1372
+ } while ($byte!="\r" and strlen($byte)>0); // till we match the Carriage Return
1373
+ fread($this->_fp, 1); // also drop off the Line Feed
1374
+ $chunk_size=hexdec($chunk_size); // convert to a number in decimal system
1375
+ if ($chunk_size > 0) {
1376
+ $buffer .= fread($this->_fp,$chunk_size);
1377
+ }
1378
+ fread($this->_fp,2); // ditch the CRLF that trails the chunk
1379
+ } while ($chunk_size); // till we reach the 0 length chunk (end marker)
1380
+ break;
1381
+
1382
+ // check for a specified content-length
1383
+ case preg_match('/Content\\-Length:\\s+([0-9]*)\\r\\n/',$header,$matches):
1384
+ $this->_error_log('Getting data using Content-Length '. $matches[1]);
1385
+ // check if we the content data size is small enough to get it as one block
1386
+ if ($matches[1] <= $max_chunk_size ) {
1387
+ // only read something if Content-Length is bigger than 0
1388
+ if ($matches[1] > 0 ) {
1389
+ $buffer = fread($this->_fp, $matches[1]);
1390
+ } else {
1391
+ $buffer = '';
1392
+ }
1393
+ } else {
1394
+ // data is to big to handle it as one. Get it chunk per chunk...
1395
+ do {
1396
+ $mod = $max_chunk_size % ($matches[1] - strlen($buffer));
1397
+ $chunk_size = ($mod == $max_chunk_size ? $max_chunk_size : $matches[1] - strlen($buffer));
1398
+ $buffer .= fread($this->_fp, $chunk_size);
1399
+ $this->_error_log('mod: ' . $mod . ' chunk: ' . $chunk_size . ' total: ' . strlen($buffer));
1400
+ } while ($mod == $max_chunk_size);
1401
+ }
1402
+ break;
1403
+
1404
+ // check for 204 No Content
1405
+ // 204 responds have no body.
1406
+ // Therefore we do not need to read any data from socket stream.
1407
+ case preg_match('/HTTP\/1\.1\ 204/',$header):
1408
+ // nothing to do, just proceed
1409
+ $this->_error_log('204 No Content found. No further data to read..');
1410
+ break;
1411
+ default:
1412
+ // just get the data until foef appears...
1413
+ $this->_error_log('reading until feof...' . $header);
1414
+ socket_set_timeout($this->_fp,0 );
1415
+ while (!feof($this->_fp)) {
1416
+ $buffer .= fread($this->_fp, 4096);
1417
+ }
1418
+ // renew the socket timeout...does it do something ???? Is it needed. More debugging needed...
1419
+ socket_set_timeout($this->_fp, $this->_socket_timeout);
1420
+ }
1421
+
1422
+ $this->_header = $header;
1423
+ $this->_body = $buffer;
1424
+ // $this->_buffer = $header . "\r\n\r\n" . $buffer;
1425
+ $this->_error_log($this->_header);
1426
+ }
1427
+
1428
+
1429
+
1430
+ // --------------------------------------------------------------------------
1431
+ // private method _process_respond ...
1432
+ // analyse the reponse from server and divide into header and body part
1433
+ // returns an array filled with components
1434
+ /**
1435
+ * Private method _process_respond
1436
+ *
1437
+ * Processes the webdav server respond and detects its components (header, body)
1438
+ * and returns data array structure.
1439
+ * @return array ret_struct
1440
+ * @access private
1441
+ */
1442
+ function _process_respond() {
1443
+ $lines = explode("\r\n", $this->_header);
1444
+ $header_done = false;
1445
+ // $this->_error_log($this->_buffer);
1446
+ // First line should be a HTTP status line (see http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6)
1447
+ // Format is: HTTP-Version SP Status-Code SP Reason-Phrase CRLF
1448
+ list($ret_struct['status']['http-version'],
1449
+ $ret_struct['status']['status-code'],
1450
+ $ret_struct['status']['reason-phrase']) = explode(' ', $lines[0],3);
1451
+
1452
+ // print "HTTP Version: '$http_version' Status-Code: '$status_code' Reason Phrase: '$reason_phrase'<br>";
1453
+ // get the response header fields
1454
+ // See http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6
1455
+ for($i=1; $i<count($lines); $i++) {
1456
+ if (rtrim($lines[$i]) == '' && !$header_done) {
1457
+ $header_done = true;
1458
+ // print "--- response header end ---<br>";
1459
+
1460
+ }
1461
+ if (!$header_done ) {
1462
+ // store all found headers in array ...
1463
+ list($fieldname, $fieldvalue) = explode(':', $lines[$i]);
1464
+ // check if this header was allready set (apache 2.0 webdav module does this....).
1465
+ // If so we add the the value to the end the fieldvalue, separated by comma...
1466
+ if (! $ret_struct['header'][$fieldname]) {
1467
+ $ret_struct['header'][$fieldname] = trim($fieldvalue);
1468
+ } else {
1469
+ $ret_struct['header'][$fieldname] .= ',' . trim($fieldvalue);
1470
+ }
1471
+ }
1472
+ }
1473
+ // print 'string len of response_body:'. strlen($response_body);
1474
+ // print '[' . htmlentities($response_body) . ']';
1475
+ $ret_struct['body'] = $this->_body;
1476
+ return $ret_struct;
1477
+ }
1478
+
1479
+ /**
1480
+ * Private method _reopen
1481
+ *
1482
+ * Reopens a socket, if 'connection: closed'-header was received from server.
1483
+ * Uses public method open.
1484
+ * @access private
1485
+ */
1486
+ function _reopen() {
1487
+ // let's try to reopen a socket
1488
+ $this->_error_log('reopen a socket connection');
1489
+ return $this->open();
1490
+ /*
1491
+ $this->_fp = fsockopen ($this->_server, $this->_port, $this->_errno, $this->_errstr, 5);
1492
+ set_time_limit(180);
1493
+ socket_set_blocking($this->_fp, true);
1494
+ socket_set_timeout($this->_fp,5 );
1495
+ if (!$this->_fp) {
1496
+ $this->_error_log("$this->_errstr ($this->_errno)\n");
1497
+ return false;
1498
+ } else {
1499
+ $this->_connection_closed = false;
1500
+ $this->_error_log('reopen ok...' . $this->_fp);
1501
+ return true;
1502
+ }
1503
+ */
1504
+ }
1505
+
1506
+
1507
+ /**
1508
+ * Private method _translate_uri
1509
+ *
1510
+ * translates an uri to raw url encoded string.
1511
+ * Removes any html entity in uri
1512
+ * @param string uri
1513
+ * @return string translated_uri
1514
+ * @access private
1515
+ */
1516
+ function _translate_uri($uri) {
1517
+ // remove all html entities...
1518
+ $native_path = html_entity_decode($uri);
1519
+ $parts = explode('/', $native_path);
1520
+ for ($i = 0; $i < count($parts); $i++) {
1521
+ $parts[$i] = rawurlencode($parts[$i]);
1522
+ }
1523
+ return implode('/', $parts);
1524
+ }
1525
+
1526
+ // private method _error_log
1527
+ // writes debug information to what's in php.ini defined
1528
+
1529
+ /**
1530
+ * Private method _error_log
1531
+ *
1532
+ * a simple php error_log wrapper.
1533
+ * @param string err_string
1534
+ * @access private
1535
+ */
1536
+ function _error_log($err_string) {
1537
+ if ($this->_debug) {
1538
+ error_log($err_string);
1539
+ }
1540
+ }
1541
+ }
1542
+ ?>
app/libs/rackspace/cloudfiles.php ADDED
@@ -0,0 +1,2168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This is the PHP Cloud Files API.
4
+ *
5
+ * <code>
6
+ * # Authenticate to Cloud Files. The default is to automatically try
7
+ * # to re-authenticate if an authentication token expires.
8
+ * #
9
+ * # NOTE: Some versions of cURL include an outdated certificate authority (CA)
10
+ * # file. This API ships with a newer version obtained directly from
11
+ * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
12
+ * # call the CF_Authentication instance's 'ssl_use_cabundle()' method.
13
+ * #
14
+ * $auth = new CF_Authentication($username, $api_key);
15
+ * # $auth->ssl_use_cabundle(); # bypass cURL's old CA bundle
16
+ * $auth->authenticate();
17
+ *
18
+ * # Establish a connection to the storage system
19
+ * #
20
+ * # NOTE: Some versions of cURL include an outdated certificate authority (CA)
21
+ * # file. This API ships with a newer version obtained directly from
22
+ * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
23
+ * # call the CF_Connection instance's 'ssl_use_cabundle()' method.
24
+ * #
25
+ * $conn = new CF_Connection($auth);
26
+ * # $conn->ssl_use_cabundle(); # bypass cURL's old CA bundle
27
+ *
28
+ * # Create a remote Container and storage Object
29
+ * #
30
+ * $images = $conn->create_container("photos");
31
+ * $bday = $images->create_object("first_birthday.jpg");
32
+ *
33
+ * # Upload content from a local file by streaming it. Note that we use
34
+ * # a "float" for the file size to overcome PHP's 32-bit integer limit for
35
+ * # very large files.
36
+ * #
37
+ * $fname = "/home/user/photos/birthdays/birthday1.jpg"; # filename to upload
38
+ * $size = (float) sprintf("%u", filesize($fname));
39
+ * $fp = open($fname, "r");
40
+ * $bday->write($fp, $size);
41
+ *
42
+ * # Or... use a convenience function instead
43
+ * #
44
+ * $bday->load_from_filename("/home/user/photos/birthdays/birthday1.jpg");
45
+ *
46
+ * # Now, publish the "photos" container to serve the images by CDN.
47
+ * # Use the "$uri" value to put in your web pages or send the link in an
48
+ * # email message, etc.
49
+ * #
50
+ * $uri = $images->make_public();
51
+ *
52
+ * # Or... print out the Object's public URI
53
+ * #
54
+ * print $bday->public_uri();
55
+ * </code>
56
+ *
57
+ * See the included tests directory for additional sample code.
58
+ *
59
+ * Requres PHP 5.x (for Exceptions and OO syntax) and PHP's cURL module.
60
+ *
61
+ * It uses the supporting "cloudfiles_http.php" module for HTTP(s) support and
62
+ * allows for connection re-use and streaming of content into/out of Cloud Files
63
+ * via PHP's cURL module.
64
+ *
65
+ * See COPYING for license information.
66
+ *
67
+ * @author Eric "EJ" Johnson <ej@racklabs.com>
68
+ * @copyright Copyright (c) 2008, Rackspace US, Inc.
69
+ * @package php-cloudfiles
70
+ */
71
+
72
+ /**
73
+ */
74
+ require_once("cloudfiles_exceptions.php");
75
+ require("cloudfiles_http.php");
76
+ define("DEFAULT_CF_API_VERSION", 1);
77
+ define("MAX_CONTAINER_NAME_LEN", 256);
78
+ define("MAX_OBJECT_NAME_LEN", 1024);
79
+ define("MAX_OBJECT_SIZE", 5*1024*1024*1024+1); # bigger than S3! ;-)
80
+
81
+ /**
82
+ * Class for handling Cloud Files Authentication, call it's {@link authenticate()}
83
+ * method to obtain authorized service urls and an authentication token.
84
+ *
85
+ * Example:
86
+ * <code>
87
+ * # Create the authentication instance
88
+ * #
89
+ * $auth = new CF_Authentication("username", "api_key");
90
+ *
91
+ * # NOTE: Some versions of cURL include an outdated certificate authority (CA)
92
+ * # file. This API ships with a newer version obtained directly from
93
+ * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
94
+ * # call the CF_Authentication instance's 'ssl_use_cabundle()' method.
95
+ * #
96
+ * # $auth->ssl_use_cabundle(); # bypass cURL's old CA bundle
97
+ *
98
+ * # Perform authentication request
99
+ * #
100
+ * $auth->authenticate();
101
+ * </code>
102
+ *
103
+ * @package php-cloudfiles
104
+ */
105
+ class CF_Authentication
106
+ {
107
+ public $dbug;
108
+ public $username;
109
+ public $api_key;
110
+ public $auth_host;
111
+ public $account;
112
+
113
+ /**
114
+ * Instance variables that are set after successful authentication
115
+ */
116
+ public $storage_url;
117
+ public $cdnm_url;
118
+ public $auth_token;
119
+
120
+ /**
121
+ * Class constructor (PHP 5 syntax)
122
+ *
123
+ * @param string $username Mosso username
124
+ * @param string $api_key Mosso API Access Key
125
+ * @param string $account <b>Deprecated</b> <i>Account name</i>
126
+ * @param string $auth_host <b>Deprecated</b> <i>Authentication service URI</i>
127
+ */
128
+ function __construct($username=NULL, $api_key=NULL, $account=NULL, $auth_host=NULL)
129
+ {
130
+
131
+ $this->dbug = False;
132
+ $this->username = $username;
133
+ $this->api_key = $api_key;
134
+ $this->account_name = $account;
135
+ $this->auth_host = $auth_host;
136
+
137
+ $this->storage_url = NULL;
138
+ $this->cdnm_url = NULL;
139
+ $this->auth_token = NULL;
140
+
141
+ $this->cfs_http = new CF_Http(DEFAULT_CF_API_VERSION);
142
+ }
143
+
144
+ /**
145
+ * Use the Certificate Authority bundle included with this API
146
+ *
147
+ * Most versions of PHP with cURL support include an outdated Certificate
148
+ * Authority (CA) bundle (the file that lists all valid certificate
149
+ * signing authorities). The SSL certificates used by the Cloud Files
150
+ * storage system are perfectly valid but have been created/signed by
151
+ * a CA not listed in these outdated cURL distributions.
152
+ *
153
+ * As a work-around, we've included an updated CA bundle obtained
154
+ * directly from cURL's web site (http://curl.haxx.se). You can direct
155
+ * the API to use this CA bundle by calling this method prior to making
156
+ * any remote calls. The best place to use this method is right after
157
+ * the CF_Authentication instance has been instantiated.
158
+ *
159
+ * You can specify your own CA bundle by passing in the full pathname
160
+ * to the bundle. You can use the included CA bundle by leaving the
161
+ * argument blank.
162
+ *
163
+ * @param string $path Specify path to CA bundle (default to included)
164
+ */
165
+ function ssl_use_cabundle($path=NULL)
166
+ {
167
+ $this->cfs_http->ssl_use_cabundle($path);
168
+ }
169
+
170
+ /**
171
+ * Attempt to validate Username/API Access Key
172
+ *
173
+ * Attempts to validate credentials with the authentication service. It
174
+ * either returns <kbd>True</kbd> or throws an Exception. Accepts a single
175
+ * (optional) argument for the storage system API version.
176
+ *
177
+ * Example:
178
+ * <code>
179
+ * # Create the authentication instance
180
+ * #
181
+ * $auth = new CF_Authentication("username", "api_key");
182
+ *
183
+ * # Perform authentication request
184
+ * #
185
+ * $auth->authenticate();
186
+ * </code>
187
+ *
188
+ * @param string $version API version for Auth service (optional)
189
+ * @return boolean <kbd>True</kbd> if successfully authenticated
190
+ * @throws AuthenticationException invalid credentials
191
+ * @throws InvalidResponseException invalid response
192
+ */
193
+ function authenticate($version=DEFAULT_CF_API_VERSION)
194
+ {
195
+ list($status,$reason,$surl,$curl,$atoken) =
196
+ $this->cfs_http->authenticate($this->username, $this->api_key,
197
+ $this->account_name, $this->auth_host);
198
+
199
+ if ($status == 401) {
200
+ throw new AuthenticationException("Invalid username or access key.");
201
+ }
202
+ if ($status != 204) {
203
+ throw new InvalidResponseException(
204
+ "Unexpected response (".$status."): ".$reason);
205
+ }
206
+
207
+ if (!($surl || $curl) || !$atoken) {
208
+ throw new InvalidResponseException(
209
+ "Expected headers missing from auth service.");
210
+ }
211
+ $this->storage_url = $surl;
212
+ $this->cdnm_url = $curl;
213
+ $this->auth_token = $atoken;
214
+ return True;
215
+ }
216
+ /**
217
+ * Use Cached Token and Storage URL's rather then grabbing from the Auth System
218
+ *
219
+ * Example:
220
+ * <code>
221
+ * #Create an Auth instance
222
+ * $auth = new CF_Authentication();
223
+ * #Pass Cached URL's and Token as Args
224
+ * $auth->load_cached_credentials("auth_token", "storage_url", "cdn_management_url");
225
+ * </code>
226
+ *
227
+ * @param string $auth_token A Cloud Files Auth Token (Required)
228
+ * @param string $storage_url The Cloud Files Storage URL (Required)
229
+ * @param string $cdnm_url CDN Management URL (Required)
230
+ * @return boolean <kbd>True</kbd> if successful
231
+ * @throws SyntaxException If any of the Required Arguments are missing
232
+ */
233
+ function load_cached_credentials($auth_token, $storage_url, $cdnm_url)
234
+ {
235
+ if(!$storage_url || !$cdnm_url)
236
+ {
237
+ throw new SyntaxException("Missing Required Interface URL's!");
238
+ return False;
239
+ }
240
+ if(!$auth_token)
241
+ {
242
+ throw new SyntaxException("Missing Auth Token!");
243
+ return False;
244
+ }
245
+
246
+ $this->storage_url = $storage_url;
247
+ $this->cdnm_url = $cdnm_url;
248
+ $this->auth_token = $auth_token;
249
+ return True;
250
+ }
251
+ /**
252
+ * Grab Cloud Files info to be Cached for later use with the load_cached_credentials method.
253
+ *
254
+ * Example:
255
+ * <code>
256
+ * #Create an Auth instance
257
+ * $auth = new CF_Authentication("UserName","API_Key");
258
+ * $auth->authenticate();
259
+ * $array = $auth->export_credentials();
260
+ * </code>
261
+ *
262
+ * @return array of url's and an auth token.
263
+ */
264
+ function export_credentials()
265
+ {
266
+ $arr = array();
267
+ $arr['storage_url'] = $this->storage_url;
268
+ $arr['cdnm_url'] = $this->cdnm_url;
269
+ $arr['auth_token'] = $this->auth_token;
270
+
271
+ return $arr;
272
+ }
273
+
274
+
275
+ /**
276
+ * Make sure the CF_Authentication instance has authenticated.
277
+ *
278
+ * Ensures that the instance variables necessary to communicate with
279
+ * Cloud Files have been set from a previous authenticate() call.
280
+ *
281
+ * @return boolean <kbd>True</kbd> if successfully authenticated
282
+ */
283
+ function authenticated()
284
+ {
285
+ if (!($this->storage_url || $this->cdnm_url) || !$this->auth_token) {
286
+ return False;
287
+ }
288
+ return True;
289
+ }
290
+
291
+ /**
292
+ * Toggle debugging - set cURL verbose flag
293
+ */
294
+ function setDebug($bool)
295
+ {
296
+ $this->dbug = $bool;
297
+ $this->cfs_http->setDebug($bool);
298
+ }
299
+ }
300
+
301
+ /**
302
+ * Class for establishing connections to the Cloud Files storage system.
303
+ * Connection instances are used to communicate with the storage system at
304
+ * the account level; listing and deleting Containers and returning Container
305
+ * instances.
306
+ *
307
+ * Example:
308
+ * <code>
309
+ * # Create the authentication instance
310
+ * #
311
+ * $auth = new CF_Authentication("username", "api_key");
312
+ *
313
+ * # Perform authentication request
314
+ * #
315
+ * $auth->authenticate();
316
+ *
317
+ * # Create a connection to the storage/cdn system(s) and pass in the
318
+ * # validated CF_Authentication instance.
319
+ * #
320
+ * $conn = new CF_Connection($auth);
321
+ *
322
+ * # NOTE: Some versions of cURL include an outdated certificate authority (CA)
323
+ * # file. This API ships with a newer version obtained directly from
324
+ * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
325
+ * # call the CF_Authentication instance's 'ssl_use_cabundle()' method.
326
+ * #
327
+ * # $conn->ssl_use_cabundle(); # bypass cURL's old CA bundle
328
+ * </code>
329
+ *
330
+ * @package php-cloudfiles
331
+ */
332
+ class CF_Connection
333
+ {
334
+ public $dbug;
335
+ public $cfs_http;
336
+ public $cfs_auth;
337
+
338
+ /**
339
+ * Pass in a previously authenticated CF_Authentication instance.
340
+ *
341
+ * Example:
342
+ * <code>
343
+ * # Create the authentication instance
344
+ * #
345
+ * $auth = new CF_Authentication("username", "api_key");
346
+ *
347
+ * # Perform authentication request
348
+ * #
349
+ * $auth->authenticate();
350
+ *
351
+ * # Create a connection to the storage/cdn system(s) and pass in the
352
+ * # validated CF_Authentication instance.
353
+ * #
354
+ * $conn = new CF_Connection($auth);
355
+ *
356
+ * # If you are connecting via Rackspace servers and have access
357
+ * # to the servicenet network you can set the $servicenet to True
358
+ * # like this.
359
+ *
360
+ * $conn = new CF_Connection($auth, $servicenet=True);
361
+ *
362
+ * </code>
363
+ *
364
+ * If the environement variable RACKSPACE_SERVICENET is defined it will
365
+ * force to connect via the servicenet.
366
+ *
367
+ * @param obj $cfs_auth previously authenticated CF_Authentication instance
368
+ * @param boolean $servicenet enable/disable access via Rackspace servicenet.
369
+ * @throws AuthenticationException not authenticated
370
+ */
371
+ function __construct($cfs_auth, $servicenet=False)
372
+ {
373
+ if (isset($_ENV['RACKSPACE_SERVICENET']))
374
+ $servicenet=True;
375
+ $this->cfs_http = new CF_Http(DEFAULT_CF_API_VERSION);
376
+ $this->cfs_auth = $cfs_auth;
377
+ if (!$this->cfs_auth->authenticated()) {
378
+ $e = "Need to pass in a previously authenticated ";
379
+ $e .= "CF_Authentication instance.";
380
+ throw new AuthenticationException($e);
381
+ }
382
+ $this->cfs_http->setCFAuth($this->cfs_auth, $servicenet=$servicenet);
383
+ $this->dbug = False;
384
+ }
385
+
386
+ /**
387
+ * Toggle debugging of instance and back-end HTTP module
388
+ *
389
+ * @param boolean $bool enable/disable cURL debugging
390
+ */
391
+ function setDebug($bool)
392
+ {
393
+ $this->dbug = (boolean) $bool;
394
+ $this->cfs_http->setDebug($this->dbug);
395
+ }
396
+
397
+ /**
398
+ * Close a connection
399
+ *
400
+ * Example:
401
+ * <code>
402
+ *
403
+ * $conn->close();
404
+ *
405
+ * </code>
406
+ *
407
+ * Will close all current cUrl active connections.
408
+ *
409
+ */
410
+ public function close()
411
+ {
412
+ $this->cfs_http->close();
413
+ }
414
+
415
+ /**
416
+ * Cloud Files account information
417
+ *
418
+ * Return an array of two floats (since PHP only supports 32-bit integers);
419
+ * number of containers on the account and total bytes used for the account.
420
+ *
421
+ * Example:
422
+ * <code>
423
+ * # ... authentication code excluded (see previous examples) ...
424
+ * #
425
+ * $conn = new CF_Authentication($auth);
426
+ *
427
+ * list($quantity, $bytes) = $conn->get_info();
428
+ * print "Number of containers: " . $quantity . "\n";
429
+ * print "Bytes stored in container: " . $bytes . "\n";
430
+ * </code>
431
+ *
432
+ * @return array (number of containers, total bytes stored)
433
+ * @throws InvalidResponseException unexpected response
434
+ */
435
+ function get_info()
436
+ {
437
+ list($status, $reason, $container_count, $total_bytes) =
438
+ $this->cfs_http->head_account();
439
+ #if ($status == 401 && $this->_re_auth()) {
440
+ # return $this->get_info();
441
+ #}
442
+ if ($status < 200 || $status > 299) {
443
+ throw new InvalidResponseException(
444
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
445
+ }
446
+ return array($container_count, $total_bytes);
447
+ }
448
+
449
+ /**
450
+ * Create a Container
451
+ *
452
+ * Given a Container name, return a Container instance, creating a new
453
+ * remote Container if it does not exit.
454
+ *
455
+ * Example:
456
+ * <code>
457
+ * # ... authentication code excluded (see previous examples) ...
458
+ * #
459
+ * $conn = new CF_Authentication($auth);
460
+ *
461
+ * $images = $conn->create_container("my photos");
462
+ * </code>
463
+ *
464
+ * @param string $container_name container name
465
+ * @return CF_Container
466
+ * @throws SyntaxException invalid name
467
+ * @throws InvalidResponseException unexpected response
468
+ */
469
+ function create_container($container_name=NULL)
470
+ {
471
+ if ($container_name != "0" and !isset($container_name))
472
+ throw new SyntaxException("Container name not set.");
473
+
474
+ if (!isset($container_name) or $container_name == "")
475
+ throw new SyntaxException("Container name not set.");
476
+
477
+ if (strpos($container_name, "/") !== False) {
478
+ $r = "Container name '".$container_name;
479
+ $r .= "' cannot contain a '/' character.";
480
+ throw new SyntaxException($r);
481
+ }
482
+ if (strlen($container_name) > MAX_CONTAINER_NAME_LEN) {
483
+ throw new SyntaxException(sprintf(
484
+ "Container name exeeds %d bytes.",
485
+ MAX_CONTAINER_NAME_LEN));
486
+ }
487
+
488
+ $return_code = $this->cfs_http->create_container($container_name);
489
+ if (!$return_code) {
490
+ throw new InvalidResponseException("Invalid response ("
491
+ . $return_code. "): " . $this->cfs_http->get_error());
492
+ }
493
+ #if ($status == 401 && $this->_re_auth()) {
494
+ # return $this->create_container($container_name);
495
+ #}
496
+ if ($return_code != 201 && $return_code != 202) {
497
+ throw new InvalidResponseException(
498
+ "Invalid response (".$return_code."): "
499
+ . $this->cfs_http->get_error());
500
+ }
501
+ return new CF_Container($this->cfs_auth, $this->cfs_http, $container_name);
502
+ }
503
+
504
+ /**
505
+ * Delete a Container
506
+ *
507
+ * Given either a Container instance or name, remove the remote Container.
508
+ * The Container must be empty prior to removing it.
509
+ *
510
+ * Example:
511
+ * <code>
512
+ * # ... authentication code excluded (see previous examples) ...
513
+ * #
514
+ * $conn = new CF_Authentication($auth);
515
+ *
516
+ * $conn->delete_container("my photos");
517
+ * </code>
518
+ *
519
+ * @param string|obj $container container name or instance
520
+ * @return boolean <kbd>True</kbd> if successfully deleted
521
+ * @throws SyntaxException missing proper argument
522
+ * @throws InvalidResponseException invalid response
523
+ * @throws NonEmptyContainerException container not empty
524
+ * @throws NoSuchContainerException remote container does not exist
525
+ */
526
+ function delete_container($container=NULL)
527
+ {
528
+ $container_name = NULL;
529
+
530
+ if (is_object($container)) {
531
+ if (get_class($container) == "CF_Container") {
532
+ $container_name = $container->name;
533
+ }
534
+ }
535
+ if (is_string($container)) {
536
+ $container_name = $container;
537
+ }
538
+
539
+ if ($container_name != "0" and !isset($container_name))
540
+ throw new SyntaxException("Must specify container object or name.");
541
+
542
+ $return_code = $this->cfs_http->delete_container($container_name);
543
+
544
+ if (!$return_code) {
545
+ throw new InvalidResponseException("Failed to obtain http response");
546
+ }
547
+ #if ($status == 401 && $this->_re_auth()) {
548
+ # return $this->delete_container($container);
549
+ #}
550
+ if ($return_code == 409) {
551
+ throw new NonEmptyContainerException(
552
+ "Container must be empty prior to removing it.");
553
+ }
554
+ if ($return_code == 404) {
555
+ throw new NoSuchContainerException(
556
+ "Specified container did not exist to delete.");
557
+ }
558
+ if ($return_code != 204) {
559
+ throw new InvalidResponseException(
560
+ "Invalid response (".$return_code."): "
561
+ . $this->cfs_http->get_error());
562
+ }
563
+ return True;
564
+ }
565
+
566
+ /**
567
+ * Return a Container instance
568
+ *
569
+ * For the given name, return a Container instance if the remote Container
570
+ * exists, otherwise throw a Not Found exception.
571
+ *
572
+ * Example:
573
+ * <code>
574
+ * # ... authentication code excluded (see previous examples) ...
575
+ * #
576
+ * $conn = new CF_Authentication($auth);
577
+ *
578
+ * $images = $conn->get_container("my photos");
579
+ * print "Number of Objects: " . $images->count . "\n";
580
+ * print "Bytes stored in container: " . $images->bytes . "\n";
581
+ * </code>
582
+ *
583
+ * @param string $container_name name of the remote Container
584
+ * @return container CF_Container instance
585
+ * @throws NoSuchContainerException thrown if no remote Container
586
+ * @throws InvalidResponseException unexpected response
587
+ */
588
+ function get_container($container_name=NULL)
589
+ {
590
+ list($status, $reason, $count, $bytes) =
591
+ $this->cfs_http->head_container($container_name);
592
+ #if ($status == 401 && $this->_re_auth()) {
593
+ # return $this->get_container($container_name);
594
+ #}
595
+ if ($status == 404) {
596
+ throw new NoSuchContainerException("Container not found.");
597
+ }
598
+ if ($status < 200 || $status > 299) {
599
+ throw new InvalidResponseException(
600
+ "Invalid response: ".$this->cfs_http->get_error());
601
+ }
602
+ return new CF_Container($this->cfs_auth, $this->cfs_http,
603
+ $container_name, $count, $bytes);
604
+ }
605
+
606
+ /**
607
+ * Return array of Container instances
608
+ *
609
+ * Return an array of CF_Container instances on the account. The instances
610
+ * will be fully populated with Container attributes (bytes stored and
611
+ * Object count)
612
+ *
613
+ * Example:
614
+ * <code>
615
+ * # ... authentication code excluded (see previous examples) ...
616
+ * #
617
+ * $conn = new CF_Authentication($auth);
618
+ *
619
+ * $clist = $conn->get_containers();
620
+ * foreach ($clist as $cont) {
621
+ * print "Container name: " . $cont->name . "\n";
622
+ * print "Number of Objects: " . $cont->count . "\n";
623
+ * print "Bytes stored in container: " . $cont->bytes . "\n";
624
+ * }
625
+ * </code>
626
+ *
627
+ * @return array An array of CF_Container instances
628
+ * @throws InvalidResponseException unexpected response
629
+ */
630
+ function get_containers($limit=0, $marker=NULL)
631
+ {
632
+ list($status, $reason, $container_info) =
633
+ $this->cfs_http->list_containers_info($limit, $marker);
634
+ #if ($status == 401 && $this->_re_auth()) {
635
+ # return $this->get_containers();
636
+ #}
637
+ if ($status < 200 || $status > 299) {
638
+ throw new InvalidResponseException(
639
+ "Invalid response: ".$this->cfs_http->get_error());
640
+ }
641
+ $containers = array();
642
+ foreach ($container_info as $name => $info) {
643
+ $containers[] = new CF_Container($this->cfs_auth, $this->cfs_http,
644
+ $info['name'], $info["count"], $info["bytes"], False);
645
+ }
646
+ return $containers;
647
+ }
648
+
649
+ /**
650
+ * Return list of remote Containers
651
+ *
652
+ * Return an array of strings containing the names of all remote Containers.
653
+ *
654
+ * Example:
655
+ * <code>
656
+ * # ... authentication code excluded (see previous examples) ...
657
+ * #
658
+ * $conn = new CF_Authentication($auth);
659
+ *
660
+ * $container_list = $conn->list_containers();
661
+ * print_r($container_list);
662
+ * Array
663
+ * (
664
+ * [0] => "my photos",
665
+ * [1] => "my docs"
666
+ * )
667
+ * </code>
668
+ *
669
+ * @param integer $limit restrict results to $limit Containers
670
+ * @param string $marker return results greater than $marker
671
+ * @return array list of remote Containers
672
+ * @throws InvalidResponseException unexpected response
673
+ */
674
+ function list_containers($limit=0, $marker=NULL)
675
+ {
676
+ list($status, $reason, $containers) =
677
+ $this->cfs_http->list_containers($limit, $marker);
678
+ #if ($status == 401 && $this->_re_auth()) {
679
+ # return $this->list_containers($limit, $marker);
680
+ #}
681
+ if ($status < 200 || $status > 299) {
682
+ throw new InvalidResponseException(
683
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
684
+ }
685
+ return $containers;
686
+ }
687
+
688
+ /**
689
+ * Return array of information about remote Containers
690
+ *
691
+ * Return a nested array structure of Container info.
692
+ *
693
+ * Example:
694
+ * <code>
695
+ * # ... authentication code excluded (see previous examples) ...
696
+ * #
697
+ *
698
+ * $container_info = $conn->list_containers_info();
699
+ * print_r($container_info);
700
+ * Array
701
+ * (
702
+ * ["my photos"] =>
703
+ * Array
704
+ * (
705
+ * ["bytes"] => 78,
706
+ * ["count"] => 2
707
+ * )
708
+ * ["docs"] =>
709
+ * Array
710
+ * (
711
+ * ["bytes"] => 37323,
712
+ * ["count"] => 12
713
+ * )
714
+ * )
715
+ * </code>
716
+ *
717
+ * @param integer $limit restrict results to $limit Containers
718
+ * @param string $marker return results greater than $marker
719
+ * @return array nested array structure of Container info
720
+ * @throws InvalidResponseException unexpected response
721
+ */
722
+ function list_containers_info($limit=0, $marker=NULL)
723
+ {
724
+ list($status, $reason, $container_info) =
725
+ $this->cfs_http->list_containers_info($limit, $marker);
726
+ #if ($status == 401 && $this->_re_auth()) {
727
+ # return $this->list_containers_info($limit, $marker);
728
+ #}
729
+ if ($status < 200 || $status > 299) {
730
+ throw new InvalidResponseException(
731
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
732
+ }
733
+ return $container_info;
734
+ }
735
+
736
+ /**
737
+ * Return list of Containers that have been published to the CDN.
738
+ *
739
+ * Return an array of strings containing the names of published Containers.
740
+ * Note that this function returns the list of any Container that has
741
+ * ever been CDN-enabled regardless of it's existence in the storage
742
+ * system.
743
+ *
744
+ * Example:
745
+ * <code>
746
+ * # ... authentication code excluded (see previous examples) ...
747
+ * #
748
+ * $conn = new CF_Authentication($auth);
749
+ *
750
+ * $public_containers = $conn->list_public_containers();
751
+ * print_r($public_containers);
752
+ * Array
753
+ * (
754
+ * [0] => "images",
755
+ * [1] => "css",
756
+ * [2] => "javascript"
757
+ * )
758
+ * </code>
759
+ *
760
+ * @return array list of published Container names
761
+ * @throws InvalidResponseException unexpected response
762
+ */
763
+ function list_public_containers()
764
+ {
765
+ list($status, $reason, $containers) =
766
+ $this->cfs_http->list_cdn_containers();
767
+ #if ($status == 401 && $this->_re_auth()) {
768
+ # return $this->list_public_containers();
769
+ #}
770
+ if ($status < 200 || $status > 299) {
771
+ throw new InvalidResponseException(
772
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
773
+ }
774
+ return $containers;
775
+ }
776
+
777
+ /**
778
+ * Set a user-supplied callback function to report download progress
779
+ *
780
+ * The callback function is used to report incremental progress of a data
781
+ * download functions (e.g. $container->list_objects(), $obj->read(), etc).
782
+ * The specified function will be periodically called with the number of
783
+ * bytes transferred until the entire download is complete. This callback
784
+ * function can be useful for implementing "progress bars" for large
785
+ * downloads.
786
+ *
787
+ * The specified callback function should take a single integer parameter.
788
+ *
789
+ * <code>
790
+ * function read_callback($bytes_transferred) {
791
+ * print ">> downloaded " . $bytes_transferred . " bytes.\n";
792
+ * # ... do other things ...
793
+ * return;
794
+ * }
795
+ *
796
+ * $conn = new CF_Connection($auth_obj);
797
+ * $conn->set_read_progress_function("read_callback");
798
+ * print_r($conn->list_containers());
799
+ *
800
+ * # output would look like this:
801
+ * #
802
+ * >> downloaded 10 bytes.
803
+ * >> downloaded 11 bytes.
804
+ * Array
805
+ * (
806
+ * [0] => fuzzy.txt
807
+ * [1] => space name
808
+ * )
809
+ * </code>
810
+ *
811
+ * @param string $func_name the name of the user callback function
812
+ */
813
+ function set_read_progress_function($func_name)
814
+ {
815
+ $this->cfs_http->setReadProgressFunc($func_name);
816
+ }
817
+
818
+ /**
819
+ * Set a user-supplied callback function to report upload progress
820
+ *
821
+ * The callback function is used to report incremental progress of a data
822
+ * upload functions (e.g. $obj->write() call). The specified function will
823
+ * be periodically called with the number of bytes transferred until the
824
+ * entire upload is complete. This callback function can be useful
825
+ * for implementing "progress bars" for large uploads/downloads.
826
+ *
827
+ * The specified callback function should take a single integer parameter.
828
+ *
829
+ * <code>
830
+ * function write_callback($bytes_transferred) {
831
+ * print ">> uploaded " . $bytes_transferred . " bytes.\n";
832
+ * # ... do other things ...
833
+ * return;
834
+ * }
835
+ *
836
+ * $conn = new CF_Connection($auth_obj);
837
+ * $conn->set_write_progress_function("write_callback");
838
+ * $container = $conn->create_container("stuff");
839
+ * $obj = $container->create_object("foo");
840
+ * $obj->write("The callback function will be called during upload.");
841
+ *
842
+ * # output would look like this:
843
+ * # >> uploaded 51 bytes.
844
+ * #
845
+ * </code>
846
+ *
847
+ * @param string $func_name the name of the user callback function
848
+ */
849
+ function set_write_progress_function($func_name)
850
+ {
851
+ $this->cfs_http->setWriteProgressFunc($func_name);
852
+ }
853
+
854
+ /**
855
+ * Use the Certificate Authority bundle included with this API
856
+ *
857
+ * Most versions of PHP with cURL support include an outdated Certificate
858
+ * Authority (CA) bundle (the file that lists all valid certificate
859
+ * signing authorities). The SSL certificates used by the Cloud Files
860
+ * storage system are perfectly valid but have been created/signed by
861
+ * a CA not listed in these outdated cURL distributions.
862
+ *
863
+ * As a work-around, we've included an updated CA bundle obtained
864
+ * directly from cURL's web site (http://curl.haxx.se). You can direct
865
+ * the API to use this CA bundle by calling this method prior to making
866
+ * any remote calls. The best place to use this method is right after
867
+ * the CF_Authentication instance has been instantiated.
868
+ *
869
+ * You can specify your own CA bundle by passing in the full pathname
870
+ * to the bundle. You can use the included CA bundle by leaving the
871
+ * argument blank.
872
+ *
873
+ * @param string $path Specify path to CA bundle (default to included)
874
+ */
875
+ function ssl_use_cabundle($path=NULL)
876
+ {
877
+ $this->cfs_http->ssl_use_cabundle($path);
878
+ }
879
+
880
+ #private function _re_auth()
881
+ #{
882
+ # $new_auth = new CF_Authentication(
883
+ # $this->cfs_auth->username,
884
+ # $this->cfs_auth->api_key,
885
+ # $this->cfs_auth->auth_host,
886
+ # $this->cfs_auth->account);
887
+ # $new_auth->authenticate();
888
+ # $this->cfs_auth = $new_auth;
889
+ # $this->cfs_http->setCFAuth($this->cfs_auth);
890
+ # return True;
891
+ #}
892
+ }
893
+
894
+ /**
895
+ * Container operations
896
+ *
897
+ * Containers are storage compartments where you put your data (objects).
898
+ * A container is similar to a directory or folder on a conventional filesystem
899
+ * with the exception that they exist in a flat namespace, you can not create
900
+ * containers inside of containers.
901
+ *
902
+ * You also have the option of marking a Container as "public" so that the
903
+ * Objects stored in the Container are publicly available via the CDN.
904
+ *
905
+ * @package php-cloudfiles
906
+ */
907
+ class CF_Container
908
+ {
909
+ public $cfs_auth;
910
+ public $cfs_http;
911
+ public $name;
912
+ public $object_count;
913
+ public $bytes_used;
914
+
915
+ public $cdn_enabled;
916
+ public $cdn_uri;
917
+ public $cdn_ttl;
918
+ public $cdn_log_retention;
919
+ public $cdn_acl_user_agent;
920
+ public $cdn_acl_referrer;
921
+
922
+ /**
923
+ * Class constructor
924
+ *
925
+ * Constructor for Container
926
+ *
927
+ * @param obj $cfs_auth CF_Authentication instance
928
+ * @param obj $cfs_http HTTP connection manager
929
+ * @param string $name name of Container
930
+ * @param int $count number of Objects stored in this Container
931
+ * @param int $bytes number of bytes stored in this Container
932
+ * @throws SyntaxException invalid Container name
933
+ */
934
+ function __construct(&$cfs_auth, &$cfs_http, $name, $count=0,
935
+ $bytes=0, $docdn=True)
936
+ {
937
+ if (strlen($name) > MAX_CONTAINER_NAME_LEN) {
938
+ throw new SyntaxException("Container name exceeds "
939
+ . "maximum allowed length.");
940
+ }
941
+ if (strpos($name, "/") !== False) {
942
+ throw new SyntaxException(
943
+ "Container names cannot contain a '/' character.");
944
+ }
945
+ $this->cfs_auth = $cfs_auth;
946
+ $this->cfs_http = $cfs_http;
947
+ $this->name = $name;
948
+ $this->object_count = $count;
949
+ $this->bytes_used = $bytes;
950
+ $this->cdn_enabled = NULL;
951
+ $this->cdn_uri = NULL;
952
+ $this->cdn_ttl = NULL;
953
+ $this->cdn_log_retention = NULL;
954
+ $this->cdn_acl_user_agent = NULL;
955
+ $this->cdn_acl_referrer = NULL;
956
+ if ($this->cfs_http->getCDNMUrl() != NULL && $docdn) {
957
+ $this->_cdn_initialize();
958
+ }
959
+ }
960
+
961
+ /**
962
+ * String representation of Container
963
+ *
964
+ * Pretty print the Container instance.
965
+ *
966
+ * @return string Container details
967
+ */
968
+ function __toString()
969
+ {
970
+ $me = sprintf("name: %s, count: %.0f, bytes: %.0f",
971
+ $this->name, $this->object_count, $this->bytes_used);
972
+ if ($this->cfs_http->getCDNMUrl() != NULL) {
973
+ $me .= sprintf(", cdn: %s, cdn uri: %s, cdn ttl: %.0f, logs retention: %s",
974
+ $this->is_public() ? "Yes" : "No",
975
+ $this->cdn_uri, $this->cdn_ttl,
976
+ $this->cdn_log_retention ? "Yes" : "No"
977
+ );
978
+
979
+ if ($this->cdn_acl_user_agent != NULL) {
980
+ $me .= ", cdn acl user agent: " . $this->cdn_acl_user_agent;
981
+ }
982
+
983
+ if ($this->cdn_acl_referrer != NULL) {
984
+ $me .= ", cdn acl referrer: " . $this->cdn_acl_referrer;
985
+ }
986
+
987
+
988
+ }
989
+ return $me;
990
+ }
991
+
992
+ /**
993
+ * Enable Container content to be served via CDN or modify CDN attributes
994
+ *
995
+ * Either enable this Container's content to be served via CDN or
996
+ * adjust its CDN attributes. This Container will always return the
997
+ * same CDN-enabled URI each time it is toggled public/private/public.
998
+ *
999
+ * Example:
1000
+ * <code>
1001
+ * # ... authentication code excluded (see previous examples) ...
1002
+ * #
1003
+ * $conn = new CF_Authentication($auth);
1004
+ *
1005
+ * $public_container = $conn->create_container("public");
1006
+ *
1007
+ * # CDN-enable the container and set it's TTL for a month
1008
+ * #
1009
+ * $public_container->make_public(86400/2); # 12 hours (86400 seconds/day)
1010
+ * </code>
1011
+ *
1012
+ * @param int $ttl the time in seconds content will be cached in the CDN
1013
+ * @returns string the CDN enabled Container's URI
1014
+ * @throws CDNNotEnabledException CDN functionality not returned during auth
1015
+ * @throws AuthenticationException if auth token is not valid/expired
1016
+ * @throws InvalidResponseException unexpected response
1017
+ */
1018
+ function make_public($ttl=86400)
1019
+ {
1020
+ if ($this->cfs_http->getCDNMUrl() == NULL) {
1021
+ throw new CDNNotEnabledException(
1022
+ "Authentication response did not indicate CDN availability");
1023
+ }
1024
+ if ($this->cdn_uri != NULL) {
1025
+ # previously published, assume we're setting new attributes
1026
+ list($status, $reason, $cdn_uri) =
1027
+ $this->cfs_http->update_cdn_container($this->name,$ttl,
1028
+ $this->cdn_log_retention,
1029
+ $this->cdn_acl_user_agent,
1030
+ $this->cdn_acl_referrer);
1031
+ #if ($status == 401 && $this->_re_auth()) {
1032
+ # return $this->make_public($ttl);
1033
+ #}
1034
+ if ($status == 404) {
1035
+ # this instance _thinks_ the container was published, but the
1036
+ # cdn management system thinks otherwise - try again with a PUT
1037
+ list($status, $reason, $cdn_uri) =
1038
+ $this->cfs_http->add_cdn_container($this->name,$ttl);
1039
+
1040
+ }
1041
+ } else {
1042
+ # publish it for first time
1043
+ list($status, $reason, $cdn_uri) =
1044
+ $this->cfs_http->add_cdn_container($this->name,$ttl);
1045
+ }
1046
+ #if ($status == 401 && $this->_re_auth()) {
1047
+ # return $this->make_public($ttl);
1048
+ #}
1049
+ if (!in_array($status, array(201,202))) {
1050
+ throw new InvalidResponseException(
1051
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1052
+ }
1053
+ $this->cdn_enabled = True;
1054
+ $this->cdn_ttl = $ttl;
1055
+ $this->cdn_uri = $cdn_uri;
1056
+ $this->cdn_log_retention = False;
1057
+ $this->cdn_acl_user_agent = "";
1058
+ $this->cdn_acl_referrer = "";
1059
+ return $this->cdn_uri;
1060
+ }
1061
+
1062
+ /**
1063
+ * Enable ACL restriction by User Agent for this container.
1064
+ *
1065
+ * Example:
1066
+ * <code>
1067
+ * # ... authentication code excluded (see previous examples) ...
1068
+ * #
1069
+ * $conn = new CF_Authentication($auth);
1070
+ *
1071
+ * $public_container = $conn->get_container("public");
1072
+ *
1073
+ * # Enable ACL by Referrer
1074
+ * $public_container->acl_referrer("Mozilla");
1075
+ * </code>
1076
+ *
1077
+ * @returns boolean True if successful
1078
+ * @throws CDNNotEnabledException CDN functionality not returned during auth
1079
+ * @throws AuthenticationException if auth token is not valid/expired
1080
+ * @throws InvalidResponseException unexpected response
1081
+ */
1082
+ function acl_user_agent($cdn_acl_user_agent="") {
1083
+ if ($this->cfs_http->getCDNMUrl() == NULL) {
1084
+ throw new CDNNotEnabledException(
1085
+ "Authentication response did not indicate CDN availability");
1086
+ }
1087
+ list($status,$reason) =
1088
+ $this->cfs_http->update_cdn_container($this->name,
1089
+ $this->cdn_ttl,
1090
+ $this->cdn_log_retention,
1091
+ $cdn_acl_user_agent,
1092
+ $this->cdn_acl_referrer
1093
+ );
1094
+ if (!in_array($status, array(202,404))) {
1095
+ throw new InvalidResponseException(
1096
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1097
+ }
1098
+ $this->cdn_acl_user_agent = $cdn_acl_user_agent;
1099
+ return True;
1100
+ }
1101
+
1102
+ /**
1103
+ * Enable ACL restriction by referer for this container.
1104
+ *
1105
+ * Example:
1106
+ * <code>
1107
+ * # ... authentication code excluded (see previous examples) ...
1108
+ * #
1109
+ * $conn = new CF_Authentication($auth);
1110
+ *
1111
+ * $public_container = $conn->get_container("public");
1112
+ *
1113
+ * # Enable Referrer
1114
+ * $public_container->acl_referrer("http://www.example.com/gallery.php");
1115
+ * </code>
1116
+ *
1117
+ * @returns boolean True if successful
1118
+ * @throws CDNNotEnabledException CDN functionality not returned during auth
1119
+ * @throws AuthenticationException if auth token is not valid/expired
1120
+ * @throws InvalidResponseException unexpected response
1121
+ */
1122
+ function acl_referrer($cdn_acl_referrer="") {
1123
+ if ($this->cfs_http->getCDNMUrl() == NULL) {
1124
+ throw new CDNNotEnabledException(
1125
+ "Authentication response did not indicate CDN availability");
1126
+ }
1127
+ list($status,$reason) =
1128
+ $this->cfs_http->update_cdn_container($this->name,
1129
+ $this->cdn_ttl,
1130
+ $this->cdn_log_retention,
1131
+ $this->cdn_acl_user_agent,
1132
+ $cdn_acl_referrer
1133
+ );
1134
+ if (!in_array($status, array(202,404))) {
1135
+ throw new InvalidResponseException(
1136
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1137
+ }
1138
+ $this->cdn_acl_referrer = $cdn_acl_referrer;
1139
+ return True;
1140
+ }
1141
+
1142
+ /**
1143
+ * Enable log retention for this CDN container.
1144
+ *
1145
+ * Enable CDN log retention on the container. If enabled logs will
1146
+ * be periodically (at unpredictable intervals) compressed and
1147
+ * uploaded to a ".CDN_ACCESS_LOGS" container in the form of
1148
+ * "container_name.YYYYMMDDHH-XXXX.gz". Requires CDN be enabled on
1149
+ * the account.
1150
+ *
1151
+ * Example:
1152
+ * <code>
1153
+ * # ... authentication code excluded (see previous examples) ...
1154
+ * #
1155
+ * $conn = new CF_Authentication($auth);
1156
+ *
1157
+ * $public_container = $conn->get_container("public");
1158
+ *
1159
+ * # Enable logs retention.
1160
+ * $public_container->log_retention(True);
1161
+ * </code>
1162
+ *
1163
+ * @returns boolean True if successful
1164
+ * @throws CDNNotEnabledException CDN functionality not returned during auth
1165
+ * @throws AuthenticationException if auth token is not valid/expired
1166
+ * @throws InvalidResponseException unexpected response
1167
+ */
1168
+ function log_retention($cdn_log_retention=False) {
1169
+ if ($this->cfs_http->getCDNMUrl() == NULL) {
1170
+ throw new CDNNotEnabledException(
1171
+ "Authentication response did not indicate CDN availability");
1172
+ }
1173
+ list($status,$reason) =
1174
+ $this->cfs_http->update_cdn_container($this->name,
1175
+ $this->cdn_ttl,
1176
+ $cdn_log_retention,
1177
+ $this->cdn_acl_user_agent,
1178
+ $this->cdn_acl_referrer
1179
+ );
1180
+ if (!in_array($status, array(202,404))) {
1181
+ throw new InvalidResponseException(
1182
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1183
+ }
1184
+ $this->cdn_log_retention = $cdn_log_retention;
1185
+ return True;
1186
+ }
1187
+
1188
+ /**
1189
+ * Disable the CDN sharing for this container
1190
+ *
1191
+ * Use this method to disallow distribution into the CDN of this Container's
1192
+ * content.
1193
+ *
1194
+ * NOTE: Any content already cached in the CDN will continue to be served
1195
+ * from its cache until the TTL expiration transpires. The default
1196
+ * TTL is typically one day, so "privatizing" the Container will take
1197
+ * up to 24 hours before the content is purged from the CDN cache.
1198
+ *
1199
+ * Example:
1200
+ * <code>
1201
+ * # ... authentication code excluded (see previous examples) ...
1202
+ * #
1203
+ * $conn = new CF_Authentication($auth);
1204
+ *
1205
+ * $public_container = $conn->get_container("public");
1206
+ *
1207
+ * # Disable CDN accessability
1208
+ * # ... still cached up to a month based on previous example
1209
+ * #
1210
+ * $public_container->make_private();
1211
+ * </code>
1212
+ *
1213
+ * @returns boolean True if successful
1214
+ * @throws CDNNotEnabledException CDN functionality not returned during auth
1215
+ * @throws AuthenticationException if auth token is not valid/expired
1216
+ * @throws InvalidResponseException unexpected response
1217
+ */
1218
+ function make_private()
1219
+ {
1220
+ if ($this->cfs_http->getCDNMUrl() == NULL) {
1221
+ throw new CDNNotEnabledException(
1222
+ "Authentication response did not indicate CDN availability");
1223
+ }
1224
+ list($status,$reason) = $this->cfs_http->remove_cdn_container($this->name);
1225
+ #if ($status == 401 && $this->_re_auth()) {
1226
+ # return $this->make_private();
1227
+ #}
1228
+ if (!in_array($status, array(202,404))) {
1229
+ throw new InvalidResponseException(
1230
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1231
+ }
1232
+ $this->cdn_enabled = False;
1233
+ $this->cdn_ttl = NULL;
1234
+ $this->cdn_uri = NULL;
1235
+ $this->cdn_log_retention = NULL;
1236
+ $this->cdn_acl_user_agent = NULL;
1237
+ $this->cdn_acl_referrer = NULL;
1238
+ return True;
1239
+ }
1240
+
1241
+ /**
1242
+ * Check if this Container is being publicly served via CDN
1243
+ *
1244
+ * Use this method to determine if the Container's content is currently
1245
+ * available through the CDN.
1246
+ *
1247
+ * Example:
1248
+ * <code>
1249
+ * # ... authentication code excluded (see previous examples) ...
1250
+ * #
1251
+ * $conn = new CF_Authentication($auth);
1252
+ *
1253
+ * $public_container = $conn->get_container("public");
1254
+ *
1255
+ * # Display CDN accessability
1256
+ * #
1257
+ * $public_container->is_public() ? print "Yes" : print "No";
1258
+ * </code>
1259
+ *
1260
+ * @returns boolean True if enabled, False otherwise
1261
+ */
1262
+ function is_public()
1263
+ {
1264
+ return $this->cdn_enabled == True ? True : False;
1265
+ }
1266
+
1267
+ /**
1268
+ * Create a new remote storage Object
1269
+ *
1270
+ * Return a new Object instance. If the remote storage Object exists,
1271
+ * the instance's attributes are populated.
1272
+ *
1273
+ * Example:
1274
+ * <code>
1275
+ * # ... authentication code excluded (see previous examples) ...
1276
+ * #
1277
+ * $conn = new CF_Authentication($auth);
1278
+ *
1279
+ * $public_container = $conn->get_container("public");
1280
+ *
1281
+ * # This creates a local instance of a storage object but only creates
1282
+ * # it in the storage system when the object's write() method is called.
1283
+ * #
1284
+ * $pic = $public_container->create_object("baby.jpg");
1285
+ * </code>
1286
+ *
1287
+ * @param string $obj_name name of storage Object
1288
+ * @return obj CF_Object instance
1289
+ */
1290
+ function create_object($obj_name=NULL)
1291
+ {
1292
+ return new CF_Object($this, $obj_name);
1293
+ }
1294
+
1295
+ /**
1296
+ * Return an Object instance for the remote storage Object
1297
+ *
1298
+ * Given a name, return a Object instance representing the
1299
+ * remote storage object.
1300
+ *
1301
+ * Example:
1302
+ * <code>
1303
+ * # ... authentication code excluded (see previous examples) ...
1304
+ * #
1305
+ * $conn = new CF_Authentication($auth);
1306
+ *
1307
+ * $public_container = $conn->get_container("public");
1308
+ *
1309
+ * # This call only fetches header information and not the content of
1310
+ * # the storage object. Use the Object's read() or stream() methods
1311
+ * # to obtain the object's data.
1312
+ * #
1313
+ * $pic = $public_container->get_object("baby.jpg");
1314
+ * </code>
1315
+ *
1316
+ * @param string $obj_name name of storage Object
1317
+ * @return obj CF_Object instance
1318
+ */
1319
+ function get_object($obj_name=NULL)
1320
+ {
1321
+ return new CF_Object($this, $obj_name, True);
1322
+ }
1323
+
1324
+ /**
1325
+ * Return a list of Objects
1326
+ *
1327
+ * Return an array of strings listing the Object names in this Container.
1328
+ *
1329
+ * Example:
1330
+ * <code>
1331
+ * # ... authentication code excluded (see previous examples) ...
1332
+ * #
1333
+ * $images = $conn->get_container("my photos");
1334
+ *
1335
+ * # Grab the list of all storage objects
1336
+ * #
1337
+ * $all_objects = $images->list_objects();
1338
+ *
1339
+ * # Grab subsets of all storage objects
1340
+ * #
1341
+ * $first_ten = $images->list_objects(10);
1342
+ *
1343
+ * # Note the use of the previous result's last object name being
1344
+ * # used as the 'marker' parameter to fetch the next 10 objects
1345
+ * #
1346
+ * $next_ten = $images->list_objects(10, $first_ten[count($first_ten)-1]);
1347
+ *
1348
+ * # Grab images starting with "birthday_party" and default limit/marker
1349
+ * # to match all photos with that prefix
1350
+ * #
1351
+ * $prefixed = $images->list_objects(0, NULL, "birthday");
1352
+ *
1353
+ * # Assuming you have created the appropriate directory marker Objects,
1354
+ * # you can traverse your pseudo-hierarchical containers
1355
+ * # with the "path" argument.
1356
+ * #
1357
+ * $animals = $images->list_objects(0,NULL,NULL,"pictures/animals");
1358
+ * $dogs = $images->list_objects(0,NULL,NULL,"pictures/animals/dogs");
1359
+ * </code>
1360
+ *
1361
+ * @param int $limit <i>optional</i> only return $limit names
1362
+ * @param int $marker <i>optional</i> subset of names starting at $marker
1363
+ * @param string $prefix <i>optional</i> Objects whose names begin with $prefix
1364
+ * @param string $path <i>optional</i> only return results under "pathname"
1365
+ * @return array array of strings
1366
+ * @throws InvalidResponseException unexpected response
1367
+ */
1368
+ function list_objects($limit=0, $marker=NULL, $prefix=NULL, $path=NULL)
1369
+ {
1370
+ list($status, $reason, $obj_list) =
1371
+ $this->cfs_http->list_objects($this->name, $limit,
1372
+ $marker, $prefix, $path);
1373
+ #if ($status == 401 && $this->_re_auth()) {
1374
+ # return $this->list_objects($limit, $marker, $prefix, $path);
1375
+ #}
1376
+ if ($status < 200 || $status > 299) {
1377
+ throw new InvalidResponseException(
1378
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1379
+ }
1380
+ return $obj_list;
1381
+ }
1382
+
1383
+ /**
1384
+ * Return an array of Objects
1385
+ *
1386
+ * Return an array of Object instances in this Container.
1387
+ *
1388
+ * Example:
1389
+ * <code>
1390
+ * # ... authentication code excluded (see previous examples) ...
1391
+ * #
1392
+ * $images = $conn->get_container("my photos");
1393
+ *
1394
+ * # Grab the list of all storage objects
1395
+ * #
1396
+ * $all_objects = $images->get_objects();
1397
+ *
1398
+ * # Grab subsets of all storage objects
1399
+ * #
1400
+ * $first_ten = $images->get_objects(10);
1401
+ *
1402
+ * # Note the use of the previous result's last object name being
1403
+ * # used as the 'marker' parameter to fetch the next 10 objects
1404
+ * #
1405
+ * $next_ten = $images->list_objects(10, $first_ten[count($first_ten)-1]);
1406
+ *
1407
+ * # Grab images starting with "birthday_party" and default limit/marker
1408
+ * # to match all photos with that prefix
1409
+ * #
1410
+ * $prefixed = $images->get_objects(0, NULL, "birthday");
1411
+ *
1412
+ * # Assuming you have created the appropriate directory marker Objects,
1413
+ * # you can traverse your pseudo-hierarchical containers
1414
+ * # with the "path" argument.
1415
+ * #
1416
+ * $animals = $images->get_objects(0,NULL,NULL,"pictures/animals");
1417
+ * $dogs = $images->get_objects(0,NULL,NULL,"pictures/animals/dogs");
1418
+ * </code>
1419
+ *
1420
+ * @param int $limit <i>optional</i> only return $limit names
1421
+ * @param int $marker <i>optional</i> subset of names starting at $marker
1422
+ * @param string $prefix <i>optional</i> Objects whose names begin with $prefix
1423
+ * @param string $path <i>optional</i> only return results under "pathname"
1424
+ * @return array array of strings
1425
+ * @throws InvalidResponseException unexpected response
1426
+ */
1427
+ function get_objects($limit=0, $marker=NULL, $prefix=NULL, $path=NULL)
1428
+ {
1429
+ list($status, $reason, $obj_array) =
1430
+ $this->cfs_http->get_objects($this->name, $limit,
1431
+ $marker, $prefix, $path);
1432
+ #if ($status == 401 && $this->_re_auth()) {
1433
+ # return $this->get_objects($limit, $marker, $prefix, $path);
1434
+ #}
1435
+ if ($status < 200 || $status > 299) {
1436
+ throw new InvalidResponseException(
1437
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1438
+ }
1439
+ $objects = array();
1440
+ foreach ($obj_array as $obj) {
1441
+ $tmp = new CF_Object($this, $obj["name"], False, False);
1442
+ $tmp->content_type = $obj["content_type"];
1443
+ $tmp->content_length = (float) $obj["bytes"];
1444
+ $tmp->set_etag($obj["hash"]);
1445
+ $tmp->last_modified = $obj["last_modified"];
1446
+ $objects[] = $tmp;
1447
+ }
1448
+ return $objects;
1449
+ }
1450
+
1451
+ /**
1452
+ * Delete a remote storage Object
1453
+ *
1454
+ * Given an Object instance or name, permanently remove the remote Object
1455
+ * and all associated metadata.
1456
+ *
1457
+ * Example:
1458
+ * <code>
1459
+ * # ... authentication code excluded (see previous examples) ...
1460
+ * #
1461
+ * $conn = new CF_Authentication($auth);
1462
+ *
1463
+ * $images = $conn->get_container("my photos");
1464
+ *
1465
+ * # Delete specific object
1466
+ * #
1467
+ * $images->delete_object("disco_dancing.jpg");
1468
+ * </code>
1469
+ *
1470
+ * @param obj $obj name or instance of Object to delete
1471
+ * @return boolean <kbd>True</kbd> if successfully removed
1472
+ * @throws SyntaxException invalid Object name
1473
+ * @throws NoSuchObjectException remote Object does not exist
1474
+ * @throws InvalidResponseException unexpected response
1475
+ */
1476
+ function delete_object($obj)
1477
+ {
1478
+ $obj_name = NULL;
1479
+ if (is_object($obj)) {
1480
+ if (get_class($obj) == "CF_Object") {
1481
+ $obj_name = $obj->name;
1482
+ }
1483
+ }
1484
+ if (is_string($obj)) {
1485
+ $obj_name = $obj;
1486
+ }
1487
+ if (!$obj_name) {
1488
+ throw new SyntaxException("Object name not set.");
1489
+ }
1490
+ $status = $this->cfs_http->delete_object($this->name, $obj_name);
1491
+ #if ($status == 401 && $this->_re_auth()) {
1492
+ # return $this->delete_object($obj);
1493
+ #}
1494
+ if ($status == 404) {
1495
+ $m = "Specified object '".$this->name."/".$obj_name;
1496
+ $m.= "' did not exist to delete.";
1497
+ throw new NoSuchObjectException($m);
1498
+ }
1499
+ if ($status != 204) {
1500
+ throw new InvalidResponseException(
1501
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1502
+ }
1503
+ return True;
1504
+ }
1505
+
1506
+ /**
1507
+ * Helper function to create "path" elements for a given Object name
1508
+ *
1509
+ * Given an Object whos name contains '/' path separators, this function
1510
+ * will create the "directory marker" Objects of one byte with the
1511
+ * Content-Type of "application/folder".
1512
+ *
1513
+ * It assumes the last element of the full path is the "real" Object
1514
+ * and does NOT create a remote storage Object for that last element.
1515
+ */
1516
+ function create_paths($path_name)
1517
+ {
1518
+ if ($path_name[0] == '/') {
1519
+ $path_name = mb_substr($path_name, 0, 1);
1520
+ }
1521
+ $elements = explode('/', $path_name, -1);
1522
+ $build_path = "";
1523
+ foreach ($elements as $idx => $val) {
1524
+ if (!$build_path) {
1525
+ $build_path = $val;
1526
+ } else {
1527
+ $build_path .= "/" . $val;
1528
+ }
1529
+ $obj = new CF_Object($this, $build_path);
1530
+ $obj->content_type = "application/directory";
1531
+ $obj->write(".", 1);
1532
+ }
1533
+ }
1534
+
1535
+ /**
1536
+ * Internal method to grab CDN/Container info if appropriate to do so
1537
+ *
1538
+ * @throws InvalidResponseException unexpected response
1539
+ */
1540
+ private function _cdn_initialize()
1541
+ {
1542
+ list($status, $reason, $cdn_enabled, $cdn_uri, $cdn_ttl,
1543
+ $cdn_log_retention, $cdn_acl_user_agent, $cdn_acl_referrer) =
1544
+ $this->cfs_http->head_cdn_container($this->name);
1545
+ #if ($status == 401 && $this->_re_auth()) {
1546
+ # return $this->_cdn_initialize();
1547
+ #}
1548
+ if (!in_array($status, array(204,404))) {
1549
+ throw new InvalidResponseException(
1550
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1551
+ }
1552
+ $this->cdn_enabled = $cdn_enabled;
1553
+ $this->cdn_uri = $cdn_uri;
1554
+ $this->cdn_ttl = $cdn_ttl;
1555
+ $this->cdn_log_retention = $cdn_log_retention;
1556
+ $this->cdn_acl_user_agent = $cdn_acl_user_agent;
1557
+ $this->cdn_acl_referrer = $cdn_acl_referrer;
1558
+ }
1559
+
1560
+ #private function _re_auth()
1561
+ #{
1562
+ # $new_auth = new CF_Authentication(
1563
+ # $this->cfs_auth->username,
1564
+ # $this->cfs_auth->api_key,
1565
+ # $this->cfs_auth->auth_host,
1566
+ # $this->cfs_auth->account);
1567
+ # $new_auth->authenticate();
1568
+ # $this->cfs_auth = $new_auth;
1569
+ # $this->cfs_http->setCFAuth($this->cfs_auth);
1570
+ # return True;
1571
+ #}
1572
+ }
1573
+
1574
+
1575
+ /**
1576
+ * Object operations
1577
+ *
1578
+ * An Object is analogous to a file on a conventional filesystem. You can
1579
+ * read data from, or write data to your Objects. You can also associate
1580
+ * arbitrary metadata with them.
1581
+ *
1582
+ * @package php-cloudfiles
1583
+ */
1584
+ class CF_Object
1585
+ {
1586
+ public $container;
1587
+ public $name;
1588
+ public $last_modified;
1589
+ public $content_type;
1590
+ public $content_length;
1591
+ public $metadata;
1592
+ private $etag;
1593
+
1594
+ /**
1595
+ * Class constructor
1596
+ *
1597
+ * @param obj $container CF_Container instance
1598
+ * @param string $name name of Object
1599
+ * @param boolean $force_exists if set, throw an error if Object doesn't exist
1600
+ */
1601
+ function __construct(&$container, $name, $force_exists=False, $dohead=True)
1602
+ {
1603
+ if ($name[0] == "/") {
1604
+ $r = "Object name '".$name;
1605
+ $r .= "' cannot contain begin with a '/' character.";
1606
+ throw new SyntaxException($r);
1607
+ }
1608
+ if (strlen($name) > MAX_OBJECT_NAME_LEN) {
1609
+ throw new SyntaxException("Object name exceeds "
1610
+ . "maximum allowed length.");
1611
+ }
1612
+ $this->container = $container;
1613
+ $this->name = $name;
1614
+ $this->etag = NULL;
1615
+ $this->_etag_override = False;
1616
+ $this->last_modified = NULL;
1617
+ $this->content_type = NULL;
1618
+ $this->content_length = 0;
1619
+ $this->metadata = array();
1620
+ if ($dohead) {
1621
+ if (!$this->_initialize() && $force_exists) {
1622
+ throw new NoSuchObjectException("No such object '".$name."'");
1623
+ }
1624
+ }
1625
+ }
1626
+
1627
+ /**
1628
+ * String representation of Object
1629
+ *
1630
+ * Pretty print the Object's location and name
1631
+ *
1632
+ * @return string Object information
1633
+ */
1634
+ function __toString()
1635
+ {
1636
+ return $this->container->name . "/" . $this->name;
1637
+ }
1638
+
1639
+ /**
1640
+ * Internal check to get the proper mimetype.
1641
+ *
1642
+ * This function would go over the available PHP methods to get
1643
+ * the MIME type.
1644
+ *
1645
+ * By default it will try to use the PHP fileinfo library which is
1646
+ * available from PHP 5.3 or as an PECL extension
1647
+ * (http://pecl.php.net/package/Fileinfo).
1648
+ *
1649
+ * It will get the magic file by default from the system wide file
1650
+ * which is usually available in /usr/share/magic on Unix or try
1651
+ * to use the file specified in the source directory of the API
1652
+ * (share directory).
1653
+ *
1654
+ * if fileinfo is not available it will try to use the internal
1655
+ * mime_content_type function.
1656
+ *
1657
+ * @param string $handle name of file or buffer to guess the type from
1658
+ * @return boolean <kbd>True</kbd> if successful
1659
+ * @throws BadContentTypeException
1660
+ */
1661
+ function _guess_content_type($handle) {
1662
+ if ($this->content_type)
1663
+ return;
1664
+
1665
+ if (function_exists("finfo_open")) {
1666
+ $local_magic = dirname(__FILE__) . "/share/magic";
1667
+ $finfo = @finfo_open(FILEINFO_MIME, $local_magic);
1668
+
1669
+ if (!$finfo)
1670
+ $finfo = @finfo_open(FILEINFO_MIME);
1671
+
1672
+ if ($finfo) {
1673
+
1674
+ if (is_file((string)$handle))
1675
+ $ct = @finfo_file($finfo, $handle);
1676
+ else
1677
+ $ct = @finfo_buffer($finfo, $handle);
1678
+
1679
+ /* PHP 5.3 fileinfo display extra information like
1680
+ charset so we remove everything after the ; since
1681
+ we are not into that stuff */
1682
+ if ($ct) {
1683
+ $extra_content_type_info = strpos($ct, "; ");
1684
+ if ($extra_content_type_info)
1685
+ $ct = substr($ct, 0, $extra_content_type_info);
1686
+ }
1687
+
1688
+ if ($ct && $ct != 'application/octet-stream')
1689
+ $this->content_type = $ct;
1690
+
1691
+ @finfo_close($finfo);
1692
+ }
1693
+ }
1694
+
1695
+ if (!$this->content_type && (string)is_file($handle) && function_exists("mime_content_type")) {
1696
+ $this->content_type = @mime_content_type($handle);
1697
+ }
1698
+
1699
+ if (!$this->content_type) {
1700
+ throw new BadContentTypeException("Required Content-Type not set");
1701
+ }
1702
+ return True;
1703
+ }
1704
+
1705
+ /**
1706
+ * String representation of the Object's public URI
1707
+ *
1708
+ * A string representing the Object's public URI assuming that it's
1709
+ * parent Container is CDN-enabled.
1710
+ *
1711
+ * Example:
1712
+ * <code>
1713
+ * # ... authentication/connection/container code excluded
1714
+ * # ... see previous examples
1715
+ *
1716
+ * # Print out the Object's CDN URI (if it has one) in an HTML img-tag
1717
+ * #
1718
+ * print "<img src='$pic->public_uri()' />\n";
1719
+ * </code>
1720
+ *
1721
+ * @return string Object's public URI or NULL
1722
+ */
1723
+ function public_uri()
1724
+ {
1725
+ if ($this->container->cdn_enabled) {
1726
+ return $this->container->cdn_uri . "/" . $this->name;
1727
+ }
1728
+ return NULL;
1729
+ }
1730
+
1731
+ /**
1732
+ * Read the remote Object's data
1733
+ *
1734
+ * Returns the Object's data. This is useful for smaller Objects such
1735
+ * as images or office documents. Object's with larger content should use
1736
+ * the stream() method below.
1737
+ *
1738
+ * Pass in $hdrs array to set specific custom HTTP headers such as
1739
+ * If-Match, If-None-Match, If-Modified-Since, Range, etc.
1740
+ *
1741
+ * Example:
1742
+ * <code>
1743
+ * # ... authentication/connection/container code excluded
1744
+ * # ... see previous examples
1745
+ *
1746
+ * $my_docs = $conn->get_container("documents");
1747
+ * $doc = $my_docs->get_object("README");
1748
+ * $data = $doc->read(); # read image content into a string variable
1749
+ * print $data;
1750
+ *
1751
+ * # Or see stream() below for a different example.
1752
+ * #
1753
+ * </code>
1754
+ *
1755
+ * @param array $hdrs user-defined headers (Range, If-Match, etc.)
1756
+ * @return string Object's data
1757
+ * @throws InvalidResponseException unexpected response
1758
+ */
1759
+ function read($hdrs=array())
1760
+ {
1761
+ list($status, $reason, $data) =
1762
+ $this->container->cfs_http->get_object_to_string($this, $hdrs);
1763
+ #if ($status == 401 && $this->_re_auth()) {
1764
+ # return $this->read($hdrs);
1765
+ #}
1766
+ if (($status < 200) || ($status > 299
1767
+ && $status != 412 && $status != 304)) {
1768
+ throw new InvalidResponseException("Invalid response (".$status."): "
1769
+ . $this->container->cfs_http->get_error());
1770
+ }
1771
+ return $data;
1772
+ }
1773
+
1774
+ /**
1775
+ * Streaming read of Object's data
1776
+ *
1777
+ * Given an open PHP resource (see PHP's fopen() method), fetch the Object's
1778
+ * data and write it to the open resource handle. This is useful for
1779
+ * streaming an Object's content to the browser (videos, images) or for
1780
+ * fetching content to a local file.
1781
+ *
1782
+ * Pass in $hdrs array to set specific custom HTTP headers such as
1783
+ * If-Match, If-None-Match, If-Modified-Since, Range, etc.
1784
+ *
1785
+ * Example:
1786
+ * <code>
1787
+ * # ... authentication/connection/container code excluded
1788
+ * # ... see previous examples
1789
+ *
1790
+ * # Assuming this is a web script to display the README to the
1791
+ * # user's browser:
1792
+ * #
1793
+ * <?php
1794
+ * // grab README from storage system
1795
+ * //
1796
+ * $my_docs = $conn->get_container("documents");
1797
+ * $doc = $my_docs->get_object("README");
1798
+ *
1799
+ * // Hand it back to user's browser with appropriate content-type
1800
+ * //
1801
+ * header("Content-Type: " . $doc->content_type);
1802
+ * $output = fopen("php://output", "w");
1803
+ * $doc->stream($output); # stream object content to PHP's output buffer
1804
+ * fclose($output);
1805
+ * ?>
1806
+ *
1807
+ * # See read() above for a more simple example.
1808
+ * #
1809
+ * </code>
1810
+ *
1811
+ * @param resource $fp open resource for writing data to
1812
+ * @param array $hdrs user-defined headers (Range, If-Match, etc.)
1813
+ * @return string Object's data
1814
+ * @throws InvalidResponseException unexpected response
1815
+ */
1816
+ function stream(&$fp, $hdrs=array())
1817
+ {
1818
+ list($status, $reason) =
1819
+ $this->container->cfs_http->get_object_to_stream($this,$fp,$hdrs);
1820
+ #if ($status == 401 && $this->_re_auth()) {
1821
+ # return $this->stream($fp, $hdrs);
1822
+ #}
1823
+ if (($status < 200) || ($status > 299
1824
+ && $status != 412 && $status != 304)) {
1825
+ throw new InvalidResponseException("Invalid response (".$status."): "
1826
+ .$reason);
1827
+ }
1828
+ return True;
1829
+ }
1830
+
1831
+ /**
1832
+ * Store new Object metadata
1833
+ *
1834
+ * Write's an Object's metadata to the remote Object. This will overwrite
1835
+ * an prior Object metadata.
1836
+ *
1837
+ * Example:
1838
+ * <code>
1839
+ * # ... authentication/connection/container code excluded
1840
+ * # ... see previous examples
1841
+ *
1842
+ * $my_docs = $conn->get_container("documents");
1843
+ * $doc = $my_docs->get_object("README");
1844
+ *
1845
+ * # Define new metadata for the object
1846
+ * #
1847
+ * $doc->metadata = array(
1848
+ * "Author" => "EJ",
1849
+ * "Subject" => "How to use the PHP tests",
1850
+ * "Version" => "1.2.2"
1851
+ * );
1852
+ *
1853
+ * # Push the new metadata up to the storage system
1854
+ * #
1855
+ * $doc->sync_metadata();
1856
+ * </code>
1857
+ *
1858
+ * @return boolean <kbd>True</kbd> if successful, <kbd>False</kbd> otherwise
1859
+ * @throws InvalidResponseException unexpected response
1860
+ */
1861
+ function sync_metadata()
1862
+ {
1863
+ if (!empty($this->metadata)) {
1864
+ $status = $this->container->cfs_http->update_object($this);
1865
+ #if ($status == 401 && $this->_re_auth()) {
1866
+ # return $this->sync_metadata();
1867
+ #}
1868
+ if ($status != 202) {
1869
+ throw new InvalidResponseException("Invalid response ("
1870
+ .$status."): ".$this->container->cfs_http->get_error());
1871
+ }
1872
+ return True;
1873
+ }
1874
+ return False;
1875
+ }
1876
+
1877
+ /**
1878
+ * Upload Object's data to Cloud Files
1879
+ *
1880
+ * Write data to the remote Object. The $data argument can either be a
1881
+ * PHP resource open for reading (see PHP's fopen() method) or an in-memory
1882
+ * variable. If passing in a PHP resource, you must also include the $bytes
1883
+ * parameter.
1884
+ *
1885
+ * Example:
1886
+ * <code>
1887
+ * # ... authentication/connection/container code excluded
1888
+ * # ... see previous examples
1889
+ *
1890
+ * $my_docs = $conn->get_container("documents");
1891
+ * $doc = $my_docs->get_object("README");
1892
+ *
1893
+ * # Upload placeholder text in my README
1894
+ * #
1895
+ * $doc->write("This is just placeholder text for now...");
1896
+ * </code>
1897
+ *
1898
+ * @param string|resource $data string or open resource
1899
+ * @param float $bytes amount of data to upload (required for resources)
1900
+ * @param boolean $verify generate, send, and compare MD5 checksums
1901
+ * @return boolean <kbd>True</kbd> when data uploaded successfully
1902
+ * @throws SyntaxException missing required parameters
1903
+ * @throws BadContentTypeException if no Content-Type was/could be set
1904
+ * @throws MisMatchedChecksumException $verify is set and checksums unequal
1905
+ * @throws InvalidResponseException unexpected response
1906
+ */
1907
+ function write($data=NULL, $bytes=0, $verify=True)
1908
+ {
1909
+ if (!$data) {
1910
+ throw new SyntaxException("Missing data source.");
1911
+ }
1912
+ if ($bytes > MAX_OBJECT_SIZE) {
1913
+ throw new SyntaxException("Bytes exceeds maximum object size.");
1914
+ }
1915
+ if ($verify) {
1916
+ if (!$this->_etag_override) {
1917
+ $this->etag = $this->compute_md5sum($data);
1918
+ }
1919
+ } else {
1920
+ $this->etag = NULL;
1921
+ }
1922
+
1923
+ $close_fh = False;
1924
+ if (!is_resource($data)) {
1925
+ # A hack to treat string data as a file handle. php://memory feels
1926
+ # like a better option, but it seems to break on Windows so use
1927
+ # a temporary file instead.
1928
+ #
1929
+ $fp = fopen("php://temp", "wb+");
1930
+ #$fp = fopen("php://memory", "wb+");
1931
+ fwrite($fp, $data, strlen($data));
1932
+ rewind($fp);
1933
+ $close_fh = True;
1934
+ $this->content_length = (float) strlen($data);
1935
+ if ($this->content_length > MAX_OBJECT_SIZE) {
1936
+ throw new SyntaxException("Data exceeds maximum object size");
1937
+ }
1938
+ $ct_data = substr($data, 0, 64);
1939
+ } else {
1940
+ $this->content_length = $bytes;
1941
+ $fp = $data;
1942
+ $ct_data = fread($data, 64);
1943
+ rewind($data);
1944
+ }
1945
+
1946
+ $this->_guess_content_type($ct_data);
1947
+
1948
+ list($status, $reason, $etag) =
1949
+ $this->container->cfs_http->put_object($this, $fp);
1950
+ #if ($status == 401 && $this->_re_auth()) {
1951
+ # return $this->write($data, $bytes, $verify);
1952
+ #}
1953
+ if ($status == 412) {
1954
+ if ($close_fh) { fclose($fp); }
1955
+ throw new SyntaxException("Missing Content-Type header");
1956
+ }
1957
+ if ($status == 422) {
1958
+ if ($close_fh) { fclose($fp); }
1959
+ throw new MisMatchedChecksumException(
1960
+ "Supplied and computed checksums do not match.");
1961
+ }
1962
+ if ($status != 201) {
1963
+ if ($close_fh) { fclose($fp); }
1964
+ throw new InvalidResponseException("Invalid response (".$status."): "
1965
+ . $this->container->cfs_http->get_error());
1966
+ }
1967
+ if (!$verify) {
1968
+ $this->etag = $etag;
1969
+ }
1970
+ if ($close_fh) { fclose($fp); }
1971
+ return True;
1972
+ }
1973
+
1974
+ /**
1975
+ * Upload Object data from local filename
1976
+ *
1977
+ * This is a convenience function to upload the data from a local file. A
1978
+ * True value for $verify will cause the method to compute the Object's MD5
1979
+ * checksum prior to uploading.
1980
+ *
1981
+ * Example:
1982
+ * <code>
1983
+ * # ... authentication/connection/container code excluded
1984
+ * # ... see previous examples
1985
+ *
1986
+ * $my_docs = $conn->get_container("documents");
1987
+ * $doc = $my_docs->get_object("README");
1988
+ *
1989
+ * # Upload my local README's content
1990
+ * #
1991
+ * $doc->load_from_filename("/home/ej/cloudfiles/readme");
1992
+ * </code>
1993
+ *
1994
+ * @param string $filename full path to local file
1995
+ * @param boolean $verify enable local/remote MD5 checksum validation
1996
+ * @return boolean <kbd>True</kbd> if data uploaded successfully
1997
+ * @throws SyntaxException missing required parameters
1998
+ * @throws BadContentTypeException if no Content-Type was/could be set
1999
+ * @throws MisMatchedChecksumException $verify is set and checksums unequal
2000
+ * @throws InvalidResponseException unexpected response
2001
+ * @throws IOException error opening file
2002
+ */
2003
+ function load_from_filename($filename, $verify=True)
2004
+ {
2005
+ $fp = @fopen($filename, "r");
2006
+ if (!$fp) {
2007
+ throw new IOException("Could not open file for reading: ".$filename);
2008
+ }
2009
+
2010
+ clearstatcache();
2011
+
2012
+ $size = (float) sprintf("%u", filesize($filename));
2013
+ if ($size > MAX_OBJECT_SIZE) {
2014
+ throw new SyntaxException("File size exceeds maximum object size.");
2015
+ }
2016
+
2017
+ $this->_guess_content_type($filename);
2018
+
2019
+ $this->write($fp, $size, $verify);
2020
+ fclose($fp);
2021
+ return True;
2022
+ }
2023
+
2024
+ /**
2025
+ * Save Object's data to local filename
2026
+ *
2027
+ * Given a local filename, the Object's data will be written to the newly
2028
+ * created file.
2029
+ *
2030
+ * Example:
2031
+ * <code>
2032
+ * # ... authentication/connection/container code excluded
2033
+ * # ... see previous examples
2034
+ *
2035
+ * # Whoops! I deleted my local README, let me download/save it
2036
+ * #
2037
+ * $my_docs = $conn->get_container("documents");
2038
+ * $doc = $my_docs->get_object("README");
2039
+ *
2040
+ * $doc->save_to_filename("/home/ej/cloudfiles/readme.restored");
2041
+ * </code>
2042
+ *
2043
+ * @param string $filename name of local file to write data to
2044
+ * @return boolean <kbd>True</kbd> if successful
2045
+ * @throws IOException error opening file
2046
+ * @throws InvalidResponseException unexpected response
2047
+ */
2048
+ function save_to_filename($filename)
2049
+ {
2050
+ $fp = @fopen($filename, "wb");
2051
+ if (!$fp) {
2052
+ throw new IOException("Could not open file for writing: ".$filename);
2053
+ }
2054
+ $result = $this->stream($fp);
2055
+ fclose($fp);
2056
+ return $result;
2057
+ }
2058
+
2059
+ /**
2060
+ * Set Object's MD5 checksum
2061
+ *
2062
+ * Manually set the Object's ETag. Including the ETag is mandatory for
2063
+ * Cloud Files to perform end-to-end verification. Omitting the ETag forces
2064
+ * the user to handle any data integrity checks.
2065
+ *
2066
+ * @param string $etag MD5 checksum hexidecimal string
2067
+ */
2068
+ function set_etag($etag)
2069
+ {
2070
+ $this->etag = $etag;
2071
+ $this->_etag_override = True;
2072
+ }
2073
+
2074
+ /**
2075
+ * Object's MD5 checksum
2076
+ *
2077
+ * Accessor method for reading Object's private ETag attribute.
2078
+ *
2079
+ * @return string MD5 checksum hexidecimal string
2080
+ */
2081
+ function getETag()
2082
+ {
2083
+ return $this->etag;
2084
+ }
2085
+
2086
+ /**
2087
+ * Compute the MD5 checksum
2088
+ *
2089
+ * Calculate the MD5 checksum on either a PHP resource or data. The argument
2090
+ * may either be a local filename, open resource for reading, or a string.
2091
+ *
2092
+ * <b>WARNING:</b> if you are uploading a big file over a stream
2093
+ * it could get very slow to compute the md5 you probably want to
2094
+ * set the $verify parameter to False in the write() method and
2095
+ * compute yourself the md5 before if you have it.
2096
+ *
2097
+ * @param filename|obj|string $data filename, open resource, or string
2098
+ * @return string MD5 checksum hexidecimal string
2099
+ */
2100
+ function compute_md5sum(&$data)
2101
+ {
2102
+
2103
+ if (function_exists("hash_init") && is_resource($data)) {
2104
+ $ctx = hash_init('md5');
2105
+ while (!feof($data)) {
2106
+ $buffer = fgets($data, 65536);
2107
+ hash_update($ctx, $buffer);
2108
+ }
2109
+ $md5 = hash_final($ctx, false);
2110
+ rewind($data);
2111
+ } elseif ((string)is_file($data)) {
2112
+ $md5 = md5_file($data);
2113
+ } else {
2114
+ $md5 = md5($data);
2115
+ }
2116
+ return $md5;
2117
+ }
2118
+
2119
+ /**
2120
+ * PRIVATE: fetch information about the remote Object if it exists
2121
+ */
2122
+ private function _initialize()
2123
+ {
2124
+ list($status, $reason, $etag, $last_modified, $content_type,
2125
+ $content_length, $metadata) =
2126
+ $this->container->cfs_http->head_object($this);
2127
+ #if ($status == 401 && $this->_re_auth()) {
2128
+ # return $this->_initialize();
2129
+ #}
2130
+ if ($status == 404) {
2131
+ return False;
2132
+ }
2133
+ if ($status < 200 || $status > 299) {
2134
+ throw new InvalidResponseException("Invalid response (".$status."): "
2135
+ . $this->container->cfs_http->get_error());
2136
+ }
2137
+ $this->etag = $etag;
2138
+ $this->last_modified = $last_modified;
2139
+ $this->content_type = $content_type;
2140
+ $this->content_length = $content_length;
2141
+ $this->metadata = $metadata;
2142
+ return True;
2143
+ }
2144
+
2145
+ #private function _re_auth()
2146
+ #{
2147
+ # $new_auth = new CF_Authentication(
2148
+ # $this->cfs_auth->username,
2149
+ # $this->cfs_auth->api_key,
2150
+ # $this->cfs_auth->auth_host,
2151
+ # $this->cfs_auth->account);
2152
+ # $new_auth->authenticate();
2153
+ # $this->container->cfs_auth = $new_auth;
2154
+ # $this->container->cfs_http->setCFAuth($this->cfs_auth);
2155
+ # return True;
2156
+ #}
2157
+ }
2158
+
2159
+ /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
2160
+
2161
+ /*
2162
+ * Local variables:
2163
+ * tab-width: 4
2164
+ * c-basic-offset: 4
2165
+ * c-hanging-comment-ender-p: nil
2166
+ * End:
2167
+ */
2168
+ ?>
app/libs/rackspace/cloudfiles_exceptions.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Custom Exceptions for the CloudFiles API
4
+ *
5
+ * Requres PHP 5.x (for Exceptions and OO syntax)
6
+ *
7
+ * See COPYING for license information.
8
+ *
9
+ * @author Eric "EJ" Johnson <ej@racklabs.com>
10
+ * @copyright Copyright (c) 2008, Rackspace US, Inc.
11
+ * @package php-cloudfiles-exceptions
12
+ */
13
+
14
+ /**
15
+ * Custom Exceptions for the CloudFiles API
16
+ * @package php-cloudfiles-exceptions
17
+ */
18
+ class SyntaxException extends Exception { }
19
+ class AuthenticationException extends Exception { }
20
+ class InvalidResponseException extends Exception { }
21
+ class NonEmptyContainerException extends Exception { }
22
+ class NoSuchObjectException extends Exception { }
23
+ class NoSuchContainerException extends Exception { }
24
+ class NoSuchAccountException extends Exception { }
25
+ class MisMatchedChecksumException extends Exception { }
26
+ class IOException extends Exception { }
27
+ class CDNNotEnabledException extends Exception { }
28
+ class BadContentTypeException extends Exception { }
29
+ class InvalidUTF8Exception extends Exception { }
30
+ class ConnectionNotOpenException extends Exception { }
31
+
32
+ /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
33
+
34
+ /*
35
+ * Local variables:
36
+ * tab-width: 4
37
+ * c-basic-offset: 4
38
+ * c-hanging-comment-ender-p: nil
39
+ * End:
40
+ */
41
+ ?>
app/libs/rackspace/cloudfiles_http.php ADDED
@@ -0,0 +1,1338 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This is an HTTP client class for Cloud Files. It uses PHP's cURL module
4
+ * to handle the actual HTTP request/response. This is NOT a generic HTTP
5
+ * client class and is only used to abstract out the HTTP communication for
6
+ * the PHP Cloud Files API.
7
+ *
8
+ * This module was designed to re-use existing HTTP(S) connections between
9
+ * subsequent operations. For example, performing multiple PUT operations
10
+ * will re-use the same connection.
11
+ *
12
+ * This modules also provides support for streaming content into and out
13
+ * of Cloud Files. The majority (all?) of the PHP HTTP client modules expect
14
+ * to read the server's response into a string variable. This will not work
15
+ * with large files without killing your server. Methods like,
16
+ * get_object_to_stream() and put_object() take an open filehandle
17
+ * argument for streaming data out of or into Cloud Files.
18
+ *
19
+ * Requres PHP 5.x (for Exceptions and OO syntax)
20
+ *
21
+ * See COPYING for license information.
22
+ *
23
+ * @author Eric "EJ" Johnson <ej@racklabs.com>
24
+ * @copyright Copyright (c) 2008, Rackspace US, Inc.
25
+ * @package php-cloudfiles-http
26
+ */
27
+
28
+ /**
29
+ */
30
+ require_once("cloudfiles_exceptions.php");
31
+
32
+ define("PHP_CF_VERSION", "1.7.4");
33
+ define("USER_AGENT", sprintf("PHP-CloudFiles/%s", PHP_CF_VERSION));
34
+ define("ACCOUNT_CONTAINER_COUNT", "X-Account-Container-Count");
35
+ define("ACCOUNT_BYTES_USED", "X-Account-Bytes-Used");
36
+ define("CONTAINER_OBJ_COUNT", "X-Container-Object-Count");
37
+ define("CONTAINER_BYTES_USED", "X-Container-Bytes-Used");
38
+ define("METADATA_HEADER", "X-Object-Meta-");
39
+ define("CDN_URI", "X-CDN-URI");
40
+ define("CDN_ENABLED", "X-CDN-Enabled");
41
+ define("CDN_LOG_RETENTION", "X-Log-Retention");
42
+ define("CDN_ACL_USER_AGENT", "X-User-Agent-ACL");
43
+ define("CDN_ACL_REFERRER", "X-Referrer-ACL");
44
+ define("CDN_TTL", "X-TTL");
45
+ define("CDNM_URL", "X-CDN-Management-Url");
46
+ define("STORAGE_URL", "X-Storage-Url");
47
+ define("AUTH_TOKEN", "X-Auth-Token");
48
+ define("AUTH_USER_HEADER", "X-Auth-User");
49
+ define("AUTH_KEY_HEADER", "X-Auth-Key");
50
+ define("AUTH_USER_HEADER_LEGACY", "X-Storage-User");
51
+ define("AUTH_KEY_HEADER_LEGACY", "X-Storage-Pass");
52
+ define("AUTH_TOKEN_LEGACY", "X-Storage-Token");
53
+
54
+ /**
55
+ * HTTP/cURL wrapper for Cloud Files
56
+ *
57
+ * This class should not be used directly. It's only purpose is to abstract
58
+ * out the HTTP communication from the main API.
59
+ *
60
+ * @package php-cloudfiles-http
61
+ */
62
+ class CF_Http
63
+ {
64
+ private $error_str;
65
+ private $dbug;
66
+ private $cabundle_path;
67
+ private $api_version;
68
+
69
+ # Authentication instance variables
70
+ #
71
+ private $storage_url;
72
+ private $cdnm_url;
73
+ private $auth_token;
74
+
75
+ # Request/response variables
76
+ #
77
+ private $response_status;
78
+ private $response_reason;
79
+ private $connections;
80
+
81
+ # Variables used for content/header callbacks
82
+ #
83
+ private $_user_read_progress_callback_func;
84
+ private $_user_write_progress_callback_func;
85
+ private $_write_callback_type;
86
+ private $_text_list;
87
+ private $_account_container_count;
88
+ private $_account_bytes_used;
89
+ private $_container_object_count;
90
+ private $_container_bytes_used;
91
+ private $_obj_etag;
92
+ private $_obj_last_modified;
93
+ private $_obj_content_type;
94
+ private $_obj_content_length;
95
+ private $_obj_metadata;
96
+ private $_obj_write_resource;
97
+ private $_obj_write_string;
98
+ private $_cdn_enabled;
99
+ private $_cdn_uri;
100
+ private $_cdn_ttl;
101
+ private $_cdn_log_retention;
102
+ private $_cdn_acl_user_agent;
103
+ private $_cdn_acl_referrer;
104
+
105
+ function __construct($api_version)
106
+ {
107
+ $this->dbug = False;
108
+ $this->cabundle_path = NULL;
109
+ $this->api_version = $api_version;
110
+ $this->error_str = NULL;
111
+
112
+ $this->storage_url = NULL;
113
+ $this->cdnm_url = NULL;
114
+ $this->auth_token = NULL;
115
+
116
+ $this->response_status = NULL;
117
+ $this->response_reason = NULL;
118
+
119
+ # Curl connections array - since there is no way to "re-set" the
120
+ # connection paramaters for a cURL handle, we keep an array of
121
+ # the unique use-cases and funnel all of those same type
122
+ # requests through the appropriate curl connection.
123
+ #
124
+ $this->connections = array(
125
+ "GET_CALL" => NULL, # GET objects/containers/lists
126
+ "PUT_OBJ" => NULL, # PUT object
127
+ "HEAD" => NULL, # HEAD requests
128
+ "PUT_CONT" => NULL, # PUT container
129
+ "DEL_POST" => NULL, # DELETE containers/objects, POST objects
130
+ );
131
+
132
+ $this->_user_read_progress_callback_func = NULL;
133
+ $this->_user_write_progress_callback_func = NULL;
134
+ $this->_write_callback_type = NULL;
135
+ $this->_text_list = array();
136
+ $this->_return_list = NULL;
137
+ $this->_account_container_count = 0;
138
+ $this->_account_bytes_used = 0;
139
+ $this->_container_object_count = 0;
140
+ $this->_container_bytes_used = 0;
141
+ $this->_obj_write_resource = NULL;
142
+ $this->_obj_write_string = "";
143
+ $this->_obj_etag = NULL;
144
+ $this->_obj_last_modified = NULL;
145
+ $this->_obj_content_type = NULL;
146
+ $this->_obj_content_length = NULL;
147
+ $this->_obj_metadata = array();
148
+ $this->_cdn_enabled = NULL;
149
+ $this->_cdn_uri = NULL;
150
+ $this->_cdn_ttl = NULL;
151
+ $this->_cdn_log_retention = NULL;
152
+ $this->_cdn_acl_user_agent = NULL;
153
+ $this->_cdn_acl_referrer = NULL;
154
+
155
+ # The OS list with a PHP without an updated CA File for CURL to
156
+ # connect to SSL Websites. It is the first 3 letters of the PHP_OS
157
+ # variable.
158
+ $OS_CAFILE_NONUPDATED=array(
159
+ "win","dar"
160
+ );
161
+
162
+ if (in_array((strtolower (substr(PHP_OS, 0,3))), $OS_CAFILE_NONUPDATED))
163
+ $this->ssl_use_cabundle();
164
+
165
+ }
166
+
167
+ function ssl_use_cabundle($path=NULL)
168
+ {
169
+ if ($path) {
170
+ $this->cabundle_path = $path;
171
+ } else {
172
+ $this->cabundle_path = dirname(__FILE__) . "/share/cacert.pem";
173
+ }
174
+ if (!file_exists($this->cabundle_path)) {
175
+ throw new IOException("Could not use CA bundle: "
176
+ . $this->cabundle_path);
177
+ }
178
+ return;
179
+ }
180
+
181
+ # Uses separate cURL connection to authenticate
182
+ #
183
+ function authenticate($user, $pass, $acct=NULL, $host=NULL)
184
+ {
185
+ $path = array();
186
+ if (isset($acct) || isset($host)) {
187
+ $headers = array(
188
+ sprintf("%s: %s", AUTH_USER_HEADER_LEGACY, $user),
189
+ sprintf("%s: %s", AUTH_KEY_HEADER_LEGACY, $pass),
190
+ );
191
+ $path[] = $host;
192
+ $path[] = rawurlencode(sprintf("v%d",$this->api_version));
193
+ $path[] = rawurlencode($acct);
194
+ } else {
195
+ $headers = array(
196
+ sprintf("%s: %s", AUTH_USER_HEADER, $user),
197
+ sprintf("%s: %s", AUTH_KEY_HEADER, $pass),
198
+ );
199
+ $path[] = "https://auth.api.rackspacecloud.com";
200
+ }
201
+ $path[] = "v1.0";
202
+ $url = implode("/", $path);
203
+
204
+ $curl_ch = curl_init();
205
+ if (!is_null($this->cabundle_path)) {
206
+ curl_setopt($curl_ch, CURLOPT_SSL_VERIFYPEER, True);
207
+ curl_setopt($curl_ch, CURLOPT_CAINFO, $this->cabundle_path);
208
+ }
209
+ curl_setopt($curl_ch, CURLOPT_VERBOSE, $this->dbug);
210
+ curl_setopt($curl_ch, CURLOPT_FOLLOWLOCATION, 1);
211
+ curl_setopt($curl_ch, CURLOPT_MAXREDIRS, 4);
212
+ curl_setopt($curl_ch, CURLOPT_HEADER, 0);
213
+ curl_setopt($curl_ch, CURLOPT_HTTPHEADER, $headers);
214
+ curl_setopt($curl_ch, CURLOPT_USERAGENT, USER_AGENT);
215
+ curl_setopt($curl_ch, CURLOPT_RETURNTRANSFER, TRUE);
216
+ curl_setopt($curl_ch, CURLOPT_HEADERFUNCTION,array(&$this,'_auth_hdr_cb'));
217
+ curl_setopt($curl_ch, CURLOPT_URL, $url);
218
+ curl_exec($curl_ch);
219
+ curl_close($curl_ch);
220
+
221
+ return array($this->response_status, $this->response_reason,
222
+ $this->storage_url, $this->cdnm_url, $this->auth_token);
223
+ }
224
+
225
+ # (CDN) GET /v1/Account
226
+ #
227
+ function list_cdn_containers()
228
+ {
229
+ $conn_type = "GET_CALL";
230
+ $url_path = $this->_make_path("CDN", $container_name);
231
+
232
+ $this->_write_callback_type = "TEXT_LIST";
233
+ $return_code = $this->_send_request($conn_type, $url_path);
234
+
235
+ if (!$return_code) {
236
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
237
+ array(0,$this->error_str,array());
238
+ }
239
+ if ($return_code == 401) {
240
+ return array($return_code,"Unauthorized",array());
241
+ }
242
+ if ($return_code == 404) {
243
+ return array($return_code,"Account not found.",array());
244
+ }
245
+ if ($return_code == 204) {
246
+ return array($return_code,"Account has no CDN enabled Containers.",
247
+ array());
248
+ }
249
+ if ($return_code == 200) {
250
+ $this->create_array();
251
+ return array($return_code,$this->response_reason,$this->_text_list);
252
+ }
253
+ $this->error_str = "Unexpected HTTP response: ".$this->response_reason;
254
+ return array($return_code,$this->error_str,array());
255
+ }
256
+
257
+ # (CDN) POST /v1/Account/Container
258
+ #
259
+ function update_cdn_container($container_name, $ttl=86400, $cdn_log_retention=False,
260
+ $cdn_acl_user_agent="", $cdn_acl_referrer)
261
+ {
262
+ if ($container_name == "")
263
+ throw new SyntaxException("Container name not set.");
264
+
265
+ if ($container_name != "0" and !isset($container_name))
266
+ throw new SyntaxException("Container name not set.");
267
+
268
+ $url_path = $this->_make_path("CDN", $container_name);
269
+ $hdrs = array(
270
+ CDN_ENABLED => "True",
271
+ CDN_TTL => $ttl,
272
+ CDN_LOG_RETENTION => $cdn_log_retention ? "True" : "False",
273
+ CDN_ACL_USER_AGENT => $cdn_acl_user_agent,
274
+ CDN_ACL_REFERRER => $cdn_acl_referrer,
275
+ );
276
+ $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST");
277
+ if ($return_code == 401) {
278
+ $this->error_str = "Unauthorized";
279
+ return array($return_code, $this->error_str, NULL);
280
+ }
281
+ if ($return_code == 404) {
282
+ $this->error_str = "Container not found.";
283
+ return array($return_code, $this->error_str, NULL);
284
+ }
285
+ if ($return_code != 202) {
286
+ $this->error_str="Unexpected HTTP response: ".$this->response_reason;
287
+ return array($return_code, $this->error_str, NULL);
288
+ }
289
+ return array($return_code, "Accepted", $this->_cdn_uri);
290
+
291
+ }
292
+
293
+ # (CDN) PUT /v1/Account/Container
294
+ #
295
+ function add_cdn_container($container_name, $ttl=86400)
296
+ {
297
+ if ($container_name == "")
298
+ throw new SyntaxException("Container name not set.");
299
+
300
+ if ($container_name != "0" and !isset($container_name))
301
+ throw new SyntaxException("Container name not set.");
302
+
303
+ $url_path = $this->_make_path("CDN", $container_name);
304
+ $hdrs = array(
305
+ CDN_ENABLED => "True",
306
+ CDN_TTL => $ttl,
307
+ );
308
+ $return_code = $this->_send_request("PUT_CONT", $url_path, $hdrs);
309
+ if ($return_code == 401) {
310
+ $this->error_str = "Unauthorized";
311
+ return array($return_code,$this->response_reason,False);
312
+ }
313
+ if (!in_array($return_code, array(201,202))) {
314
+ $this->error_str="Unexpected HTTP response: ".$this->response_reason;
315
+ return array($return_code,$this->response_reason,False);
316
+ }
317
+ return array($return_code,$this->response_reason,$this->_cdn_uri);
318
+ }
319
+
320
+ # (CDN) POST /v1/Account/Container
321
+ #
322
+ function remove_cdn_container($container_name)
323
+ {
324
+ if ($container_name == "")
325
+ throw new SyntaxException("Container name not set.");
326
+
327
+ if ($container_name != "0" and !isset($container_name))
328
+ throw new SyntaxException("Container name not set.");
329
+
330
+ $url_path = $this->_make_path("CDN", $container_name);
331
+ $hdrs = array(CDN_ENABLED => "False");
332
+ $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST");
333
+ if ($return_code == 401) {
334
+ $this->error_str = "Unauthorized";
335
+ return array($return_code, $this->error_str);
336
+ }
337
+ if ($return_code == 404) {
338
+ $this->error_str = "Container not found.";
339
+ return array($return_code, $this->error_str);
340
+ }
341
+ if ($return_code != 202) {
342
+ $this->error_str="Unexpected HTTP response: ".$this->response_reason;
343
+ return array($return_code, $this->error_str);
344
+ }
345
+ return array($return_code, "Accepted");
346
+ }
347
+
348
+ # (CDN) HEAD /v1/Account
349
+ #
350
+ function head_cdn_container($container_name)
351
+ {
352
+ if ($container_name == "")
353
+ throw new SyntaxException("Container name not set.");
354
+
355
+ if ($container_name != "0" and !isset($container_name))
356
+ throw new SyntaxException("Container name not set.");
357
+
358
+ $conn_type = "HEAD";
359
+ $url_path = $this->_make_path("CDN", $container_name);
360
+ $return_code = $this->_send_request($conn_type, $url_path);
361
+
362
+ if (!$return_code) {
363
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
364
+ return array(0,$this->error_str,NULL,NULL,NULL,NULL,NULL,NULL);
365
+ }
366
+ if ($return_code == 401) {
367
+ return array($return_code,"Unauthorized",NULL,NULL,NULL,NULL,NULL,NULL);
368
+ }
369
+ if ($return_code == 404) {
370
+ return array($return_code,"Account not found.",NULL,NULL,NULL,NULL,NULL,NULL);
371
+ }
372
+ if ($return_code == 204) {
373
+ return array($return_code,$this->response_reason,
374
+ $this->_cdn_enabled, $this->_cdn_uri, $this->_cdn_ttl,
375
+ $this->_cdn_log_retention,
376
+ $this->_cdn_acl_user_agent,
377
+ $this->_cdn_acl_referrer
378
+ );
379
+ }
380
+ return array($return_code,$this->response_reason,
381
+ NULL,NULL,NULL,
382
+ $this->_cdn_log_retention,
383
+ $this->_cdn_acl_user_agent,
384
+ $this->_cdn_acl_referrer
385
+ );
386
+ }
387
+
388
+ # GET /v1/Account
389
+ #
390
+ function list_containers($limit=0, $marker=NULL)
391
+ {
392
+ $conn_type = "GET_CALL";
393
+ $url_path = $this->_make_path();
394
+
395
+ $limit = intval($limit);
396
+ $params = array();
397
+ if ($limit > 0) {
398
+ $params[] = "limit=$limit";
399
+ }
400
+ if ($marker) {
401
+ $params[] = "marker=".rawurlencode($marker);
402
+ }
403
+ if (!empty($params)) {
404
+ $url_path .= "?" . implode("&", $params);
405
+ }
406
+
407
+ $this->_write_callback_type = "TEXT_LIST";
408
+ $return_code = $this->_send_request($conn_type, $url_path);
409
+
410
+ if (!$return_code) {
411
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
412
+ return array(0,$this->error_str,array());
413
+ }
414
+ if ($return_code == 204) {
415
+ return array($return_code, "Account has no containers.", array());
416
+ }
417
+ if ($return_code == 404) {
418
+ $this->error_str = "Invalid account name for authentication token.";
419
+ return array($return_code,$this->error_str,array());
420
+ }
421
+ if ($return_code == 200) {
422
+ $this->create_array();
423
+ return array($return_code, $this->response_reason, $this->_text_list);
424
+ }
425
+ $this->error_str = "Unexpected HTTP response: ".$this->response_reason;
426
+ return array($return_code,$this->error_str,array());
427
+ }
428
+
429
+ # GET /v1/Account?format=json
430
+ #
431
+ function list_containers_info($limit=0, $marker=NULL)
432
+ {
433
+ $conn_type = "GET_CALL";
434
+ $url_path = $this->_make_path() . "?format=json";
435
+
436
+ $limit = intval($limit);
437
+ $params = array();
438
+ if ($limit > 0) {
439
+ $params[] = "limit=$limit";
440
+ }
441
+ if ($marker) {
442
+ $params[] = "marker=".rawurlencode($marker);
443
+ }
444
+ if (!empty($params)) {
445
+ $url_path .= "&" . implode("&", $params);
446
+ }
447
+
448
+ $this->_write_callback_type = "OBJECT_STRING";
449
+ $return_code = $this->_send_request($conn_type, $url_path);
450
+
451
+ if (!$return_code) {
452
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
453
+ return array(0,$this->error_str,array());
454
+ }
455
+ if ($return_code == 204) {
456
+ return array($return_code, "Account has no containers.", array());
457
+ }
458
+ if ($return_code == 404) {
459
+ $this->error_str = "Invalid account name for authentication token.";
460
+ return array($return_code,$this->error_str,array());
461
+ }
462
+ if ($return_code == 200) {
463
+ $json_body = json_decode($this->_obj_write_string, True);
464
+ return array($return_code, $this->response_reason, $json_body);
465
+ }
466
+ $this->error_str = "Unexpected HTTP response: ".$this->response_reason;
467
+ return array($return_code,$this->error_str,array());
468
+ }
469
+
470
+ # HEAD /v1/Account
471
+ #
472
+ function head_account()
473
+ {
474
+ $conn_type = "HEAD";
475
+
476
+ $url_path = $this->_make_path();
477
+ $return_code = $this->_send_request($conn_type,$url_path);
478
+
479
+ if (!$return_code) {
480
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
481
+ array(0,$this->error_str,0,0);
482
+ }
483
+ if ($return_code == 404) {
484
+ return array($return_code,"Account not found.",0,0);
485
+ }
486
+ if ($return_code == 204) {
487
+ return array($return_code,$this->response_reason,
488
+ $this->_account_container_count, $this->_account_bytes_used);
489
+ }
490
+ return array($return_code,$this->response_reason,0,0);
491
+ }
492
+
493
+ # PUT /v1/Account/Container
494
+ #
495
+ function create_container($container_name)
496
+ {
497
+ if ($container_name == "")
498
+ throw new SyntaxException("Container name not set.");
499
+
500
+ if ($container_name != "0" and !isset($container_name))
501
+ throw new SyntaxException("Container name not set.");
502
+
503
+ $url_path = $this->_make_path("STORAGE", $container_name);
504
+ $return_code = $this->_send_request("PUT_CONT",$url_path);
505
+
506
+ if (!$return_code) {
507
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
508
+ return False;
509
+ }
510
+ return $return_code;
511
+ }
512
+
513
+ # DELETE /v1/Account/Container
514
+ #
515
+ function delete_container($container_name)
516
+ {
517
+ if ($container_name == "")
518
+ throw new SyntaxException("Container name not set.");
519
+
520
+ if ($container_name != "0" and !isset($container_name))
521
+ throw new SyntaxException("Container name not set.");
522
+
523
+ $url_path = $this->_make_path("STORAGE", $container_name);
524
+ $return_code = $this->_send_request("DEL_POST",$url_path,array(),"DELETE");
525
+
526
+ if (!$return_code) {
527
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
528
+ }
529
+ if ($return_code == 409) {
530
+ $this->error_str = "Container must be empty prior to removing it.";
531
+ }
532
+ if ($return_code == 404) {
533
+ $this->error_str = "Specified container did not exist to delete.";
534
+ }
535
+ if ($return_code != 204) {
536
+ $this->error_str = "Unexpected HTTP return code: $return_code.";
537
+ }
538
+ return $return_code;
539
+ }
540
+
541
+ # GET /v1/Account/Container
542
+ #
543
+ function list_objects($cname,$limit=0,$marker=NULL,$prefix=NULL,$path=NULL)
544
+ {
545
+ if (!$cname) {
546
+ $this->error_str = "Container name not set.";
547
+ return array(0, $this->error_str, array());
548
+ }
549
+
550
+ $url_path = $this->_make_path("STORAGE", $cname);
551
+
552
+ $limit = intval($limit);
553
+ $params = array();
554
+ if ($limit > 0) {
555
+ $params[] = "limit=$limit";
556
+ }
557
+ if ($marker) {
558
+ $params[] = "marker=".rawurlencode($marker);
559
+ }
560
+ if ($prefix) {
561
+ $params[] = "prefix=".rawurlencode($prefix);
562
+ }
563
+ if ($path) {
564
+ $params[] = "path=".rawurlencode($path);
565
+ }
566
+ if (!empty($params)) {
567
+ $url_path .= "?" . implode("&", $params);
568
+ }
569
+
570
+ $conn_type = "GET_CALL";
571
+ $this->_write_callback_type = "TEXT_LIST";
572
+ $return_code = $this->_send_request($conn_type,$url_path);
573
+
574
+ if (!$return_code) {
575
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
576
+ return array(0,$this->error_str,array());
577
+ }
578
+ if ($return_code == 204) {
579
+ $this->error_str = "Container has no Objects.";
580
+ return array($return_code,$this->error_str,array());
581
+ }
582
+ if ($return_code == 404) {
583
+ $this->error_str = "Container has no Objects.";
584
+ return array($return_code,$this->error_str,array());
585
+ }
586
+ if ($return_code == 200) {
587
+ $this->create_array();
588
+ return array($return_code,$this->response_reason, $this->_text_list);
589
+ }
590
+ $this->error_str = "Unexpected HTTP response code: $return_code";
591
+ return array(0,$this->error_str,array());
592
+ }
593
+
594
+ # GET /v1/Account/Container?format=json
595
+ #
596
+ function get_objects($cname,$limit=0,$marker=NULL,$prefix=NULL,$path=NULL)
597
+ {
598
+ if (!$cname) {
599
+ $this->error_str = "Container name not set.";
600
+ return array(0, $this->error_str, array());
601
+ }
602
+
603
+ $url_path = $this->_make_path("STORAGE", $cname);
604
+
605
+ $limit = intval($limit);
606
+ $params = array();
607
+ $params[] = "format=json";
608
+ if ($limit > 0) {
609
+ $params[] = "limit=$limit";
610
+ }
611
+ if ($marker) {
612
+ $params[] = "marker=".rawurlencode($marker);
613
+ }
614
+ if ($prefix) {
615
+ $params[] = "prefix=".rawurlencode($prefix);
616
+ }
617
+ if ($path) {
618
+ $params[] = "path=".rawurlencode($path);
619
+ }
620
+ if (!empty($params)) {
621
+ $url_path .= "?" . implode("&", $params);
622
+ }
623
+
624
+ $conn_type = "GET_CALL";
625
+ $this->_write_callback_type = "OBJECT_STRING";
626
+ $return_code = $this->_send_request($conn_type,$url_path);
627
+
628
+ if (!$return_code) {
629
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
630
+ return array(0,$this->error_str,array());
631
+ }
632
+ if ($return_code == 204) {
633
+ $this->error_str = "Container has no Objects.";
634
+ return array($return_code,$this->error_str,array());
635
+ }
636
+ if ($return_code == 404) {
637
+ $this->error_str = "Container has no Objects.";
638
+ return array($return_code,$this->error_str,array());
639
+ }
640
+ if ($return_code == 200) {
641
+ $json_body = json_decode($this->_obj_write_string, True);
642
+ return array($return_code,$this->response_reason, $json_body);
643
+ }
644
+ $this->error_str = "Unexpected HTTP response code: $return_code";
645
+ return array(0,$this->error_str,array());
646
+ }
647
+
648
+
649
+ # HEAD /v1/Account/Container
650
+ #
651
+ function head_container($container_name)
652
+ {
653
+
654
+ if ($container_name == "") {
655
+ $this->error_str = "Container name not set.";
656
+ return False;
657
+ }
658
+
659
+ if ($container_name != "0" and !isset($container_name)) {
660
+ $this->error_str = "Container name not set.";
661
+ return False;
662
+ }
663
+
664
+ $conn_type = "HEAD";
665
+
666
+ $url_path = $this->_make_path("STORAGE", $container_name);
667
+ $return_code = $this->_send_request($conn_type,$url_path);
668
+
669
+ if (!$return_code) {
670
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
671
+ array(0,$this->error_str,0,0);
672
+ }
673
+ if ($return_code == 404) {
674
+ return array($return_code,"Container not found.",0,0);
675
+ }
676
+ if ($return_code == 204 or 200) {
677
+ return array($return_code,$this->response_reason,
678
+ $this->_container_object_count, $this->_container_bytes_used);
679
+ }
680
+ return array($return_code,$this->response_reason,0,0);
681
+ }
682
+
683
+ # GET /v1/Account/Container/Object
684
+ #
685
+ function get_object_to_string(&$obj, $hdrs=array())
686
+ {
687
+ if (!is_object($obj) || get_class($obj) != "CF_Object") {
688
+ throw new SyntaxException(
689
+ "Method argument is not a valid CF_Object.");
690
+ }
691
+
692
+ $conn_type = "GET_CALL";
693
+
694
+ $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
695
+ $this->_write_callback_type = "OBJECT_STRING";
696
+ $return_code = $this->_send_request($conn_type,$url_path,$hdrs);
697
+
698
+ if (!$return_code) {
699
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
700
+ return array($return_code0,$this->error_str,NULL);
701
+ }
702
+ if ($return_code == 404) {
703
+ $this->error_str = "Object not found.";
704
+ return array($return_code0,$this->error_str,NULL);
705
+ }
706
+ if (($return_code < 200) || ($return_code > 299
707
+ && $return_code != 412 && $return_code != 304)) {
708
+ $this->error_str = "Unexpected HTTP return code: $return_code";
709
+ return array($return_code,$this->error_str,NULL);
710
+ }
711
+ return array($return_code,$this->response_reason, $this->_obj_write_string);
712
+ }
713
+
714
+ # GET /v1/Account/Container/Object
715
+ #
716
+ function get_object_to_stream(&$obj, &$resource=NULL, $hdrs=array())
717
+ {
718
+ if (!is_object($obj) || get_class($obj) != "CF_Object") {
719
+ throw new SyntaxException(
720
+ "Method argument is not a valid CF_Object.");
721
+ }
722
+ if (!is_resource($resource)) {
723
+ throw new SyntaxException(
724
+ "Resource argument not a valid PHP resource.");
725
+ }
726
+
727
+ $conn_type = "GET_CALL";
728
+
729
+ $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
730
+ $this->_obj_write_resource = $resource;
731
+ $this->_write_callback_type = "OBJECT_STREAM";
732
+ $return_code = $this->_send_request($conn_type,$url_path,$hdrs);
733
+
734
+ if (!$return_code) {
735
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
736
+ return array($return_code,$this->error_str);
737
+ }
738
+ if ($return_code == 404) {
739
+ $this->error_str = "Object not found.";
740
+ return array($return_code,$this->error_str);
741
+ }
742
+ if (($return_code < 200) || ($return_code > 299
743
+ && $return_code != 412 && $return_code != 304)) {
744
+ $this->error_str = "Unexpected HTTP return code: $return_code";
745
+ return array($return_code,$this->error_str);
746
+ }
747
+ return array($return_code,$this->response_reason);
748
+ }
749
+
750
+ # PUT /v1/Account/Container/Object
751
+ #
752
+ function put_object(&$obj, &$fp)
753
+ {
754
+ if (!is_object($obj) || get_class($obj) != "CF_Object") {
755
+ throw new SyntaxException(
756
+ "Method argument is not a valid CF_Object.");
757
+ }
758
+ if (!is_resource($fp)) {
759
+ throw new SyntaxException(
760
+ "File pointer argument is not a valid resource.");
761
+ }
762
+
763
+ $conn_type = "PUT_OBJ";
764
+ $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
765
+
766
+ $hdrs = $this->_metadata_headers($obj);
767
+
768
+ $etag = $obj->getETag();
769
+ if (isset($etag)) {
770
+ $hdrs[] = "ETag: " . $etag;
771
+ }
772
+ if (!$obj->content_type) {
773
+ $hdrs[] = "Content-Type: application/octet-stream";
774
+ } else {
775
+ $hdrs[] = "Content-Type: " . $obj->content_type;
776
+ }
777
+
778
+ $this->_init($conn_type);
779
+ curl_setopt($this->connections[$conn_type],
780
+ CURLOPT_INFILE, $fp);
781
+ if (!$obj->content_length) {
782
+ # We don''t know the Content-Length, so assumed "chunked" PUT
783
+ #
784
+ curl_setopt($this->connections[$conn_type], CURLOPT_UPLOAD, True);
785
+ $hdrs[] = 'Transfer-Encoding: chunked';
786
+ } else {
787
+ # We know the Content-Length, so use regular transfer
788
+ #
789
+ curl_setopt($this->connections[$conn_type],
790
+ CURLOPT_INFILESIZE, $obj->content_length);
791
+ }
792
+ $return_code = $this->_send_request($conn_type,$url_path,$hdrs);
793
+
794
+ if (!$return_code) {
795
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
796
+ return array(0,$this->error_str,NULL);
797
+ }
798
+ if ($return_code == 412) {
799
+ $this->error_str = "Missing Content-Type header";
800
+ return array($return_code,$this->error_str,NULL);
801
+ }
802
+ if ($return_code == 422) {
803
+ $this->error_str = "Derived and computed checksums do not match.";
804
+ return array($return_code,$this->error_str,NULL);
805
+ }
806
+ if ($return_code != 201) {
807
+ $this->error_str = "Unexpected HTTP return code: $return_code";
808
+ return array($return_code,$this->error_str,NULL);
809
+ }
810
+ return array($return_code,$this->response_reason,$this->_obj_etag);
811
+ }
812
+
813
+ # POST /v1/Account/Container/Object
814
+ #
815
+ function update_object(&$obj)
816
+ {
817
+ if (!is_object($obj) || get_class($obj) != "CF_Object") {
818
+ throw new SyntaxException(
819
+ "Method argument is not a valid CF_Object.");
820
+ }
821
+
822
+ if (!is_array($obj->metadata) || empty($obj->metadata)) {
823
+ $this->error_str = "Metadata array is empty.";
824
+ return 0;
825
+ }
826
+
827
+ $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
828
+
829
+ $hdrs = $this->_metadata_headers($obj);
830
+ $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST");
831
+ if (!$return_code) {
832
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
833
+ return 0;
834
+ }
835
+ if ($return_code == 404) {
836
+ $this->error_str = "Account, Container, or Object not found.";
837
+ }
838
+ if ($return_code != 202) {
839
+ $this->error_str = "Unexpected HTTP return code: $return_code";
840
+ }
841
+ return $return_code;
842
+ }
843
+
844
+ # HEAD /v1/Account/Container/Object
845
+ #
846
+ function head_object(&$obj)
847
+ {
848
+ if (!is_object($obj) || get_class($obj) != "CF_Object") {
849
+ throw new SyntaxException(
850
+ "Method argument is not a valid CF_Object.");
851
+ }
852
+
853
+ $conn_type = "HEAD";
854
+
855
+ $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
856
+ $return_code = $this->_send_request($conn_type,$url_path);
857
+
858
+ if (!$return_code) {
859
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
860
+ return array(0, $this->error_str." ".$this->response_reason,
861
+ NULL, NULL, NULL, NULL, array());
862
+ }
863
+
864
+ if ($return_code == 404) {
865
+ return array($return_code, $this->response_reason,
866
+ NULL, NULL, NULL, NULL, array());
867
+ }
868
+ if ($return_code == 204 or 200) {
869
+ return array($return_code,$this->response_reason,
870
+ $this->_obj_etag,
871
+ $this->_obj_last_modified,
872
+ $this->_obj_content_type,
873
+ $this->_obj_content_length,
874
+ $this->_obj_metadata);
875
+ }
876
+ $this->error_str = "Unexpected HTTP return code: $return_code";
877
+ return array($return_code, $this->error_str." ".$this->response_reason,
878
+ NULL, NULL, NULL, NULL, array());
879
+ }
880
+
881
+ # DELETE /v1/Account/Container/Object
882
+ #
883
+ function delete_object($container_name, $object_name)
884
+ {
885
+ if ($container_name == "") {
886
+ $this->error_str = "Container name not set.";
887
+ return 0;
888
+ }
889
+
890
+ if ($container_name != "0" and !isset($container_name)) {
891
+ $this->error_str = "Container name not set.";
892
+ return 0;
893
+ }
894
+
895
+ if (!$object_name) {
896
+ $this->error_str = "Object name not set.";
897
+ return 0;
898
+ }
899
+
900
+ $url_path = $this->_make_path("STORAGE", $container_name,$object_name);
901
+ $return_code = $this->_send_request("DEL_POST",$url_path,NULL,"DELETE");
902
+ if (!$return_code) {
903
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
904
+ return 0;
905
+ }
906
+ if ($return_code == 404) {
907
+ $this->error_str = "Specified container did not exist to delete.";
908
+ }
909
+ if ($return_code != 204) {
910
+ $this->error_str = "Unexpected HTTP return code: $return_code.";
911
+ }
912
+ return $return_code;
913
+ }
914
+
915
+ function get_error()
916
+ {
917
+ return $this->error_str;
918
+ }
919
+
920
+ function setDebug($bool)
921
+ {
922
+ $this->dbug = $bool;
923
+ foreach ($this->connections as $k => $v) {
924
+ if (!is_null($v)) {
925
+ curl_setopt($this->connections[$k], CURLOPT_VERBOSE, $this->dbug);
926
+ }
927
+ }
928
+ }
929
+
930
+ function getCDNMUrl()
931
+ {
932
+ return $this->cdnm_url;
933
+ }
934
+
935
+ function getStorageUrl()
936
+ {
937
+ return $this->storage_url;
938
+ }
939
+
940
+ function getAuthToken()
941
+ {
942
+ return $this->auth_token;
943
+ }
944
+
945
+ function setCFAuth($cfs_auth, $servicenet=False)
946
+ {
947
+ if ($servicenet) {
948
+ $this->storage_url = "https://snet-" . substr($cfs_auth->storage_url, 8);
949
+ } else {
950
+ $this->storage_url = $cfs_auth->storage_url;
951
+ }
952
+ $this->auth_token = $cfs_auth->auth_token;
953
+ $this->cdnm_url = $cfs_auth->cdnm_url;
954
+ }
955
+
956
+ function setReadProgressFunc($func_name)
957
+ {
958
+ $this->_user_read_progress_callback_func = $func_name;
959
+ }
960
+
961
+ function setWriteProgressFunc($func_name)
962
+ {
963
+ $this->_user_write_progress_callback_func = $func_name;
964
+ }
965
+
966
+ private function _header_cb($ch, $header)
967
+ {
968
+ preg_match("/^HTTP\/1\.[01] (\d{3}) (.*)/", $header, $matches);
969
+ if (isset($matches[1])) {
970
+ $this->response_status = $matches[1];
971
+ }
972
+ if (isset($matches[2])) {
973
+ $this->response_reason = $matches[2];
974
+ }
975
+ if (stripos($header, CDN_ENABLED) === 0) {
976
+ $val = trim(substr($header, strlen(CDN_ENABLED)+1));
977
+ if (strtolower($val) == "true") {
978
+ $this->_cdn_enabled = True;
979
+ } elseif (strtolower($val) == "false") {
980
+ $this->_cdn_enabled = False;
981
+ } else {
982
+ $this->_cdn_enabled = NULL;
983
+ }
984
+ return strlen($header);
985
+ }
986
+ if (stripos($header, CDN_URI) === 0) {
987
+ $this->_cdn_uri = trim(substr($header, strlen(CDN_URI)+1));
988
+ return strlen($header);
989
+ }
990
+ if (stripos($header, CDN_TTL) === 0) {
991
+ $this->_cdn_ttl = trim(substr($header, strlen(CDN_TTL)+1))+0;
992
+ return strlen($header);
993
+ }
994
+ if (stripos($header, CDN_LOG_RETENTION) === 0) {
995
+ $this->_cdn_log_retention =
996
+ trim(substr($header, strlen(CDN_LOG_RETENTION)+1)) == "True" ? True : False;
997
+ return strlen($header);
998
+ }
999
+
1000
+ if (stripos($header, CDN_ACL_USER_AGENT) === 0) {
1001
+ $this->_cdn_acl_user_agent =
1002
+ trim(substr($header, strlen(CDN_ACL_USER_AGENT)+1));
1003
+ return strlen($header);
1004
+ }
1005
+
1006
+ if (stripos($header, CDN_ACL_REFERRER) === 0) {
1007
+ $this->_cdn_acl_referrer =
1008
+ trim(substr($header, strlen(CDN_ACL_REFERRER)+1));
1009
+ return strlen($header);
1010
+ }
1011
+
1012
+ if (stripos($header, ACCOUNT_CONTAINER_COUNT) === 0) {
1013
+ $this->_account_container_count = (float) trim(substr($header,
1014
+ strlen(ACCOUNT_CONTAINER_COUNT)+1))+0;
1015
+ return strlen($header);
1016
+ }
1017
+ if (stripos($header, ACCOUNT_BYTES_USED) === 0) {
1018
+ $this->_account_bytes_used = (float) trim(substr($header,
1019
+ strlen(ACCOUNT_BYTES_USED)+1))+0;
1020
+ return strlen($header);
1021
+ }
1022
+ if (stripos($header, CONTAINER_OBJ_COUNT) === 0) {
1023
+ $this->_container_object_count = (float) trim(substr($header,
1024
+ strlen(CONTAINER_OBJ_COUNT)+1))+0;
1025
+ return strlen($header);
1026
+ }
1027
+ if (stripos($header, CONTAINER_BYTES_USED) === 0) {
1028
+ $this->_container_bytes_used = (float) trim(substr($header,
1029
+ strlen(CONTAINER_BYTES_USED)+1))+0;
1030
+ return strlen($header);
1031
+ }
1032
+ if (stripos($header, METADATA_HEADER) === 0) {
1033
+ # $header => X-Object-Meta-Foo: bar baz
1034
+ $temp = substr($header, strlen(METADATA_HEADER));
1035
+ # $temp => Foo: bar baz
1036
+ $parts = explode(":", $temp);
1037
+ # $parts[0] => Foo
1038
+ $val = substr(strstr($temp, ":"), 1);
1039
+ # $val => bar baz
1040
+ $this->_obj_metadata[$parts[0]] = trim($val);
1041
+ return strlen($header);
1042
+ }
1043
+ if (stripos($header, "ETag:") === 0) {
1044
+ # $header => ETag: abc123def456...
1045
+ $val = substr(strstr($header, ":"), 1);
1046
+ # $val => abc123def456...
1047
+ $this->_obj_etag = trim($val);
1048
+ return strlen($header);
1049
+ }
1050
+ if (stripos($header, "Last-Modified:") === 0) {
1051
+ $val = substr(strstr($header, ":"), 1);
1052
+ $this->_obj_last_modified = trim($val);
1053
+ return strlen($header);
1054
+ }
1055
+ if (stripos($header, "Content-Type:") === 0) {
1056
+ $val = substr(strstr($header, ":"), 1);
1057
+ $this->_obj_content_type = trim($val);
1058
+ return strlen($header);
1059
+ }
1060
+ if (stripos($header, "Content-Length:") === 0) {
1061
+ $val = substr(strstr($header, ":"), 1);
1062
+ $this->_obj_content_length = (float) trim($val)+0;
1063
+ return strlen($header);
1064
+ }
1065
+ return strlen($header);
1066
+ }
1067
+
1068
+ private function _read_cb($ch, $fd, $length)
1069
+ {
1070
+ $data = fread($fd, $length);
1071
+ $len = strlen($data);
1072
+ if (isset($this->_user_write_progress_callback_func)) {
1073
+ call_user_func($this->_user_write_progress_callback_func, $len);
1074
+ }
1075
+ return $data;
1076
+ }
1077
+
1078
+ private function _write_cb($ch, $data)
1079
+ {
1080
+ $dlen = strlen($data);
1081
+ switch ($this->_write_callback_type) {
1082
+ case "TEXT_LIST":
1083
+ $this->_return_list = $this->_return_list . $data;
1084
+ //= explode("\n",$data); # keep tab,space
1085
+ //his->_text_list[] = rtrim($data,"\n\r\x0B"); # keep tab,space
1086
+ break;
1087
+ case "OBJECT_STREAM":
1088
+ fwrite($this->_obj_write_resource, $data, $dlen);
1089
+ break;
1090
+ case "OBJECT_STRING":
1091
+ $this->_obj_write_string .= $data;
1092
+ break;
1093
+ }
1094
+ if (isset($this->_user_read_progress_callback_func)) {
1095
+ call_user_func($this->_user_read_progress_callback_func, $dlen);
1096
+ }
1097
+ return $dlen;
1098
+ }
1099
+
1100
+ private function _auth_hdr_cb($ch, $header)
1101
+ {
1102
+ preg_match("/^HTTP\/1\.[01] (\d{3}) (.*)/", $header, $matches);
1103
+ if (isset($matches[1])) {
1104
+ $this->response_status = $matches[1];
1105
+ }
1106
+ if (isset($matches[2])) {
1107
+ $this->response_reason = $matches[2];
1108
+ }
1109
+ if (stripos($header, STORAGE_URL) === 0) {
1110
+ $this->storage_url = trim(substr($header, strlen(STORAGE_URL)+1));
1111
+ }
1112
+ if (stripos($header, CDNM_URL) === 0) {
1113
+ $this->cdnm_url = trim(substr($header, strlen(CDNM_URL)+1));
1114
+ }
1115
+ if (stripos($header, AUTH_TOKEN) === 0) {
1116
+ $this->auth_token = trim(substr($header, strlen(AUTH_TOKEN)+1));
1117
+ }
1118
+ if (stripos($header, AUTH_TOKEN_LEGACY) === 0) {
1119
+ $this->auth_token = trim(substr($header,strlen(AUTH_TOKEN_LEGACY)+1));
1120
+ }
1121
+ return strlen($header);
1122
+ }
1123
+
1124
+ private function _make_headers($hdrs=NULL)
1125
+ {
1126
+ $new_headers = array();
1127
+ $has_stoken = False;
1128
+ $has_uagent = False;
1129
+ if (is_array($hdrs)) {
1130
+ foreach ($hdrs as $h => $v) {
1131
+ if (is_int($h)) {
1132
+ $parts = explode(":", $v);
1133
+ $header = $parts[0];
1134
+ $value = trim(substr(strstr($v, ":"), 1));
1135
+ } else {
1136
+ $header = $h;
1137
+ $value = trim($v);
1138
+ }
1139
+
1140
+ if (stripos($header, AUTH_TOKEN) === 0) {
1141
+ $has_stoken = True;
1142
+ }
1143
+ if (stripos($header, "user-agent") === 0) {
1144
+ $has_uagent = True;
1145
+ }
1146
+ $new_headers[] = $header . ": " . $value;
1147
+ }
1148
+ }
1149
+ if (!$has_stoken) {
1150
+ $new_headers[] = AUTH_TOKEN . ": " . $this->auth_token;
1151
+ }
1152
+ if (!$has_uagent) {
1153
+ $new_headers[] = "User-Agent: " . USER_AGENT;
1154
+ }
1155
+ return $new_headers;
1156
+ }
1157
+
1158
+ private function _init($conn_type, $force_new=False)
1159
+ {
1160
+ if (!array_key_exists($conn_type, $this->connections)) {
1161
+ $this->error_str = "Invalid CURL_XXX connection type";
1162
+ return False;
1163
+ }
1164
+
1165
+ if (is_null($this->connections[$conn_type]) || $force_new) {
1166
+ $ch = curl_init();
1167
+ } else {
1168
+ return;
1169
+ }
1170
+
1171
+ if ($this->dbug) { curl_setopt($ch, CURLOPT_VERBOSE, 1); }
1172
+
1173
+ if (!is_null($this->cabundle_path)) {
1174
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, True);
1175
+ curl_setopt($ch, CURLOPT_CAINFO, $this->cabundle_path);
1176
+ }
1177
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, True);
1178
+ curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
1179
+ curl_setopt($ch, CURLOPT_MAXREDIRS, 4);
1180
+ curl_setopt($ch, CURLOPT_HEADER, 0);
1181
+ curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$this, '_header_cb'));
1182
+
1183
+ if ($conn_type == "GET_CALL") {
1184
+ curl_setopt($ch, CURLOPT_WRITEFUNCTION, array(&$this, '_write_cb'));
1185
+ }
1186
+
1187
+ if ($conn_type == "PUT_OBJ") {
1188
+ curl_setopt($ch, CURLOPT_PUT, 1);
1189
+ curl_setopt($ch, CURLOPT_READFUNCTION, array(&$this, '_read_cb'));
1190
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
1191
+ }
1192
+ if ($conn_type == "HEAD") {
1193
+ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "HEAD");
1194
+ curl_setopt($ch, CURLOPT_NOBODY, 1);
1195
+ }
1196
+ if ($conn_type == "PUT_CONT") {
1197
+ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
1198
+ curl_setopt($ch, CURLOPT_INFILESIZE, 0);
1199
+ curl_setopt($ch, CURLOPT_NOBODY, 1);
1200
+ }
1201
+ if ($conn_type == "DEL_POST") {
1202
+ curl_setopt($ch, CURLOPT_NOBODY, 1);
1203
+ }
1204
+ $this->connections[$conn_type] = $ch;
1205
+ return;
1206
+ }
1207
+
1208
+ private function _reset_callback_vars()
1209
+ {
1210
+ $this->_text_list = array();
1211
+ $this->_return_list = NULL;
1212
+ $this->_account_container_count = 0;
1213
+ $this->_account_bytes_used = 0;
1214
+ $this->_container_object_count = 0;
1215
+ $this->_container_bytes_used = 0;
1216
+ $this->_obj_etag = NULL;
1217
+ $this->_obj_last_modified = NULL;
1218
+ $this->_obj_content_type = NULL;
1219
+ $this->_obj_content_length = NULL;
1220
+ $this->_obj_metadata = array();
1221
+ $this->_obj_write_string = "";
1222
+ $this->_cdn_enabled = NULL;
1223
+ $this->_cdn_uri = NULL;
1224
+ $this->_cdn_ttl = NULL;
1225
+ $this->response_status = 0;
1226
+ $this->response_reason = "";
1227
+ }
1228
+
1229
+ private function _make_path($t="STORAGE",$c=NULL,$o=NULL)
1230
+ {
1231
+ $path = array();
1232
+ switch ($t) {
1233
+ case "STORAGE":
1234
+ $path[] = $this->storage_url; break;
1235
+ case "CDN":
1236
+ $path[] = $this->cdnm_url; break;
1237
+ }
1238
+ if ($c == "0")
1239
+ $path[] = rawurlencode($c);
1240
+
1241
+ if ($c) {
1242
+ $path[] = rawurlencode($c);
1243
+ }
1244
+ if ($o) {
1245
+ # mimic Python''s urllib.quote() feature of a "safe" '/' character
1246
+ #
1247
+ $path[] = str_replace("%2F","/",rawurlencode($o));
1248
+ }
1249
+ return implode("/",$path);
1250
+ }
1251
+
1252
+ private function _metadata_headers(&$obj)
1253
+ {
1254
+ $hdrs = array();
1255
+ foreach ($obj->metadata as $k => $v) {
1256
+ if (strpos($k,":") !== False) {
1257
+ throw new SyntaxException(
1258
+ "Metadata keys cannot contain a ':' character.");
1259
+ }
1260
+ $k = trim($k);
1261
+ $key = sprintf("%s%s", METADATA_HEADER, $k);
1262
+ if (!array_key_exists($key, $hdrs)) {
1263
+ if (strlen($k) > 128 || strlen($v) > 256) {
1264
+ $this->error_str = "Metadata key or value exceeds ";
1265
+ $this->error_str .= "maximum length: ($k: $v)";
1266
+ return 0;
1267
+ }
1268
+ $hdrs[] = sprintf("%s%s: %s", METADATA_HEADER, $k, trim($v));
1269
+ }
1270
+ }
1271
+ return $hdrs;
1272
+ }
1273
+
1274
+ private function _send_request($conn_type, $url_path, $hdrs=NULL, $method="GET")
1275
+ {
1276
+ $this->_init($conn_type);
1277
+ $this->_reset_callback_vars();
1278
+ $headers = $this->_make_headers($hdrs);
1279
+
1280
+ if (gettype($this->connections[$conn_type]) == "unknown type")
1281
+ throw new ConnectionNotOpenException (
1282
+ "Connection is not open."
1283
+ );
1284
+
1285
+ switch ($method) {
1286
+ case "DELETE":
1287
+ curl_setopt($this->connections[$conn_type],
1288
+ CURLOPT_CUSTOMREQUEST, "DELETE");
1289
+ break;
1290
+ case "POST":
1291
+ curl_setopt($this->connections[$conn_type],
1292
+ CURLOPT_CUSTOMREQUEST, "POST");
1293
+ default:
1294
+ break;
1295
+ }
1296
+
1297
+ curl_setopt($this->connections[$conn_type],
1298
+ CURLOPT_HTTPHEADER, $headers);
1299
+
1300
+ curl_setopt($this->connections[$conn_type],
1301
+ CURLOPT_URL, $url_path);
1302
+
1303
+ if (!curl_exec($this->connections[$conn_type])) {
1304
+ $this->error_str = "(curl error: "
1305
+ . curl_errno($this->connections[$conn_type]) . ") ";
1306
+ $this->error_str .= curl_error($this->connections[$conn_type]);
1307
+ return False;
1308
+ }
1309
+ return curl_getinfo($this->connections[$conn_type], CURLINFO_HTTP_CODE);
1310
+ }
1311
+
1312
+ function close()
1313
+ {
1314
+ foreach ($this->connections as $cnx) {
1315
+ if (isset($cnx)) {
1316
+ curl_close($cnx);
1317
+ $this->connections[$cnx] = NULL;
1318
+ }
1319
+ }
1320
+ }
1321
+ private function create_array()
1322
+ {
1323
+ $this->_text_list = explode("\n",rtrim($this->_return_list,"\n\x0B"));
1324
+ return True;
1325
+ }
1326
+
1327
+ }
1328
+
1329
+ /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
1330
+
1331
+ /*
1332
+ * Local variables:
1333
+ * tab-width: 4
1334
+ * c-basic-offset: 4
1335
+ * c-hanging-comment-ender-p: nil
1336
+ * End:
1337
+ */
1338
+ ?>
app/libs/rackspace/share/cacert.pem ADDED
@@ -0,0 +1,3113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ##
2
+ ## cacert.pem-foo -- Bundle of CA Root Certificates
3
+ ##
4
+ ## Converted at: Sat Aug 23 21:39:56 2008 UTC
5
+ ##
6
+ ## This is a bundle of X.509 certificates of public Certificate Authorities
7
+ ## (CA). These were automatically extracted from Mozilla's root certificates
8
+ ## file (certdata.txt). This file can be found in the mozilla source tree:
9
+ ## '/mozilla/security/nss/lib/ckfw/builtins/certdata.txt'
10
+ ##
11
+ ## It contains the certificates in PEM format and therefore
12
+ ## can be directly used with curl / libcurl / php_curl, or with
13
+ ## an Apache+mod_ssl webserver for SSL client authentication.
14
+ ## Just configure this file as the SSLCACertificateFile.
15
+ ##
16
+
17
+ # ***** BEGIN LICENSE BLOCK *****
18
+ # Version: MPL 1.1/GPL 2.0/LGPL 2.1
19
+ #
20
+ # The contents of this file are subject to the Mozilla Public License Version
21
+ # 1.1 (the "License"); you may not use this file except in compliance with
22
+ # the License. You may obtain a copy of the License at
23
+ # http://www.mozilla.org/MPL/
24
+ #
25
+ # Software distributed under the License is distributed on an "AS IS" basis,
26
+ # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
27
+ # for the specific language governing rights and limitations under the
28
+ # License.
29
+ #
30
+ # The Original Code is the Netscape security libraries.
31
+ #
32
+ # The Initial Developer of the Original Code is
33
+ # Netscape Communications Corporation.
34
+ # Portions created by the Initial Developer are Copyright (C) 1994-2000
35
+ # the Initial Developer. All Rights Reserved.
36
+ #
37
+ # Contributor(s):
38
+ #
39
+ # Alternatively, the contents of this file may be used under the terms of
40
+ # either the GNU General Public License Version 2 or later (the "GPL"), or
41
+ # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
42
+ # in which case the provisions of the GPL or the LGPL are applicable instead
43
+ # of those above. If you wish to allow use of your version of this file only
44
+ # under the terms of either the GPL or the LGPL, and not to allow others to
45
+ # use your version of this file under the terms of the MPL, indicate your
46
+ # decision by deleting the provisions above and replace them with the notice
47
+ # and other provisions required by the GPL or the LGPL. If you do not delete
48
+ # the provisions above, a recipient may use your version of this file under
49
+ # the terms of any one of the MPL, the GPL or the LGPL.
50
+ #
51
+ # ***** END LICENSE BLOCK *****
52
+ # @(#) $RCSfile: certdata.txt,v $ $Revision: 1.49 $ $Date: 2008/08/14 18:15:56 $
53
+
54
+ Verisign/RSA Secure Server CA
55
+ =============================
56
+ -----BEGIN CERTIFICATE-----
57
+ MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
58
+ IDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2VydmVy
59
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVow
60
+ XzELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQL
61
+ EyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUA
62
+ A4GJADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII0haGN1Xp
63
+ sSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphIuR2nKRoTLkoRWZweFdVJ
64
+ VCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZIhvcNAQECBQADfgBl3X7hsuyw4jrg7HFG
65
+ mhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2
66
+ qUtN8iD3zV9/ZHuO3ABc1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
67
+ -----END CERTIFICATE-----
68
+
69
+ GTE CyberTrust Root CA
70
+ ======================
71
+ -----BEGIN CERTIFICATE-----
72
+ MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
73
+ Q29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJvb3QwHhcNOTYwMjIzMjMwMTAw
74
+ WhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9u
75
+ MRwwGgYDVQQDExNHVEUgQ3liZXJUcnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
76
+ gQC45k+625h8cXyvRLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH
77
+ 6X4MypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/51KiOQswk
78
+ wB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKzdcZfHeFhVYAA1IFLezEP
79
+ I2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWlIjeaY8JIILTbcuPI9tl8vrGvU9oUtCG4
80
+ 1tWW4/5ODFlitppK+ULdjG+BqXH/9ApybW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY
81
+ -----END CERTIFICATE-----
82
+
83
+ GTE CyberTrust Global Root
84
+ ==========================
85
+ -----BEGIN CERTIFICATE-----
86
+ MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
87
+ Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
88
+ A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
89
+ MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
90
+ Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
91
+ IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
92
+ sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
93
+ HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
94
+ AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
95
+ M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
96
+ NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
97
+ -----END CERTIFICATE-----
98
+
99
+ Thawte Personal Basic CA
100
+ ========================
101
+ -----BEGIN CERTIFICATE-----
102
+ MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkExFTATBgNVBAgT
103
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3Vs
104
+ dGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMY
105
+ VGhhd3RlIFBlcnNvbmFsIEJhc2ljIENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0
106
+ aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpB
107
+ MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhh
108
+ d3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24x
109
+ ITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBDQTEoMCYGCSqGSIb3DQEJARYZcGVyc29u
110
+ YWwtYmFzaWNAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+C
111
+ FeZIlDWmWr5vQvoPR+53dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJ
112
+ l+A1OFdKwPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7G1sY
113
+ 0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAt4plrsD16
114
+ iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7c8a914phXAPjLSeoF+CEhULcXpvG
115
+ t7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN
116
+ 92NWod8isQ==
117
+ -----END CERTIFICATE-----
118
+
119
+ Thawte Personal Premium CA
120
+ ==========================
121
+ -----BEGIN CERTIFICATE-----
122
+ MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkExFTATBgNVBAgT
123
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3Vs
124
+ dGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMa
125
+ VGhhd3RlIFBlcnNvbmFsIFByZW1pdW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1p
126
+ dW1AdGhhd3RlLmNvbTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQG
127
+ EwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAYBgNVBAoT
128
+ EVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlz
129
+ aW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJlbWl1bSBDQTEqMCgGCSqGSIb3DQEJARYb
130
+ cGVyc29uYWwtcHJlbWl1bUB0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJ
131
+ Ztn4B0TPuYwu8KHvE0VsBd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ
132
+ 8/JE2dWIEt12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYDZicR
133
+ FTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GB
134
+ AGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIHb4Vnjt4rueIXsDqg8A6iAJrf8xQV
135
+ brvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBhKXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+W
136
+ jS9Q2wfD6h+rM+D1KzGJ
137
+ -----END CERTIFICATE-----
138
+
139
+ Thawte Personal Freemail CA
140
+ ===========================
141
+ -----BEGIN CERTIFICATE-----
142
+ MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkExFTATBgNVBAgT
143
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3Vs
144
+ dGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMb
145
+ VGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVl
146
+ bWFpbEB0aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNV
147
+ BAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
148
+ ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
149
+ aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJ
150
+ ARYccGVyc29uYWwtZnJlZW1haWxAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
151
+ gYEA1GnX1LCUZFtx6UfYDFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6W
152
+ ZBrCFG5ErHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVquzgk
153
+ CGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
154
+ AAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjPMPuoSpaKH2JCI4wXD/S6ZJwXrEcp
155
+ 352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK
156
+ /qarigd1iwzdUYRr5PjRzneigQ==
157
+ -----END CERTIFICATE-----
158
+
159
+ Thawte Server CA
160
+ ================
161
+ -----BEGIN CERTIFICATE-----
162
+ MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
163
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
164
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
165
+ AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
166
+ b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
167
+ BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
168
+ c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
169
+ A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
170
+ ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
171
+ /Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
172
+ 1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
173
+ MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
174
+ GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
175
+ GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
176
+ -----END CERTIFICATE-----
177
+
178
+ Thawte Premium Server CA
179
+ ========================
180
+ -----BEGIN CERTIFICATE-----
181
+ MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
182
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
183
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
184
+ AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
185
+ ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
186
+ AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
187
+ VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
188
+ aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
189
+ cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
190
+ aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
191
+ Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
192
+ qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
193
+ SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
194
+ 8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
195
+ UCemDaYj+bvLpgcUQg==
196
+ -----END CERTIFICATE-----
197
+
198
+ Equifax Secure CA
199
+ =================
200
+ -----BEGIN CERTIFICATE-----
201
+ MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
202
+ ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
203
+ MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
204
+ B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
205
+ nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
206
+ fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
207
+ 8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
208
+ A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
209
+ CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
210
+ A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
211
+ spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
212
+ Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
213
+ zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
214
+ BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
215
+ 70+sB3c4
216
+ -----END CERTIFICATE-----
217
+
218
+ ABAecom (sub., Am. Bankers Assn.) Root CA
219
+ =========================================
220
+ -----BEGIN CERTIFICATE-----
221
+ MIIDtTCCAp2gAwIBAgIRANAeQJAAAEZSAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAwgYkxCzAJBgNV
222
+ BAYTAlVTMQswCQYDVQQIEwJEQzETMBEGA1UEBxMKV2FzaGluZ3RvbjEXMBUGA1UEChMOQUJBLkVD
223
+ T00sIElOQy4xGTAXBgNVBAMTEEFCQS5FQ09NIFJvb3QgQ0ExJDAiBgkqhkiG9w0BCQEWFWFkbWlu
224
+ QGRpZ3NpZ3RydXN0LmNvbTAeFw05OTA3MTIxNzMzNTNaFw0wOTA3MDkxNzMzNTNaMIGJMQswCQYD
225
+ VQQGEwJVUzELMAkGA1UECBMCREMxEzARBgNVBAcTCldhc2hpbmd0b24xFzAVBgNVBAoTDkFCQS5F
226
+ Q09NLCBJTkMuMRkwFwYDVQQDExBBQkEuRUNPTSBSb290IENBMSQwIgYJKoZIhvcNAQkBFhVhZG1p
227
+ bkBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx0xHgeVVD
228
+ BwhMywVCAOINg0Y95JO6tgbTDVm9PsHOQ2cBiiGo77zM0KLMsFWWU4RmBQDaREmA2FQKpSWGlO1j
229
+ Vv9wbKOhGdJ4vmgqRF4vz8wYXke8OrFGPR7wuSw0X4x8TAgpnUBV6zx9g9618PeKgw6hTLQ6pbNf
230
+ WiKX7BmbwQVo/ea3qZGULOR4SCQaJRk665WcOQqKz0Ky8BzVX/tr7WhWezkscjiw7pOp03t3POtx
231
+ A6k4ShZsiSrK2jMTecJVjO2cu/LLWxD4LmE1xilMKtAqY9FlWbT4zfn0AIS2V0KFnTKo+SpU+/94
232
+ Qby9cSj0u5C8/5Y0BONFnqFGKECBAgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYBAf8CAQgwDQYJKoZI
233
+ hvcNAQEFBQADggEBAARvJYbk5pYntNlCwNDJALF/VD6Hsm0kqS8Kfv2kRLD4VAe9G52dyntQJHsR
234
+ W0mjpr8SdNWJt7cvmGQlFLdh6X9ggGvTZOirvRrWUfrAtF13Gn9kCF55xgVM8XrdTX3O5kh7VNJh
235
+ koHWG9YA8A6eKHegTYjHInYZw8eeG6Z3ePhfm1bR8PIXrI6dWeYf/le22V7hXZ9F7GFoGUHhsiAm
236
+ /lowdiT/QHI8eZ98IkirRs3bs4Ysj78FQdPB4xTjQRcm0HyncUwZ6EoPclgxfexgeqMiKL0ZJGA/
237
+ O4dzwGvky663qyVDslUte6sGDnVdNOVdc22esnVApVnJTzFxiNmIf1Q=
238
+ -----END CERTIFICATE-----
239
+
240
+ Digital Signature Trust Co. Global CA 1
241
+ =======================================
242
+ -----BEGIN CERTIFICATE-----
243
+ MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
244
+ ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
245
+ MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
246
+ IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
247
+ A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
248
+ NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
249
+ o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
250
+ BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
251
+ dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
252
+ IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
253
+ MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
254
+ BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
255
+ ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
256
+ kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
257
+ RbyhkwS7hp86W0N6w4pl
258
+ -----END CERTIFICATE-----
259
+
260
+ Digital Signature Trust Co. Global CA 3
261
+ =======================================
262
+ -----BEGIN CERTIFICATE-----
263
+ MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
264
+ ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
265
+ MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
266
+ IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
267
+ A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
268
+ VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
269
+ xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
270
+ BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
271
+ dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
272
+ IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
273
+ MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
274
+ BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
275
+ AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
276
+ up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
277
+ mPnHfxsb1gYgAlihw6ID
278
+ -----END CERTIFICATE-----
279
+
280
+ Digital Signature Trust Co. Global CA 2
281
+ =======================================
282
+ -----BEGIN CERTIFICATE-----
283
+ MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQswCQYDVQQGEwJ1
284
+ czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0
285
+ YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBS
286
+ b290Q0EgWDExITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4
287
+ NTVaFw0wODExMjgxODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UE
288
+ BxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjER
289
+ MA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0BCQEW
290
+ EmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANLGJrbn
291
+ pT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdfWvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZ
292
+ PdJEjdd0IG03Ao9pk1uKxBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGA
293
+ vqPYUrBEzUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F5X5y
294
+ P4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMvOnNn7pTKBBMFYgZw
295
+ I7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAojeyP2n714Z5
296
+ VEkxlTMr89EJFEliYIalsBHiUMIdBlc+LegzZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2
297
+ vAd5ZWRzfdd5ynvVWlHG4VMElo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX
298
+ 8ngvYzZAOONGDx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q
299
+ gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2kYtdo+o56T9II
300
+ 2pPc8JIRetDccpMMc5NihWjQ9A==
301
+ -----END CERTIFICATE-----
302
+
303
+ Digital Signature Trust Co. Global CA 4
304
+ =======================================
305
+ -----BEGIN CERTIFICATE-----
306
+ MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQswCQYDVQQGEwJ1
307
+ czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0
308
+ YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBS
309
+ b290Q0EgWDIxITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2
310
+ MTZaFw0wODExMjcyMjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UE
311
+ BxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjER
312
+ MA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0BCQEW
313
+ EmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANx18IzA
314
+ dZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbVp9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva
315
+ 3G3WqZlVUmfpKAOS3OWwBZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9
316
+ kVySVGkl5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi3sOP
317
+ 17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+QVCvbK4iNC7Va26D
318
+ unm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAtTYOXeFhKFoR
319
+ ZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT
320
+ 4EOvkTvRyyzYdFQ6HE3K1GjNI3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV
321
+ 6YyDfFk/xPEL553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q
322
+ 10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbINuBVd8d+6ybVK
323
+ 1GSYsyapMMj9puyrliGtf8J4tg==
324
+ -----END CERTIFICATE-----
325
+
326
+ Verisign Class 1 Public Primary Certification Authority
327
+ =======================================================
328
+ -----BEGIN CERTIFICATE-----
329
+ MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVT
330
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
331
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTla
332
+ MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3Mg
333
+ MSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEF
334
+ AAOBjQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0NH8xlbgyw
335
+ 0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR4k5FVmkfeAKA2txHkSm7
336
+ NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATANBgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf
337
+ 7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZoEWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnx
338
+ giJduLHdgSOjeyUVRjB5FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0A
339
+ NACY89FxlA==
340
+ -----END CERTIFICATE-----
341
+
342
+ Verisign Class 2 Public Primary Certification Authority
343
+ =======================================================
344
+ -----BEGIN CERTIFICATE-----
345
+ MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
346
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmltYXJ5
347
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
348
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAy
349
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
350
+ A4GNADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyhYGt+eSz6
351
+ Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7FYCTXOvnzAhsPz6zSvz/
352
+ S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBAIobK/o5wXTX
353
+ XtgZZKJYSi034DNHD6zt96rbHuSLBlxgJ8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUY
354
+ YAS/QoD90KioHgE796Ncr6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2
355
+ lw0Xd8rY
356
+ -----END CERTIFICATE-----
357
+
358
+ Verisign Class 3 Public Primary Certification Authority
359
+ =======================================================
360
+ -----BEGIN CERTIFICATE-----
361
+ MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
362
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
363
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
364
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
365
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
366
+ A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
367
+ f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
368
+ hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
369
+ TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
370
+ WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
371
+ Tqj/ZA1k
372
+ -----END CERTIFICATE-----
373
+
374
+ Verisign Class 1 Public Primary Certification Authority - G2
375
+ ============================================================
376
+ -----BEGIN CERTIFICATE-----
377
+ MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
378
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
379
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
380
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
381
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
382
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
383
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
384
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
385
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd
386
+ k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq
387
+ WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB
388
+ MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM
389
+ XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC
390
+ lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ
391
+ -----END CERTIFICATE-----
392
+
393
+ Verisign Class 2 Public Primary Certification Authority - G2
394
+ ============================================================
395
+ -----BEGIN CERTIFICATE-----
396
+ MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV
397
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
398
+ cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
399
+ Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
400
+ c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV
401
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
402
+ cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
403
+ Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
404
+ c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx
405
+ nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC
406
+ wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA
407
+ ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK
408
+ 1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk
409
+ LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg==
410
+ -----END CERTIFICATE-----
411
+
412
+ Verisign Class 3 Public Primary Certification Authority - G2
413
+ ============================================================
414
+ -----BEGIN CERTIFICATE-----
415
+ MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
416
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
417
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
418
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
419
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
420
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
421
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
422
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
423
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
424
+ FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
425
+ lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
426
+ MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
427
+ 1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
428
+ Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
429
+ -----END CERTIFICATE-----
430
+
431
+ Verisign Class 4 Public Primary Certification Authority - G2
432
+ ============================================================
433
+ -----BEGIN CERTIFICATE-----
434
+ MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
435
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFy
436
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
437
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
438
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
439
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFy
440
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
441
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
442
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4
443
+ xBewRNzjMHPVKmIquNDMHO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDH
444
+ qGKB3FtKqsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwIDAQAB
445
+ MA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwjcSGIL4LcY/oCRaxF
446
+ WdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0ycyfYaT5DdPauxYma51N86Xv2S/PB
447
+ ZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRPT8qAkbYp
448
+ -----END CERTIFICATE-----
449
+
450
+ GlobalSign Root CA
451
+ ==================
452
+ -----BEGIN CERTIFICATE-----
453
+ MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
454
+ GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
455
+ b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
456
+ BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
457
+ VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
458
+ DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
459
+ THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
460
+ Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
461
+ c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
462
+ gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
463
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
464
+ AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
465
+ Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
466
+ j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
467
+ hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
468
+ X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
469
+ -----END CERTIFICATE-----
470
+
471
+ GlobalSign Root CA - R2
472
+ =======================
473
+ -----BEGIN CERTIFICATE-----
474
+ MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
475
+ YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
476
+ bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
477
+ aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
478
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
479
+ ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
480
+ s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
481
+ S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
482
+ TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
483
+ ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
484
+ FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
485
+ YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
486
+ BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
487
+ 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
488
+ 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
489
+ 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
490
+ TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
491
+ -----END CERTIFICATE-----
492
+
493
+ ValiCert Class 1 VA
494
+ ===================
495
+ -----BEGIN CERTIFICATE-----
496
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
497
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
498
+ YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
499
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
500
+ MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
501
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
502
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
503
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
504
+ A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
505
+ GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
506
+ DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
507
+ lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
508
+ icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
509
+ Orf1LXLI
510
+ -----END CERTIFICATE-----
511
+
512
+ ValiCert Class 2 VA
513
+ ===================
514
+ -----BEGIN CERTIFICATE-----
515
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
516
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
517
+ YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
518
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
519
+ MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
520
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
521
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
522
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
523
+ A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
524
+ CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
525
+ ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
526
+ SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
527
+ UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
528
+ W9ViH0Pd
529
+ -----END CERTIFICATE-----
530
+
531
+ RSA Root Certificate 1
532
+ ======================
533
+ -----BEGIN CERTIFICATE-----
534
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
535
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
536
+ YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
537
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
538
+ MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
539
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
540
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
541
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
542
+ A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
543
+ 3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
544
+ BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
545
+ 3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
546
+ V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
547
+ on+jjBXu
548
+ -----END CERTIFICATE-----
549
+
550
+ Verisign Class 1 Public Primary Certification Authority - G3
551
+ ============================================================
552
+ -----BEGIN CERTIFICATE-----
553
+ MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
554
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
555
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
556
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
557
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
558
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
559
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
560
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg
561
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
562
+ ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E
563
+ bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ
564
+ rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+
565
+ Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB
566
+ FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
567
+ q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
568
+ y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
569
+ ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h
570
+ a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc
571
+ D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
572
+ -----END CERTIFICATE-----
573
+
574
+ Verisign Class 2 Public Primary Certification Authority - G3
575
+ ============================================================
576
+ -----BEGIN CERTIFICATE-----
577
+ MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT
578
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y
579
+ azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug
580
+ b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0
581
+ aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ
582
+ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
583
+ c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
584
+ aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD
585
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
586
+ AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6
587
+ tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7
588
+ C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS
589
+ 0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs
590
+ Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0
591
+ JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
592
+ 0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
593
+ sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx
594
+ JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j
595
+ GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
596
+ -----END CERTIFICATE-----
597
+
598
+ Verisign Class 3 Public Primary Certification Authority - G3
599
+ ============================================================
600
+ -----BEGIN CERTIFICATE-----
601
+ MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
602
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
603
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
604
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
605
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
606
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
607
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
608
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
609
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
610
+ ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
611
+ EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
612
+ cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
613
+ EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
614
+ 055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
615
+ ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
616
+ j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
617
+ /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
618
+ xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
619
+ t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
620
+ -----END CERTIFICATE-----
621
+
622
+ Verisign Class 4 Public Primary Certification Authority - G3
623
+ ============================================================
624
+ -----BEGIN CERTIFICATE-----
625
+ MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
626
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
627
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
628
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
629
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
630
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
631
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
632
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
633
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
634
+ ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
635
+ tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
636
+ 8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
637
+ Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
638
+ Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
639
+ j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
640
+ mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
641
+ fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
642
+ RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
643
+ UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
644
+ -----END CERTIFICATE-----
645
+
646
+ Entrust.net Secure Server CA
647
+ ============================
648
+ -----BEGIN CERTIFICATE-----
649
+ MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
650
+ BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
651
+ cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
652
+ ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
653
+ cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
654
+ A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
655
+ eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
656
+ dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
657
+ aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
658
+ aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
659
+ gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
660
+ ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
661
+ CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
662
+ dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
663
+ bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
664
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
665
+ dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
666
+ NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
667
+ HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
668
+ BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
669
+ Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
670
+ n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
671
+ -----END CERTIFICATE-----
672
+
673
+ Entrust.net Secure Personal CA
674
+ ==============================
675
+ -----BEGIN CERTIFICATE-----
676
+ MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMCVVMxFDASBgNV
677
+ BAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5uZXQvQ2xpZW50X0NBX0luZm8v
678
+ Q1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlhYi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1
679
+ c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9u
680
+ IEF1dGhvcml0eTAeFw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJV
681
+ UzEUMBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRf
682
+ Q0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMpIDE5
683
+ OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRp
684
+ ZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdv
685
+ kHvkGf9FozTC28GoT/Bo6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGp
686
+ OZ5V+Pux5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zmAqTm
687
+ T173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSCARkwggEVMIHkoIHh
688
+ oIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3
689
+ dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBs
690
+ aWFiLjElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50
691
+ cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg
692
+ KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNVHRAEJDAigA8x
693
+ OTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU
694
+ xPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYEFMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1Ud
695
+ EwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K
696
+ 8ddmAwWePvrqHEa7pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6h
697
+ URzzwy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/aEkP/TOYG
698
+ JqibGapEPHayXOw=
699
+ -----END CERTIFICATE-----
700
+
701
+ Entrust.net Premium 2048 Secure Server CA
702
+ =========================================
703
+ -----BEGIN CERTIFICATE-----
704
+ MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
705
+ ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
706
+ bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
707
+ BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
708
+ NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
709
+ d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
710
+ MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
711
+ ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
712
+ MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
713
+ Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
714
+ hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
715
+ nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
716
+ VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
717
+ AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
718
+ gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
719
+ AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
720
+ oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
721
+ o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
722
+ 2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
723
+ OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
724
+ -----END CERTIFICATE-----
725
+
726
+ Baltimore CyberTrust Root
727
+ =========================
728
+ -----BEGIN CERTIFICATE-----
729
+ MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
730
+ ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
731
+ ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
732
+ SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
733
+ dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
734
+ uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
735
+ UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
736
+ G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
737
+ XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
738
+ l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
739
+ VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
740
+ BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
741
+ cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
742
+ hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
743
+ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
744
+ RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
745
+ -----END CERTIFICATE-----
746
+
747
+ Equifax Secure Global eBusiness CA
748
+ ==================================
749
+ -----BEGIN CERTIFICATE-----
750
+ MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
751
+ RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
752
+ bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
753
+ HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
754
+ b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
755
+ PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
756
+ qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
757
+ hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
758
+ BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
759
+ MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
760
+ I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
761
+ NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
762
+ -----END CERTIFICATE-----
763
+
764
+ Equifax Secure eBusiness CA 1
765
+ =============================
766
+ -----BEGIN CERTIFICATE-----
767
+ MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
768
+ RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
769
+ LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
770
+ ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
771
+ IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
772
+ 1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
773
+ IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
774
+ MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
775
+ Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
776
+ AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
777
+ lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
778
+ KpYrtWKmpj29f5JZzVoqgrI3eQ==
779
+ -----END CERTIFICATE-----
780
+
781
+ Equifax Secure eBusiness CA 2
782
+ =============================
783
+ -----BEGIN CERTIFICATE-----
784
+ MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
785
+ ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
786
+ MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
787
+ DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
788
+ nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
789
+ 2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
790
+ BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
791
+ A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
792
+ JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
793
+ A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
794
+ uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
795
+ Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
796
+ jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
797
+ 78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
798
+ V+GRMOrN
799
+ -----END CERTIFICATE-----
800
+
801
+ Visa International Global Root 2
802
+ ================================
803
+ -----BEGIN CERTIFICATE-----
804
+ MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMCVVMxDTALBgNVBAoT
805
+ BFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25hbCBTZXJ2aWNlIEFzc29jaWF0aW9uMRIw
806
+ EAYDVQQDEwlHUCBSb290IDIwHhcNMDAwODE2MjI1MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYD
807
+ VQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZp
808
+ Y2UgQXNzb2NpYXRpb24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJKoZIhvcNAQEBBQADggEP
809
+ ADCCAQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZDK9vZBv42pWUJGkzEXDK41Z0ohdXZFwgBuHW
810
+ 73G3O/erwWnQSaSxBNf0V2KJXLB1LRckaeNCYOTudNargFbYiCjh+20i/SN8RnNPflRzHqgsVVh1
811
+ t0zzWkWlAhr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU58fy+pmjIlC++QU3o63tmsPm7Igbthkn
812
+ GziLgE3sucfFicv8GjLtI/C1AVj59o/ghalMCXI5Etuz9c9OYmTaxhkVOmMd6RdVoUwiPDQyRvhl
813
+ V7or7zaMavrZ2UT0qt2E1w0cslSsMoW0ZA3eQbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYE
814
+ FJ59SzS/ca3CBfYDdYDOqU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0G
815
+ CSqGSIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHbmQdpNSYx/scuhMKZ
816
+ YdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQkIqUs38oW26sTTMs7WXcFsziza6k
817
+ PWKSBpUmv9+55CCmc2rBvveURNZNbyoLaxhNdBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOe
818
+ yti12HvOdUVmB/RtLdh6yumJivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8
819
+ ofyrEK9ca3CnB+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G
820
+ -----END CERTIFICATE-----
821
+
822
+ beTRUSTed Root CA
823
+ =================
824
+ -----BEGIN CERTIFICATE-----
825
+ MIIFLDCCBBSgAwIBAgIEOU99hzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJXVzESMBAGA1UE
826
+ ChMJYmVUUlVTVGVkMRswGQYDVQQDExJiZVRSVVNUZWQgUm9vdCBDQXMxGjAYBgNVBAMTEWJlVFJV
827
+ U1RlZCBSb290IENBMB4XDTAwMDYyMDE0MjEwNFoXDTEwMDYyMDEzMjEwNFowWjELMAkGA1UEBhMC
828
+ V1cxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UEAxMSYmVUUlVTVGVkIFJvb3QgQ0FzMRowGAYD
829
+ VQQDExFiZVRSVVNUZWQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANS0
830
+ c3oTCjhVAb6JVuGUntS+WutKNHUbYSnE4a0IYCF4SP+00PpeQY1hRIfo7clY+vyTmt9P6j41ffgz
831
+ eubx181vSUs9Ty1uDoM6GHh3o8/n9E1z2Jo7Gh2+lVPPIJfCzz4kUmwMjmVZxXH/YgmPqsWPzGCg
832
+ c0rXOD8Vcr+il7dw6K/ifhYGTPWqZCZyByWtNfwYsSbX2P8ZDoMbjNx4RWc0PfSvHI3kbWvtILNn
833
+ mrRhyxdviTX/507AMhLn7uzf/5cwdO2NR47rtMNE5qdMf1ZD6Li8tr76g5fmu/vEtpO+GRg+jIG5
834
+ c4gW9JZDnGdzF5DYCW5jrEq2I8QBoa2k5MUCAwEAAaOCAfgwggH0MA8GA1UdEwEB/wQFMAMBAf8w
835
+ ggFZBgNVHSAEggFQMIIBTDCCAUgGCisGAQQBsT4BAAAwggE4MIIBAQYIKwYBBQUHAgIwgfQagfFS
836
+ ZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFu
837
+ Y2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv
838
+ ZiB1c2UsIGFuZCBjZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudCwgd2hpY2ggY2FuIGJl
839
+ IGZvdW5kIGF0IGJlVFJVU1RlZCdzIHdlYiBzaXRlLCBodHRwczovL3d3dy5iZVRSVVNUZWQuY29t
840
+ L3ZhdWx0L3Rlcm1zMDEGCCsGAQUFBwIBFiVodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0
841
+ L3Rlcm1zMDQGA1UdHwQtMCswKaAnoCWkIzAhMRIwEAYDVQQKEwliZVRSVVNUZWQxCzAJBgNVBAYT
842
+ AldXMB0GA1UdDgQWBBQquZtpLjub2M3eKjEENGvKBxirZzAfBgNVHSMEGDAWgBQquZtpLjub2M3e
843
+ KjEENGvKBxirZzAOBgNVHQ8BAf8EBAMCAf4wDQYJKoZIhvcNAQEFBQADggEBAHlh26Nebhax6nZR
844
+ +csVm8tpvuaBa58oH2U+3RGFktToQb9+M70j5/Egv6S0phkBxoyNNXxlpE8JpNbYIxUFE6dDea/b
845
+ ow6be3ga8wSGWsb2jCBHOElQBp1yZzrwmAOtlmdE/D8QDYZN5AA7KXvOOzuZhmElQITcE2K3+spZ
846
+ 1gMe1lMBzW1MaFVA4e5rxyoAAEiCswoBw2AqDPeCNe5IhpbkdNQ96gFxugR1QKepfzk5mlWXKWWu
847
+ GVUlBXJH0+gY3Ljpr0NzARJ0o+FcXxVdJPP55PS2Z2cS52QiivalQaYctmBjRYoQtLpGEK5BV2Vs
848
+ PyMQPyEQWbfkQN0mDCP2qq4=
849
+ -----END CERTIFICATE-----
850
+
851
+ AddTrust Low-Value Services Root
852
+ ================================
853
+ -----BEGIN CERTIFICATE-----
854
+ MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
855
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
856
+ cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
857
+ CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
858
+ ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
859
+ AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
860
+ 54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
861
+ oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
862
+ Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
863
+ GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
864
+ HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
865
+ AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
866
+ RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
867
+ HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
868
+ ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
869
+ iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
870
+ eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
871
+ mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
872
+ ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
873
+ -----END CERTIFICATE-----
874
+
875
+ AddTrust External Root
876
+ ======================
877
+ -----BEGIN CERTIFICATE-----
878
+ MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
879
+ QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
880
+ VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
881
+ NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
882
+ cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
883
+ Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
884
+ +iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
885
+ Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
886
+ aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
887
+ 2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
888
+ 7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
889
+ BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
890
+ VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
891
+ VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
892
+ IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
893
+ j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
894
+ 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
895
+ e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
896
+ G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
897
+ -----END CERTIFICATE-----
898
+
899
+ AddTrust Public Services Root
900
+ =============================
901
+ -----BEGIN CERTIFICATE-----
902
+ MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
903
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
904
+ cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
905
+ BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
906
+ dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
907
+ AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
908
+ nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
909
+ d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
910
+ Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
911
+ HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
912
+ A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
913
+ /zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
914
+ FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
915
+ A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
916
+ JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
917
+ +YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
918
+ GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
919
+ Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
920
+ EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
921
+ -----END CERTIFICATE-----
922
+
923
+ AddTrust Qualified Certificates Root
924
+ ====================================
925
+ -----BEGIN CERTIFICATE-----
926
+ MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
927
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
928
+ cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
929
+ CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
930
+ IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
931
+ 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
932
+ 64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
933
+ KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
934
+ L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
935
+ wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
936
+ MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
937
+ BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
938
+ BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
939
+ azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
940
+ ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
941
+ GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
942
+ dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
943
+ RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
944
+ iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
945
+ -----END CERTIFICATE-----
946
+
947
+ Verisign Time Stamping Authority CA
948
+ ===================================
949
+ -----BEGIN CERTIFICATE-----
950
+ MIIDzTCCAzagAwIBAgIQU2GyYK7bcY6nlLMTM/QHCTANBgkqhkiG9w0BAQUFADCBwTELMAkGA1UE
951
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQLEzNDbGFzcyAzIFB1YmxpYyBQ
952
+ cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZl
953
+ cmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWdu
954
+ IFRydXN0IE5ldHdvcmswHhcNMDAwOTI2MDAwMDAwWhcNMTAwOTI1MjM1OTU5WjCBpTEXMBUGA1UE
955
+ ChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNV
956
+ BAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTAwMSww
957
+ KgYDVQQDEyNWZXJpU2lnbiBUaW1lIFN0YW1waW5nIEF1dGhvcml0eSBDQTCBnzANBgkqhkiG9w0B
958
+ AQEFAAOBjQAwgYkCgYEA0hmdZ8IAIVlizrQJIkRpivglWtvtDbc2fk7gu5Q+kCWHwmFHKdm9VLhj
959
+ zCx9abQzNvQ3B5rB3UBU/OB4naCTuQk9I1F/RMIUdNsKvsvJMDRAmD7Q1yUQgZS9B0+c1lQn3y6o
960
+ v8uQjI11S7zi6ESHzeZBCiVu6PQkAsVSD27smHUCAwEAAaOB3zCB3DAPBgNVHRMECDAGAQH/AgEA
961
+ MEUGA1UdIAQ+MDwwOgYMYIZIAYb4RQEHFwEDMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZl
962
+ cmlzaWduLmNvbS9ycGEwMQYDVR0fBCowKDAmoCSgIoYgaHR0cDovL2NybC52ZXJpc2lnbi5jb20v
963
+ cGNhMy5jcmwwCwYDVR0PBAQDAgEGMEIGCCsGAQUFBwEBBDYwNDAyBggrBgEFBQcwAaYmFiRodHRw
964
+ Oi8vb2NzcC52ZXJpc2lnbi5jb20vb2NzcC9zdGF0dXMwDQYJKoZIhvcNAQEFBQADgYEAgnBold+2
965
+ DcIBcBlK0lRWHqzyRUyHuPU163hLBanInTsZIS5wNEqi9YngFXVF5yg3ADQnKeg3S/LvRJdrF1Ea
966
+ w1adPBqK9kpGRjeM+sv1ZFo4aC4cw+9wzrhGBha/937ntag+RaypJXUie28/sJyU58dzq6wf7iWb
967
+ wBbtt8pb8BQ=
968
+ -----END CERTIFICATE-----
969
+
970
+ Thawte Time Stamping CA
971
+ =======================
972
+ -----BEGIN CERTIFICATE-----
973
+ MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkExFTATBgNVBAgT
974
+ DFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG
975
+ A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcg
976
+ Q0EwHhcNOTcwMTAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNV
977
+ BAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEd
978
+ MBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBp
979
+ bmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT6jR7UZztsOYuGA7+4F+o
980
+ J9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQaWt9MevPZQx08EHp5JduQ/vBR5zDWQQD9
981
+ nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzAR
982
+ MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCo
983
+ uqoEiYbC9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQpgCe
984
+ d/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZCayJSdM=
985
+ -----END CERTIFICATE-----
986
+
987
+ Entrust.net Global Secure Server CA
988
+ ===================================
989
+ -----BEGIN CERTIFICATE-----
990
+ MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChMLRW50cnVzdC5u
991
+ ZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGluY29ycC4gYnkgcmVmLiAobGlt
992
+ aXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UE
993
+ AxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0w
994
+ MDAyMDQxNzIwMDBaFw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0G
995
+ A1UECxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlh
996
+ Yi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRy
997
+ dXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3
998
+ DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55l
999
+ xyKbc+bT3QgON1WqJUaBbL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439P
1000
+ mrkDQYC2dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4QgEB
1001
+ BAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoTC0VudHJ1c3QubmV0
1002
+ MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxpbWl0
1003
+ cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMT
1004
+ MUVudHJ1c3QubmV0IFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNV
1005
+ BAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD
1006
+ VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1UdDgQWBBTLbMBr
1007
+ 47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w
1008
+ AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsiad0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbv
1009
+ H9X07t9WLebKahlzqlO+krNQAraFJnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3
1010
+ a9kC9n8O6mUE8c1UyrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw==
1011
+ -----END CERTIFICATE-----
1012
+
1013
+ Entrust.net Global Secure Personal CA
1014
+ =====================================
1015
+ -----BEGIN CERTIFICATE-----
1016
+ MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
1017
+ ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxp
1018
+ bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
1019
+ BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcx
1020
+ NjE2NDBaFw0yMDAyMDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
1021
+ d3d3LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
1022
+ MCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
1023
+ ZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
1024
+ iQKBgQCTdLS25MVL1qFof2LV7PdRV7NySpj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQl
1025
+ hK8pK5/jgOLZy93GRUk0iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKkl
1026
+ Wb1m9fkn5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHdBgNV
1027
+ HR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUAwPgYDVQQLFDd3
1028
+ d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUw
1029
+ IwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5l
1030
+ dCBDbGllbnQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
1031
+ IoAPMjAwMDAyMDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
1032
+ MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdFfP4tzrrTfTAM
1033
+ BgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQF
1034
+ AAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMShAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xK
1035
+ p9U1PL6oXOpLu5OOgGarDyn9TS2/GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQ
1036
+ Gof4T4HHdguEOnKdzmVml64mXg==
1037
+ -----END CERTIFICATE-----
1038
+
1039
+ Entrust Root Certification Authority
1040
+ ====================================
1041
+ -----BEGIN CERTIFICATE-----
1042
+ MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
1043
+ BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
1044
+ b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
1045
+ A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
1046
+ MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
1047
+ MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
1048
+ Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
1049
+ dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
1050
+ ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
1051
+ A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
1052
+ Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
1053
+ j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
1054
+ rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
1055
+ DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
1056
+ MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
1057
+ hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
1058
+ A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
1059
+ Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
1060
+ v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
1061
+ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
1062
+ tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
1063
+ -----END CERTIFICATE-----
1064
+
1065
+ AOL Time Warner Root Certification Authority 1
1066
+ ==============================================
1067
+ -----BEGIN CERTIFICATE-----
1068
+ MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMxHTAbBgNVBAoT
1069
+ FEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNhIE9ubGluZSBJbmMuMTcwNQYD
1070
+ VQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAy
1071
+ MDUyOTA2MDAwMFoXDTM3MTEyMDE1MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wg
1072
+ VGltZSBXYXJuZXIgSW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMu
1073
+ QU9MIFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZI
1074
+ hvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U0pPlLYnKhHw/EEMbjIt8
1075
+ hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItITuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkG
1076
+ IBKOQuHfD5YQUqjPnF+VFNivO3ULMSAfRC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93
1077
+ f7DKeHEMXRZxcKLXwjqFzQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQI
1078
+ fHNlIAqhBC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEAAaNj
1079
+ MGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jYPXy+XxIwHwYDVR0j
1080
+ BBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUA
1081
+ A4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u
1082
+ 0FIy2VkyvNp5ctZ7CegCgTXTCt8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77Bf
1083
+ WgDrvq2g+EQFZ7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX
1084
+ n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoWH1iCC+GWaQVL
1085
+ juyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S
1086
+ -----END CERTIFICATE-----
1087
+
1088
+ AOL Time Warner Root Certification Authority 2
1089
+ ==============================================
1090
+ -----BEGIN CERTIFICATE-----
1091
+ MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMxHTAbBgNVBAoT
1092
+ FEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNhIE9ubGluZSBJbmMuMTcwNQYD
1093
+ VQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAy
1094
+ MDUyOTA2MDAwMFoXDTM3MDkyODIzNDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wg
1095
+ VGltZSBXYXJuZXIgSW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMu
1096
+ QU9MIFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZI
1097
+ hvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ7ouZzU9AhqS2TcnZsdw8
1098
+ TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilbm2BPJoPRYxJWSXakFsKlnUWsi4SVqBax
1099
+ 7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOYxFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17n
1100
+ OirYlxcwfACtCJ0zr7iZYYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2w
1101
+ TPDaRrbqJS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fxI2rS
1102
+ AG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETzkxmlJ85per5n0/xQ
1103
+ pCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFhEVsVS6kkUfykXPcXnbDS+gfpj1bk
1104
+ GoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/SBtc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuW
1105
+ CpTehTacyH+BCQJJKg71ZDIMgtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1Ex
1106
+ MVCgyhwn2RAurda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
1107
+ FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO1b+pxCAoMA4G
1108
+ A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyuguh4X7ZVnnrREUpVe8WJ8kEle7
1109
+ +z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdPyXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI
1110
+ 5Rq8NEQh3q0l/HYWdyGQgJhXnU7q7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcC
1111
+ tQVBynlQboIOcXKTRuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ
1112
+ 68W/ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyBM5kYJRF3
1113
+ p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQmy8YJPamTQr5O8t1wswv
1114
+ ziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xOAU++CrYD062KRffaJ00psUjf5BHklka9
1115
+ bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4o
1116
+ GKQWDzH9OmwjkyB24f0HhdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2
1117
+ uBOLZ8/5fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=
1118
+ -----END CERTIFICATE-----
1119
+
1120
+ beTRUSTed Root CA-Baltimore Implementation
1121
+ ==========================================
1122
+ -----BEGIN CERTIFICATE-----
1123
+ MIIFajCCBFKgAwIBAgIEPLU9RjANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwliZVRSVVNUZWQx
1124
+ GzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMqYmVUUlVTVGVkIFJvb3QgQ0Et
1125
+ QmFsdGltb3JlIEltcGxlbWVudGF0aW9uMB4XDTAyMDQxMTA3Mzg1MVoXDTIyMDQxMTA3Mzg1MVow
1126
+ ZjESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNV
1127
+ BAMTKmJlVFJVU1RlZCBSb290IENBLUJhbHRpbW9yZSBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZI
1128
+ hvcNAQEBBQADggEPADCCAQoCggEBALx+xDmcjOPWHIb/ymKt4H8wRXqOGrO4x/nRNv8i805qX4QQ
1129
+ +2aBw5R5MdKR4XeOGCrDFN5R9U+jK7wYFuK13XneIviCfsuBH/0nLI/6l2Qijvj/YaOcGx6Sj8Co
1130
+ Cd8JEey3fTGaGuqDIQY8n7pc/5TqarjDa1U0Tz0yH92BFODEPM2dMPgwqZfT7syj0B9fHBOB1Bir
1131
+ lNFjw55/NZKeX0Tq7PQiXLfoPX2k+YmpkbIq2eszh+6l/ePazIjmiSZuxyuC0F6dWdsU7JGDBcNe
1132
+ DsYq0ATdcT0gTlgn/FP7eHgZFLL8kFKJOGJgB7Sg7KxrUNb9uShr71ItOrL/8QFArDcCAwEAAaOC
1133
+ Ah4wggIaMA8GA1UdEwEB/wQFMAMBAf8wggG1BgNVHSAEggGsMIIBqDCCAaQGDysGAQQBsT4AAAEJ
1134
+ KIORMTCCAY8wggFIBggrBgEFBQcCAjCCAToaggE2UmVsaWFuY2Ugb24gb3IgdXNlIG9mIHRoaXMg
1135
+ Q2VydGlmaWNhdGUgY3JlYXRlcyBhbiBhY2tub3dsZWRnbWVudCBhbmQgYWNjZXB0YW5jZSBvZiB0
1136
+ aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwg
1137
+ dGhlIENlcnRpZmljYXRpb24gUHJhY3RpY2UgU3RhdGVtZW50IGFuZCB0aGUgUmVseWluZyBQYXJ0
1138
+ eSBBZ3JlZW1lbnQsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdCB0aGUgYmVUUlVTVGVkIHdlYiBzaXRl
1139
+ LCBodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDBB
1140
+ BggrBgEFBQcCARY1aHR0cDovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2VzL2lu
1141
+ ZGV4Lmh0bWwwHQYDVR0OBBYEFEU9w6nR3D8kVpgccxiIav+DR+22MB8GA1UdIwQYMBaAFEU9w6nR
1142
+ 3D8kVpgccxiIav+DR+22MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEASZK8o+6s
1143
+ vfoNyYt5hhwjdrCAWXf82n+0S9/DZEtqTg6t8n1ZdwWtColzsPq8y9yNAIiPpqCy6qxSJ7+hSHyX
1144
+ EHu67RMdmgduyzFiEuhjA6p9beP4G3YheBufS0OM00mG9htc9i5gFdPp43t1P9ACg9AYgkHNZTfq
1145
+ jjJ+vWuZXTARyNtIVBw74acT02pIk/c9jH8F6M7ziCpjBLjqflh8AXtb4cV97yHgjQ5dUX2xZ/2j
1146
+ vTg2xvI4hocalmhgRvsoFEdV4aeADGvi6t9NfJBIoDa9CReJf8Py05yc493EG931t3GzUwWJBtDL
1147
+ SoDByFOQtTwxiBdQn8nEDovYqAJjDQ==
1148
+ -----END CERTIFICATE-----
1149
+
1150
+ beTRUSTed Root CA - Entrust Implementation
1151
+ ==========================================
1152
+ -----BEGIN CERTIFICATE-----
1153
+ MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwliZVRSVVNUZWQx
1154
+ GzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMqYmVUUlVTVGVkIFJvb3QgQ0Eg
1155
+ LSBFbnRydXN0IEltcGxlbWVudGF0aW9uMB4XDTAyMDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1ow
1156
+ ZjESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNV
1157
+ BAMTKmJlVFJVU1RlZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZI
1158
+ hvcNAQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1Q+xVkrYwfTVXDNvzDSduTPdQqJtOK2/b9a0c
1159
+ S12zqcH+e0TrW6MFDR/FNCswACnxeECypP869AGIF37m1CbTukzqMvtDd5eHI8XbQ6P1KqNRXuE7
1160
+ 0mVpflUVm3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdjDheT389Lrm5zdeDzqrmkwAkbhepxKYhB
1161
+ MvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCeyv78IZTuEyhL11xeDGbu6bsPwTSxfwh28z0mcMmLJR1i
1162
+ JAzqHHVOwBLkuhMdMCktVjMFu5dZfsZJT4nXLySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOC
1163
+ AwUwggMBMIIBtwYDVR0gBIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYIKwYB
1164
+ BQUHAgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNyZWF0
1165
+ ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
1166
+ ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9u
1167
+ IFByYWN0aWNlIFN0YXRlbWVudCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGlj
1168
+ aCBjYW4gYmUgZm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0cHM6Ly93d3cuYmV0
1169
+ cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMEIGCCsGAQUFBwIBFjZodHRw
1170
+ czovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2VzL2luZGV4Lmh0bWwwEQYJYIZI
1171
+ AYb4QgEBBAQDAgAHMIGJBgNVHR8EgYEwfzB9oHugeaR3MHUxEjAQBgNVBAoTCWJlVFJVU1RlZDEb
1172
+ MBkGA1UECxMSYmVUUlVTVGVkIFJvb3QgQ0FzMTMwMQYDVQQDEypiZVRSVVNUZWQgUm9vdCBDQSAt
1173
+ IEVudHJ1c3QgSW1wbGVtZW50YXRpb24xDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0
1174
+ MTEwODI0MjdagQ8yMDIyMDQxMTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFH1w5a44
1175
+ iwY/qhwaj/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQwqoSEFjAMBgNVHRMEBTAD
1176
+ AQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEAKrgX
1177
+ zh8QlOu4mre5X+za95IkrNySO8cgjfKZ5V04ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevd
1178
+ kObRVlTa4y0MnxEylCIBevZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/
1179
+ T220Y/ozADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2KjiS2d2kXgCl
1180
+ zMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFiaDrmLzfzgYYhxKlkqu9FNtEaZnz4
1181
+ 6TfW1mG+oq1I59/mdP7TbX3SJdysYlep9w==
1182
+ -----END CERTIFICATE-----
1183
+
1184
+ beTRUSTed Root CA - RSA Implementation
1185
+ ======================================
1186
+ -----BEGIN CERTIFICATE-----
1187
+ MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUFADBiMRIwEAYDVQQK
1188
+ EwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEvMC0GA1UEAxMmYmVUUlVT
1189
+ VGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEy
1190
+ MTEwNzI1WjBiMRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENB
1191
+ czEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wggEiMA0G
1192
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQwCY5X0LkGLG9uJIAiv11DpvpPrILnHGhwhRuj
1193
+ brWqeNluB0s/6d/16uhUoWGKDi9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I1DpAa5LxmZZk3tv/ePTu
1194
+ lh1HiXzUvrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPktPDgaTuID0GQ+NRxQyTBjyZLO1bp/4xs
1195
+ N+lFrYWMU8NghpBKlsmzVLC7F/AcRdnUGxlkVgoZ98zh/4avflherHqQH8koOUV7orbHnB/ahdQh
1196
+ hlkwk75TMzf270HPM8ercmsl9fNTGwxMLvF1S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMB
1197
+ AAGjggIYMIICFDAMBgNVHRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+AAAD
1198
+ CSiDkTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVjdHNf
1199
+ c2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIBOhqCATZSZWxpYW5jZSBvbiBvciB1
1200
+ c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBjcmVhdGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2Nl
1201
+ cHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlv
1202
+ bnMgb2YgdXNlLCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQgYW5kIHRoZSBS
1203
+ ZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IHRoZSBiZVRSVVNU
1204
+ ZWQgd2ViIHNpdGUsIGh0dHA6Ly93d3cuYmV0cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9p
1205
+ bmRleC5odG1sMAsGA1UdDwQEAwIBBjAfBgNVHSMEGDAWgBSp7BR++dlDzFMrFK3P9/BZiUHNGTAd
1206
+ BgNVHQ4EFgQUqewUfvnZQ8xTKxStz/fwWYlBzRkwDQYJKoZIhvcNAQEFBQADggEBANuXsHXqDMTB
1207
+ mMpWBcCorSZIry0g6IHHtt9DwSwddUvUQo3neqh03GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05
1208
+ pmuKmET7m9cqg5c0Lcd9NUwtNLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbdLrML3kqN
1209
+ Wz2rDcI1UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28BbJ1zTcwfBwvNMm2+fG8oe
1210
+ qqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3SK41ty8ymmFei74pnykkiFY5LKjSq5YD
1211
+ WtRIn7lAhAuYaPsBQ9Yb4gmxlxw=
1212
+ -----END CERTIFICATE-----
1213
+
1214
+ RSA Security 2048 v3
1215
+ ====================
1216
+ -----BEGIN CERTIFICATE-----
1217
+ MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
1218
+ ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
1219
+ MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
1220
+ BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
1221
+ AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
1222
+ Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
1223
+ WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
1224
+ KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
1225
+ +Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
1226
+ MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
1227
+ FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
1228
+ v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
1229
+ 0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
1230
+ VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
1231
+ nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
1232
+ pKnXwiJPZ9d37CAFYd4=
1233
+ -----END CERTIFICATE-----
1234
+
1235
+ RSA Security 1024 v3
1236
+ ====================
1237
+ -----BEGIN CERTIFICATE-----
1238
+ MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
1239
+ ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMTAyNCBWMzAeFw0wMTAy
1240
+ MjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
1241
+ BgNVBAsTFFJTQSBTZWN1cml0eSAxMDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV
1242
+ 3f5mCc8kPD6ugU5OisRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4m
1243
+ mdxY78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9zp9+1Blq
1244
+ FikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAf
1245
+ BgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAdBgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUM
1246
+ X96uBVowDQYJKoZIhvcNAQEFBQADgYEAPy1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBD
1247
+ leMf6XbN3Ou8k6BlCsdNT1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNu
1248
+ mU4/iXgDmMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=
1249
+ -----END CERTIFICATE-----
1250
+
1251
+ GeoTrust Global CA
1252
+ ==================
1253
+ -----BEGIN CERTIFICATE-----
1254
+ MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
1255
+ Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
1256
+ MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
1257
+ LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
1258
+ CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
1259
+ BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
1260
+ 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
1261
+ T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
1262
+ vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
1263
+ AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
1264
+ DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
1265
+ zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
1266
+ d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
1267
+ mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
1268
+ XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
1269
+ Mw==
1270
+ -----END CERTIFICATE-----
1271
+
1272
+ GeoTrust Global CA 2
1273
+ ====================
1274
+ -----BEGIN CERTIFICATE-----
1275
+ MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
1276
+ R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
1277
+ MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
1278
+ LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
1279
+ ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
1280
+ NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
1281
+ LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
1282
+ Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
1283
+ HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
1284
+ MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
1285
+ K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
1286
+ srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
1287
+ ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
1288
+ OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
1289
+ x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
1290
+ H4z1Ir+rzoPz4iIprn2DQKi6bA==
1291
+ -----END CERTIFICATE-----
1292
+
1293
+ GeoTrust Universal CA
1294
+ =====================
1295
+ -----BEGIN CERTIFICATE-----
1296
+ MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
1297
+ R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
1298
+ MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
1299
+ Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
1300
+ ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
1301
+ JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
1302
+ RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
1303
+ 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
1304
+ 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
1305
+ qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
1306
+ Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
1307
+ Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
1308
+ KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
1309
+ ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
1310
+ XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
1311
+ hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
1312
+ aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
1313
+ qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
1314
+ oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
1315
+ xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
1316
+ KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
1317
+ DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
1318
+ xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
1319
+ p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
1320
+ P/rmMuGNG2+k5o7Y+SlIis5z/iw=
1321
+ -----END CERTIFICATE-----
1322
+
1323
+ GeoTrust Universal CA 2
1324
+ =======================
1325
+ -----BEGIN CERTIFICATE-----
1326
+ MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
1327
+ R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
1328
+ MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
1329
+ SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
1330
+ A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
1331
+ DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
1332
+ j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
1333
+ JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
1334
+ QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
1335
+ WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
1336
+ 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
1337
+ ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
1338
+ SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
1339
+ 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
1340
+ +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
1341
+ BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
1342
+ dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
1343
+ 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
1344
+ mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
1345
+ A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
1346
+ Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
1347
+ pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
1348
+ FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
1349
+ gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
1350
+ X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
1351
+ -----END CERTIFICATE-----
1352
+
1353
+ UTN-USER First-Network Applications
1354
+ ===================================
1355
+ -----BEGIN CERTIFICATE-----
1356
+ MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE
1357
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1358
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp
1359
+ BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5
1360
+ WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T
1361
+ YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
1362
+ dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB
1363
+ cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug
1364
+ mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj
1365
+ DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu
1366
+ Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi
1367
+ P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE
1368
+ j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w
1369
+ HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j
1370
+ cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
1371
+ CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
1372
+ IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK
1373
+ RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp
1374
+ xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq
1375
+ DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE
1376
+ -----END CERTIFICATE-----
1377
+
1378
+ America Online Root Certification Authority 1
1379
+ =============================================
1380
+ -----BEGIN CERTIFICATE-----
1381
+ MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
1382
+ QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
1383
+ Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
1384
+ A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
1385
+ T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
1386
+ ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
1387
+ v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
1388
+ DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
1389
+ sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
1390
+ 8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
1391
+ AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
1392
+ o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
1393
+ GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
1394
+ VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
1395
+ 3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
1396
+ Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
1397
+ sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
1398
+ -----END CERTIFICATE-----
1399
+
1400
+ America Online Root Certification Authority 2
1401
+ =============================================
1402
+ -----BEGIN CERTIFICATE-----
1403
+ MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
1404
+ QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
1405
+ Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
1406
+ A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
1407
+ T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
1408
+ ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
1409
+ fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
1410
+ f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
1411
+ qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
1412
+ RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
1413
+ gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
1414
+ 6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
1415
+ FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
1416
+ Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
1417
+ B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
1418
+ aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
1419
+ AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
1420
+ T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
1421
+ +DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
1422
+ JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
1423
+ zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
1424
+ ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
1425
+ 1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
1426
+ GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
1427
+ Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
1428
+ cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
1429
+ -----END CERTIFICATE-----
1430
+
1431
+ Visa eCommerce Root
1432
+ ===================
1433
+ -----BEGIN CERTIFICATE-----
1434
+ MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
1435
+ EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
1436
+ QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
1437
+ WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
1438
+ VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
1439
+ bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
1440
+ F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
1441
+ RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
1442
+ TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
1443
+ /k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
1444
+ GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
1445
+ MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
1446
+ CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
1447
+ YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
1448
+ zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
1449
+ YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
1450
+ 398znM/jra6O1I7mT1GvFpLgXPYHDw==
1451
+ -----END CERTIFICATE-----
1452
+
1453
+ TC TrustCenter, Germany, Class 2 CA
1454
+ ===================================
1455
+ -----BEGIN CERTIFICATE-----
1456
+ MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQI
1457
+ EwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
1458
+ U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBD
1459
+ bGFzcyAyIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05
1460
+ ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFt
1461
+ YnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3Vy
1462
+ aXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3Mg
1463
+ MiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZI
1464
+ hvcNAQEBBQADgY0AMIGJAoGBANo46O0yAClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLs
1465
+ qh1R1z2zUbKDTl3LSbDwTFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5N
1466
+ u6hLVxa8/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQFMAMB
1467
+ Af8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0Y2VudGVy
1468
+ LmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0GCSqGSIb3DQEBBAUAA4GBAIRS+yjf
1469
+ /x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ2
1470
+ 9ELw+HkuCkhcq8xRT3h2oNmsGb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/Ac
1471
+ ASZ4smZHcFFk
1472
+ -----END CERTIFICATE-----
1473
+
1474
+ TC TrustCenter, Germany, Class 3 CA
1475
+ ===================================
1476
+ -----BEGIN CERTIFICATE-----
1477
+ MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQI
1478
+ EwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
1479
+ U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBD
1480
+ bGFzcyAzIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05
1481
+ ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFt
1482
+ YnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3Vy
1483
+ aXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3Mg
1484
+ MyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZI
1485
+ hvcNAQEBBQADgY0AMIGJAoGBALa0wTUFLg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN
1486
+ 2U4CdhHBC/KNecoAtvGwDtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+7
1487
+ 7uMMfTDWw1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQFMAMB
1488
+ Af8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0Y2VudGVy
1489
+ LmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0GCSqGSIb3DQEBBAUAA4GBABY9xs3B
1490
+ u4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIETb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm
1491
+ 5gZOngylerpuw3yCGdHHsbHD2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQS
1492
+ CdS7kjXvD9s0
1493
+ -----END CERTIFICATE-----
1494
+
1495
+ Certum Root CA
1496
+ ==============
1497
+ -----BEGIN CERTIFICATE-----
1498
+ MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
1499
+ ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
1500
+ Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
1501
+ by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
1502
+ wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
1503
+ kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
1504
+ 89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
1505
+ Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
1506
+ NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
1507
+ hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
1508
+ GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
1509
+ GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
1510
+ 0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
1511
+ qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
1512
+ -----END CERTIFICATE-----
1513
+
1514
+ Comodo AAA Services root
1515
+ ========================
1516
+ -----BEGIN CERTIFICATE-----
1517
+ MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
1518
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
1519
+ TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
1520
+ MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
1521
+ c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
1522
+ BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
1523
+ ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
1524
+ C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
1525
+ i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
1526
+ Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
1527
+ Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
1528
+ Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
1529
+ BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
1530
+ cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
1531
+ LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
1532
+ 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
1533
+ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
1534
+ 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
1535
+ 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
1536
+ -----END CERTIFICATE-----
1537
+
1538
+ Comodo Secure Services root
1539
+ ===========================
1540
+ -----BEGIN CERTIFICATE-----
1541
+ MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
1542
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
1543
+ TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
1544
+ MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
1545
+ Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
1546
+ BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
1547
+ ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
1548
+ 9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
1549
+ rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
1550
+ oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
1551
+ p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
1552
+ FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
1553
+ gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
1554
+ YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
1555
+ aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
1556
+ 4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
1557
+ Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
1558
+ DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
1559
+ pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
1560
+ RR3B7Hzs/Sk=
1561
+ -----END CERTIFICATE-----
1562
+
1563
+ Comodo Trusted Services root
1564
+ ============================
1565
+ -----BEGIN CERTIFICATE-----
1566
+ MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
1567
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
1568
+ TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
1569
+ MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
1570
+ bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
1571
+ IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
1572
+ AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
1573
+ 3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
1574
+ /9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
1575
+ juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
1576
+ ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
1577
+ DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
1578
+ /zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
1579
+ ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
1580
+ cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
1581
+ uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
1582
+ pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
1583
+ BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
1584
+ R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
1585
+ 9y5Xt5hwXsjEeLBi
1586
+ -----END CERTIFICATE-----
1587
+
1588
+ IPS Chained CAs root
1589
+ ====================
1590
+ -----BEGIN CERTIFICATE-----
1591
+ MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1592
+ EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1593
+ Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1594
+ Qi02MDkyOTQ1MjEzMDEGA1UECxMqSVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0
1595
+ aG9yaXR5MTMwMQYDVQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
1596
+ dHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMjkwMDUzNThaFw0yNTEy
1597
+ MjcwMDUzNThaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJ
1598
+ QmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwu
1599
+ MSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJ
1600
+ UFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBD
1601
+ QSBDaGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYPaXBz
1602
+ QG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcVpJJspQgvJhPUOtopKdJ
1603
+ C7/SMejHT8KGC/po/UNaivNgkjWZOLtNA1IhW/A3mTXhQSCBhYEFcYGdtJUZqV92NC5jNzVXjrQf
1604
+ Qj8VXOF6wV8TGDIxya2+o8eDZh65nAQTy2nBBt4wBrszo7Uf8I9vzv+W6FS+ZoCua9tBhDaiPQID
1605
+ AQABo4IEQzCCBD8wHQYDVR0OBBYEFKGtMbH5PuEXpsirNPxShwkeYlJBMIIBTgYDVR0jBIIBRTCC
1606
+ AUGAFKGtMbH5PuEXpsirNPxShwkeYlJBoYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE
1607
+ CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBw
1608
+ dWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
1609
+ IEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBDaGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1
1610
+ dGhvcml0eTEzMDEGA1UEAxMqSVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9y
1611
+ aXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNV
1612
+ HQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUF
1613
+ BwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGC
1614
+ NwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
1615
+ EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ2hhaW5lZCBDQSBDZXJ0aWZp
1616
+ Y2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8v
1617
+ d3d3Lmlwcy5lcy9pcHMyMDAyLzA3BglghkgBhvhCAQQEKhYoaHR0cDovL3d3dy5pcHMuZXMvaXBz
1618
+ MjAwMi9pcHMyMDAyQ0FDLmNybDA8BglghkgBhvhCAQMELxYtaHR0cDovL3d3dy5pcHMuZXMvaXBz
1619
+ MjAwMi9yZXZvY2F0aW9uQ0FDLmh0bWw/MDkGCWCGSAGG+EIBBwQsFipodHRwOi8vd3d3Lmlwcy5l
1620
+ cy9pcHMyMDAyL3JlbmV3YWxDQUMuaHRtbD8wNwYJYIZIAYb4QgEIBCoWKGh0dHA6Ly93d3cuaXBz
1621
+ LmVzL2lwczIwMDIvcG9saWN5Q0FDLmh0bWwwbQYDVR0fBGYwZDAuoCygKoYoaHR0cDovL3d3dy5p
1622
+ cHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDAyoDCgLoYsaHR0cDovL3d3d2JhY2suaXBzLmVz
1623
+ L2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRw
1624
+ Oi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAERyMJ1WWKJBGyi3leGmGpVfp3hAK+/b
1625
+ lkr8THFj2XOVvQLiogbHvpcqk4A0hgP63Ng9HgfNHnNDJGD1HWHc3JagvPsd4+cSACczAsDAK1M9
1626
+ 2GsDgaPb1pOVIO/Tln4mkImcJpvNb2ar7QMiRDjMWb2f2/YHogF/JsRj9SVCXmK9
1627
+ -----END CERTIFICATE-----
1628
+
1629
+ IPS CLASE1 root
1630
+ ===============
1631
+ -----BEGIN CERTIFICATE-----
1632
+ MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1633
+ EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1634
+ Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1635
+ Qi02MDkyOTQ1MjEuMCwGA1UECxMlSVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
1636
+ eTEuMCwGA1UEAxMlSVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqG
1637
+ SIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAwNTkzOFoXDTI1MTIyNzAwNTkzOFow
1638
+ ggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmEx
1639
+ LjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoU
1640
+ Imlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFT
1641
+ RTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlm
1642
+ aWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkq
1643
+ hkiG9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywSzHb5BlmvXSHU0lq4
1644
+ oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBSYmL9Yzt9fuzuOOpi9GyocY3h6YvJ
1645
+ P8a1zZRCb92CRTzo3wno7wpVqVZHYUxJZHMQKD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQW
1646
+ BBTrsxl588GlHKzcuh9morKbadB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKb
1647
+ adB4CKGCARqkggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
1648
+ BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBz
1649
+ LmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQL
1650
+ EyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0Eg
1651
+ Q0xBU0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5p
1652
+ cHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMB
1653
+ BggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYB
1654
+ BAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0R
1655
+ BBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBBBglghkgB
1656
+ hvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRpZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5l
1657
+ cy8wKQYJYIZIAYb4QgECBBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIB
1658
+ BAQtFitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMD8GCWCGSAGG
1659
+ +EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25DTEFTRTEuaHRtbD8w
1660
+ PAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFMS5o
1661
+ dG1sPzA6BglghkgBhvhCAQgELRYraHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFT
1662
+ RTEuaHRtbDBzBgNVHR8EbDBqMDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIw
1663
+ MDJDTEFTRTEuY3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
1664
+ Q0xBU0UxLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l
1665
+ cy8wDQYJKoZIhvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuKYn4VLenZMdMu9Ccj/1urxUq2
1666
+ ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpjV4F1Wo7ojPsCwJTGKbqz3Bzosq/SLmJbGqmO
1667
+ DszFV0VRFOlOHIilkfSj945RyKm+hjM+5i9Ibq9UkE6tsSU=
1668
+ -----END CERTIFICATE-----
1669
+
1670
+ IPS CLASE3 root
1671
+ ===============
1672
+ -----BEGIN CERTIFICATE-----
1673
+ MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1674
+ EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1675
+ Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1676
+ Qi02MDkyOTQ1MjEuMCwGA1UECxMlSVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
1677
+ eTEuMCwGA1UEAxMlSVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqG
1678
+ SIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMDE0NFoXDTI1MTIyNzAxMDE0NFow
1679
+ ggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmEx
1680
+ LjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoU
1681
+ Imlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFT
1682
+ RTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlm
1683
+ aWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkq
1684
+ hkiG9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZH49NzjaY2uQARIwo
1685
+ 2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY8jjsbJ0gA8DvqqPGZARRLXgNo9Ko
1686
+ OtYkTOmWehisEyMiG3zoMRGzXwmqMHBxRiVrSXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQW
1687
+ BBS4k/8uy9wsjqLnev42USGjmFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGj
1688
+ mFsMNKGCARqkggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
1689
+ BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBz
1690
+ LmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQL
1691
+ EyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0Eg
1692
+ Q0xBU0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5p
1693
+ cHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMB
1694
+ BggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYB
1695
+ BAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0R
1696
+ BBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBBBglghkgB
1697
+ hvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRpZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5l
1698
+ cy8wKQYJYIZIAYb4QgECBBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIB
1699
+ BAQtFitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMD8GCWCGSAGG
1700
+ +EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25DTEFTRTMuaHRtbD8w
1701
+ PAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFMy5o
1702
+ dG1sPzA6BglghkgBhvhCAQgELRYraHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFT
1703
+ RTMuaHRtbDBzBgNVHR8EbDBqMDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIw
1704
+ MDJDTEFTRTMuY3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
1705
+ Q0xBU0UzLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l
1706
+ cy8wDQYJKoZIhvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dDqsfwfewPxqmurpYPdikc4gYt
1707
+ fibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9D6eSb9ijBmgpjnn1/7/5p6/ksc7C0YBCJwUE
1708
+ NPjDfxZ4IwwHJPJGR607VNCv1TGyr33I6unUVtkOE7LFRVA=
1709
+ -----END CERTIFICATE-----
1710
+
1711
+ IPS CLASEA1 root
1712
+ ================
1713
+ -----BEGIN CERTIFICATE-----
1714
+ MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1715
+ EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1716
+ Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1717
+ Qi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
1718
+ dHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJ
1719
+ KoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNTMyWhcNMjUxMjI3MDEwNTMy
1720
+ WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9u
1721
+ YTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
1722
+ ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENM
1723
+ QVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENl
1724
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwgZ8w
1725
+ DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8m2mdd81u4D/u6zJf
1726
+ X5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4WwdByOgF9H5fahGRpEiqLJpxq339fWU
1727
+ oTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1e+J8eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNV
1728
+ HQ4EFgQUZyaW56G/2LUDnf473P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf47
1729
+ 3P7yiuYV3TChggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
1730
+ BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2Vydmlj
1731
+ ZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0G
1732
+ A1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQ
1733
+ UyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNA
1734
+ bWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsG
1735
+ AQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
1736
+ FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcw
1737
+ GgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBC
1738
+ BglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3
1739
+ dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7Bglg
1740
+ hkgBhvhCAQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmww
1741
+ QAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNMQVNF
1742
+ QTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdh
1743
+ bENMQVNFQTEuaHRtbD8wOwYJYIZIAYb4QgEIBC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIv
1744
+ cG9saWN5Q0xBU0VBMS5odG1sMHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lw
1745
+ czIwMDIvaXBzMjAwMkNMQVNFQTEuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
1746
+ MjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRw
1747
+ Oi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyAAIQVCtWYUQxkxZwCWINmyq0e
1748
+ B81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeFaQoO42Hu6r4okzPV7Oi+xNtff6j5YzHIa5bi
1749
+ KcJboOeXNp13XjFr/tOn2yrb25aLH2betgPAK7N41lUH5Y85UN4HI3LmvSAUS7SG
1750
+ -----END CERTIFICATE-----
1751
+
1752
+ IPS CLASEA3 root
1753
+ ================
1754
+ -----BEGIN CERTIFICATE-----
1755
+ MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1756
+ EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1757
+ Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1758
+ Qi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
1759
+ dHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJ
1760
+ KoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNzUwWhcNMjUxMjI3MDEwNzUw
1761
+ WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9u
1762
+ YTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
1763
+ ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENM
1764
+ QVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENl
1765
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwgZ8w
1766
+ DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvNG7uGBiJ2MwwSbUhW
1767
+ YdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHUVqLyjRGZ/fZ98cfEXgIqmuJKtROK
1768
+ AP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4Ninn6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNV
1769
+ HQ4EFgQUHp9XUEe2YZM50yz82l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz8
1770
+ 2l09BXW3mQKhggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
1771
+ BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2Vydmlj
1772
+ ZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0G
1773
+ A1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQ
1774
+ UyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNA
1775
+ bWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsG
1776
+ AQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
1777
+ FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcw
1778
+ GgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBC
1779
+ BglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3
1780
+ dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7Bglg
1781
+ hkgBhvhCAQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmww
1782
+ QAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNMQVNF
1783
+ QTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdh
1784
+ bENMQVNFQTMuaHRtbD8wOwYJYIZIAYb4QgEIBC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIv
1785
+ cG9saWN5Q0xBU0VBMy5odG1sMHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lw
1786
+ czIwMDIvaXBzMjAwMkNMQVNFQTMuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
1787
+ MjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRw
1788
+ Oi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca2on0eisxeewBwMwB9dbB/MjD
1789
+ 81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI3y2s6Q73nMify5NF8bpqxmdRSmlPa/59Cy9S
1790
+ KcJQrSRE7SOzSMtEQMEDlQwKeAYSAfWRMS1Jjbs/RU4s4OjNtckUFQzjB4ObJnXv
1791
+ -----END CERTIFICATE-----
1792
+
1793
+ IPS Servidores root
1794
+ ===================
1795
+ -----BEGIN CERTIFICATE-----
1796
+ MIICtzCCAiACAQAwDQYJKoZIhvcNAQEEBQAwgaMxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCQVJD
1797
+ RUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UEChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYG
1798
+ A1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQDEw5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3
1799
+ DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTk4MDEwMTIzMjEwN1oXDTA5MTIyOTIzMjEwN1owgaMx
1800
+ CzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcG
1801
+ A1UEChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQD
1802
+ Ew5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMIGfMA0GCSqG
1803
+ SIb3DQEBAQUAA4GNADCBiQKBgQCsT1J0nznqjtwlxLyYXZhkJAk8IbPMGbWOlI6H0fg3PqHILVik
1804
+ gDVboXVsHUUMH2Fjal5vmwpMwci4YSM1gf/+rHhwLWjhOgeYlQJU3c0jt4BT18g3RXIGJBK6E2Eh
1805
+ im51KODFDzT9NthFf+G4Nu+z4cYgjui0OLzhPvYR3oydAQIDAQABMA0GCSqGSIb3DQEBBAUAA4GB
1806
+ ACzzw3lYJN7GO9HgQmm47mSzPWIBubOE3yN93ZjPEKn+ANgilgUTB1RXxafey9m4iEL2mdsUdx+2
1807
+ /iU94aI+A6mB0i1sR/WWRowiq8jMDQ6XXotBtDvECgZAHd1G9AHduoIuPD14cJ58GNCr+Lh3B0Zx
1808
+ 8coLY1xq+XKU1QFPoNtC
1809
+ -----END CERTIFICATE-----
1810
+
1811
+ IPS Timestamping root
1812
+ =====================
1813
+ -----BEGIN CERTIFICATE-----
1814
+ MIIIODCCB6GgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1815
+ EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1816
+ Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1817
+ Qi02MDkyOTQ1MjE0MDIGA1UECxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1
1818
+ dGhvcml0eTE0MDIGA1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhv
1819
+ cml0eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMTAxOFoXDTI1
1820
+ MTIyNzAxMTAxOFowggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQH
1821
+ EwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMu
1822
+ bC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsT
1823
+ K0lQUyBDQSBUaW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQ
1824
+ UyBDQSBUaW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEW
1825
+ D2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLjuVqWajOY2ycJi
1826
+ oGaBjRrVetJznw6EZLqVtJCneK/K/lRhW86yIFcBrkSSQxA4Efdo/BdApWgnMjvEp+ZCccWZ73b/
1827
+ K5Uk9UmSGGjKALWkWi9uy9YbLA1UZ2t6KaFYq6JaANZbuxjC3/YeE1Z2m6Vo4pjOxgOKNNtMg0Gm
1828
+ qaMCAwEAAaOCBIAwggR8MB0GA1UdDgQWBBSL0BBQCYHynQnVDmB4AyKiP8jKZjCCAVAGA1UdIwSC
1829
+ AUcwggFDgBSL0BBQCYHynQnVDmB4AyKiP8jKZqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ
1830
+ BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJu
1831
+ ZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5J
1832
+ LkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRp
1833
+ b24gQXV0aG9yaXR5MTQwMgYDVQQDEytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24g
1834
+ QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB
1835
+ /zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG
1836
+ CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYK
1837
+ KwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVz
1838
+ MBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBHBglghkgBhvhCAQ0EOhY4VGltZXN0YW1waW5n
1839
+ IENBIENlcnRpZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
1840
+ BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMEAGCWCGSAGG+EIBBAQzFjFodHRwOi8vd3d3
1841
+ Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEUGCWCGSAGG+EIBAwQ4FjZo
1842
+ dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25UaW1lc3RhbXBpbmcuaHRtbD8wQgYJ
1843
+ YIZIAYb4QgEHBDUWM2h0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbFRpbWVzdGFtcGlu
1844
+ Zy5odG1sPzBABglghkgBhvhCAQgEMxYxaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lU
1845
+ aW1lc3RhbXBpbmcuaHRtbDB/BgNVHR8EeDB2MDegNaAzhjFodHRwOi8vd3d3Lmlwcy5lcy9pcHMy
1846
+ MDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMDugOaA3hjVodHRwOi8vd3d3YmFjay5pcHMuZXMv
1847
+ aXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUH
1848
+ MAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAZbrBzAAalZHK6Ww6vzoe
1849
+ FAh8+4Pua2JR0zORtWB5fgTYXXk36MNbsMRnLWhasl8OCvrNPzpFoeo2zyYepxEoxZSPhExTCMWT
1850
+ s/zif/WN87GphV+I3pGW7hdbrqXqcGV4LCFkAZXOzkw+UPS2Wctjjba9GNSHSl/c7+lW8AoM6HU=
1851
+ -----END CERTIFICATE-----
1852
+
1853
+ QuoVadis Root CA
1854
+ ================
1855
+ -----BEGIN CERTIFICATE-----
1856
+ MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
1857
+ ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
1858
+ eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
1859
+ MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
1860
+ cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
1861
+ EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
1862
+ AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
1863
+ J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
1864
+ F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
1865
+ YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
1866
+ AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
1867
+ PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
1868
+ ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
1869
+ MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
1870
+ YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
1871
+ ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
1872
+ Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
1873
+ Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
1874
+ BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
1875
+ FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
1876
+ aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
1877
+ tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
1878
+ fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
1879
+ LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
1880
+ gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
1881
+ 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
1882
+ 5nrQNiOKSnQ2+Q==
1883
+ -----END CERTIFICATE-----
1884
+
1885
+ QuoVadis Root CA 2
1886
+ ==================
1887
+ -----BEGIN CERTIFICATE-----
1888
+ MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
1889
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
1890
+ ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
1891
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1892
+ DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
1893
+ XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
1894
+ lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
1895
+ lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
1896
+ lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
1897
+ 66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
1898
+ wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
1899
+ D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
1900
+ BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
1901
+ J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
1902
+ DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
1903
+ a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
1904
+ ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
1905
+ Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
1906
+ UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
1907
+ VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
1908
+ +JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
1909
+ IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
1910
+ WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
1911
+ f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
1912
+ 4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
1913
+ VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
1914
+ -----END CERTIFICATE-----
1915
+
1916
+ QuoVadis Root CA 3
1917
+ ==================
1918
+ -----BEGIN CERTIFICATE-----
1919
+ MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
1920
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
1921
+ OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
1922
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1923
+ DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
1924
+ DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
1925
+ KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
1926
+ DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
1927
+ BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
1928
+ p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
1929
+ nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
1930
+ MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
1931
+ Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
1932
+ uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
1933
+ BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
1934
+ YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
1935
+ aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
1936
+ BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
1937
+ VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
1938
+ ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
1939
+ AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
1940
+ qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
1941
+ hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
1942
+ POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
1943
+ Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
1944
+ 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
1945
+ bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
1946
+ g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
1947
+ vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
1948
+ qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
1949
+ -----END CERTIFICATE-----
1950
+
1951
+ Security Communication Root CA
1952
+ ==============================
1953
+ -----BEGIN CERTIFICATE-----
1954
+ MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
1955
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
1956
+ HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
1957
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
1958
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
1959
+ 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
1960
+ DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
1961
+ 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
1962
+ DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
1963
+ JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
1964
+ DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
1965
+ 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
1966
+ mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
1967
+ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
1968
+ 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
1969
+ FL39vmwLAw==
1970
+ -----END CERTIFICATE-----
1971
+
1972
+ Sonera Class 1 Root CA
1973
+ ======================
1974
+ -----BEGIN CERTIFICATE-----
1975
+ MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
1976
+ U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw
1977
+ NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
1978
+ IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88
1979
+ 7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9
1980
+ EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl
1981
+ 0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645
1982
+ 2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa
1983
+ HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT
1984
+ iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9
1985
+ 28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV
1986
+ yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR
1987
+ vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P
1988
+ qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z
1989
+ IRlXvVWa
1990
+ -----END CERTIFICATE-----
1991
+
1992
+ Sonera Class 2 Root CA
1993
+ ======================
1994
+ -----BEGIN CERTIFICATE-----
1995
+ MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
1996
+ U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
1997
+ NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
1998
+ IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
1999
+ /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
2000
+ dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
2001
+ f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
2002
+ tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
2003
+ nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
2004
+ XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
2005
+ 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
2006
+ cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
2007
+ Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
2008
+ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
2009
+ llpwrN9M
2010
+ -----END CERTIFICATE-----
2011
+
2012
+ Staat der Nederlanden Root CA
2013
+ =============================
2014
+ -----BEGIN CERTIFICATE-----
2015
+ MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
2016
+ ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
2017
+ Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
2018
+ HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
2019
+ bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
2020
+ vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
2021
+ jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
2022
+ C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
2023
+ vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
2024
+ 22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
2025
+ HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
2026
+ dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
2027
+ BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
2028
+ EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
2029
+ MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
2030
+ nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
2031
+ iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
2032
+ -----END CERTIFICATE-----
2033
+
2034
+ TDC Internet Root CA
2035
+ ====================
2036
+ -----BEGIN CERTIFICATE-----
2037
+ MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
2038
+ ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
2039
+ NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
2040
+ ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2041
+ MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
2042
+ xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
2043
+ znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
2044
+ 5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
2045
+ otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
2046
+ AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
2047
+ VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
2048
+ MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
2049
+ AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
2050
+ UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
2051
+ CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
2052
+ gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
2053
+ 2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
2054
+ O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
2055
+ Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
2056
+ -----END CERTIFICATE-----
2057
+
2058
+ TDC OCES Root CA
2059
+ ================
2060
+ -----BEGIN CERTIFICATE-----
2061
+ MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE
2062
+ ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5
2063
+ MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB
2064
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH
2065
+ nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0
2066
+ zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV
2067
+ iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde
2068
+ dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO
2069
+ 3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB
2070
+ 5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k
2071
+ ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm
2072
+ cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp
2073
+ Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
2074
+ LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM
2075
+ MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
2076
+ aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
2077
+ MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647
2078
+ +RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6
2079
+ NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4
2080
+ A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc
2081
+ A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9
2082
+ AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1
2083
+ AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw==
2084
+ -----END CERTIFICATE-----
2085
+
2086
+ UTN DATACorp SGC Root CA
2087
+ ========================
2088
+ -----BEGIN CERTIFICATE-----
2089
+ MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
2090
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
2091
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
2092
+ BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
2093
+ MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
2094
+ HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
2095
+ dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
2096
+ AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
2097
+ raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
2098
+ wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
2099
+ 9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
2100
+ 33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
2101
+ DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
2102
+ BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
2103
+ LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
2104
+ DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
2105
+ Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
2106
+ I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
2107
+ EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
2108
+ DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
2109
+ -----END CERTIFICATE-----
2110
+
2111
+ UTN USERFirst Email Root CA
2112
+ ===========================
2113
+ -----BEGIN CERTIFICATE-----
2114
+ MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
2115
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
2116
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0
2117
+ BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05
2118
+ OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx
2119
+ FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx
2120
+ ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz
2121
+ dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2122
+ MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx
2123
+ B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8
2124
+ om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG
2125
+ TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl
2126
+ yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE
2127
+ AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV
2128
+ HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll
2129
+ bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
2130
+ AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne
2131
+ xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+
2132
+ 5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV
2133
+ NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ
2134
+ w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
2135
+ -----END CERTIFICATE-----
2136
+
2137
+ UTN USERFirst Hardware Root CA
2138
+ ==============================
2139
+ -----BEGIN CERTIFICATE-----
2140
+ MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
2141
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
2142
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
2143
+ BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
2144
+ OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
2145
+ eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
2146
+ ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
2147
+ DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
2148
+ wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
2149
+ tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
2150
+ i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
2151
+ Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
2152
+ gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
2153
+ lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
2154
+ UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
2155
+ BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
2156
+ //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
2157
+ XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
2158
+ lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
2159
+ iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
2160
+ nfhmqA==
2161
+ -----END CERTIFICATE-----
2162
+
2163
+ UTN USERFirst Object Root CA
2164
+ ============================
2165
+ -----BEGIN CERTIFICATE-----
2166
+ MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE
2167
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
2168
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb
2169
+ BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz
2170
+ NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx
2171
+ HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy
2172
+ dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB
2173
+ BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR
2174
+ loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ
2175
+ w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu
2176
+ lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7
2177
+ RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL
2178
+ BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8
2179
+ ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly
2180
+ c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw
2181
+ DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
2182
+ NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO
2183
+ PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE
2184
+ qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG
2185
+ hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
2186
+ -----END CERTIFICATE-----
2187
+
2188
+ Camerfirma Chambers of Commerce Root
2189
+ ====================================
2190
+ -----BEGIN CERTIFICATE-----
2191
+ MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
2192
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
2193
+ ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
2194
+ NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
2195
+ cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
2196
+ MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
2197
+ AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
2198
+ xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
2199
+ NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
2200
+ DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
2201
+ d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
2202
+ EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
2203
+ cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
2204
+ AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
2205
+ bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
2206
+ VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
2207
+ aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
2208
+ fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
2209
+ L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
2210
+ UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
2211
+ ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
2212
+ erfutGWaIZDgqtCYvDi1czyL+Nw=
2213
+ -----END CERTIFICATE-----
2214
+
2215
+ Camerfirma Global Chambersign Root
2216
+ ==================================
2217
+ -----BEGIN CERTIFICATE-----
2218
+ MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
2219
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
2220
+ ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
2221
+ NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
2222
+ YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
2223
+ MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
2224
+ ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
2225
+ 1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
2226
+ by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
2227
+ 6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
2228
+ 8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
2229
+ BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
2230
+ aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
2231
+ Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
2232
+ aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
2233
+ ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
2234
+ bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
2235
+ PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
2236
+ gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
2237
+ PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
2238
+ IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
2239
+ t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
2240
+ -----END CERTIFICATE-----
2241
+
2242
+ NetLock Qualified (Class QA) Root
2243
+ =================================
2244
+ -----BEGIN CERTIFICATE-----
2245
+ MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
2246
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
2247
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn
2248
+ eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0
2249
+ bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER
2250
+ MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0
2251
+ LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0
2252
+ dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP
2253
+ aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV
2254
+ CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e
2255
+ 8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb
2256
+ m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ
2257
+ 0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM
2258
+ 0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
2259
+ HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2
2260
+ YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
2261
+ biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p
2262
+ a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz
2263
+ YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg
2264
+ YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg
2265
+ ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov
2266
+ L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr
2267
+ Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0
2268
+ aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg
2269
+ YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0
2270
+ IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3
2271
+ DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN
2272
+ wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg
2273
+ W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc
2274
+ R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR
2275
+ 5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko
2276
+ -----END CERTIFICATE-----
2277
+
2278
+ NetLock Notary (Class A) Root
2279
+ =============================
2280
+ -----BEGIN CERTIFICATE-----
2281
+ MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
2282
+ EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
2283
+ dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
2284
+ ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
2285
+ DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
2286
+ EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
2287
+ VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
2288
+ cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
2289
+ D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
2290
+ z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
2291
+ /tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
2292
+ tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
2293
+ 4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
2294
+ A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
2295
+ Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
2296
+ bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
2297
+ IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
2298
+ LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
2299
+ ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
2300
+ IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
2301
+ IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
2302
+ b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
2303
+ bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
2304
+ Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
2305
+ bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
2306
+ ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
2307
+ ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
2308
+ CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
2309
+ KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
2310
+ 8CgHrTwXZoi1/baI
2311
+ -----END CERTIFICATE-----
2312
+
2313
+ NetLock Business (Class B) Root
2314
+ ===============================
2315
+ -----BEGIN CERTIFICATE-----
2316
+ MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
2317
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
2318
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
2319
+ VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
2320
+ VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
2321
+ bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
2322
+ VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
2323
+ iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
2324
+ o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
2325
+ 1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
2326
+ HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
2327
+ RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
2328
+ dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
2329
+ ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
2330
+ c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
2331
+ YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
2332
+ c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
2333
+ Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
2334
+ bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
2335
+ IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
2336
+ YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
2337
+ cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
2338
+ 43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
2339
+ stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
2340
+ -----END CERTIFICATE-----
2341
+
2342
+ NetLock Express (Class C) Root
2343
+ ==============================
2344
+ -----BEGIN CERTIFICATE-----
2345
+ MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
2346
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
2347
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
2348
+ KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
2349
+ BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
2350
+ dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
2351
+ ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
2352
+ jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
2353
+ W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
2354
+ euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
2355
+ DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
2356
+ RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
2357
+ YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
2358
+ IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
2359
+ aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
2360
+ ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
2361
+ ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
2362
+ dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
2363
+ emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
2364
+ IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
2365
+ UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
2366
+ YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
2367
+ xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
2368
+ gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
2369
+ -----END CERTIFICATE-----
2370
+
2371
+ XRamp Global CA Root
2372
+ ====================
2373
+ -----BEGIN CERTIFICATE-----
2374
+ MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
2375
+ BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
2376
+ dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
2377
+ dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
2378
+ HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
2379
+ U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
2380
+ dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
2381
+ IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
2382
+ foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
2383
+ zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
2384
+ AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
2385
+ xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
2386
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
2387
+ oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
2388
+ AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
2389
+ /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
2390
+ qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
2391
+ nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
2392
+ 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
2393
+ -----END CERTIFICATE-----
2394
+
2395
+ Go Daddy Class 2 CA
2396
+ ===================
2397
+ -----BEGIN CERTIFICATE-----
2398
+ MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
2399
+ VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
2400
+ ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
2401
+ A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
2402
+ RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
2403
+ ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
2404
+ 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
2405
+ qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
2406
+ YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
2407
+ vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
2408
+ BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
2409
+ atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
2410
+ MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
2411
+ A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
2412
+ PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
2413
+ I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
2414
+ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
2415
+ Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
2416
+ vZ8=
2417
+ -----END CERTIFICATE-----
2418
+
2419
+ Starfield Class 2 CA
2420
+ ====================
2421
+ -----BEGIN CERTIFICATE-----
2422
+ MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
2423
+ U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
2424
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
2425
+ MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
2426
+ A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
2427
+ SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
2428
+ bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
2429
+ JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
2430
+ epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
2431
+ F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
2432
+ MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
2433
+ hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
2434
+ bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
2435
+ QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
2436
+ afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
2437
+ PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
2438
+ xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
2439
+ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
2440
+ QBFGmh95DmK/D5fs4C8fF5Q=
2441
+ -----END CERTIFICATE-----
2442
+
2443
+ StartCom Ltd.
2444
+ =============
2445
+ -----BEGIN CERTIFICATE-----
2446
+ MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT
2447
+ BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xGjAYBgNVBAsT
2448
+ EUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhv
2449
+ cml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoX
2450
+ DTM1MDMxMDE3Mzc0OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcT
2451
+ BUVpbGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3JpdHkgRGVw
2452
+ LjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxITAfBgkqhkiG9w0B
2453
+ CQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOe
2454
+ yEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+
2455
+ o5c5s7XvIywI6Nivcy+5yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2
2456
+ IhULpNYILzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0GA1Ud
2457
+ DgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOWzL3+MtUNjIExtpid
2458
+ jShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWls
2459
+ YXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkw
2460
+ JwYDVQQDEyBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
2461
+ YWRtaW5Ac3RhcnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV
2462
+ HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8GCWCGSAGG+EIB
2463
+ DQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAyBglghkgBhvhCAQQEJRYjaHR0
2464
+ cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5jcmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9j
2465
+ ZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJYIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9y
2466
+ Zy9pbmRleC5waHA/YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhB
2467
+ OlP1ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p00UOpO6w
2468
+ NnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLbcCOxgN8aIDjnfg==
2469
+ -----END CERTIFICATE-----
2470
+
2471
+ StartCom Certification Authority
2472
+ ================================
2473
+ -----BEGIN CERTIFICATE-----
2474
+ MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
2475
+ U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
2476
+ ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
2477
+ NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
2478
+ LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
2479
+ U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
2480
+ ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
2481
+ o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
2482
+ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
2483
+ eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
2484
+ 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
2485
+ 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
2486
+ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
2487
+ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
2488
+ UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
2489
+ 37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
2490
+ FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
2491
+ Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
2492
+ YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
2493
+ AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
2494
+ Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
2495
+ U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
2496
+ LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
2497
+ cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
2498
+ cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
2499
+ dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
2500
+ AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
2501
+ 3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
2502
+ vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
2503
+ fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
2504
+ fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
2505
+ EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
2506
+ yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
2507
+ 1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
2508
+ lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
2509
+ g14=
2510
+ -----END CERTIFICATE-----
2511
+
2512
+ Taiwan GRCA
2513
+ ===========
2514
+ -----BEGIN CERTIFICATE-----
2515
+ MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
2516
+ EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
2517
+ DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
2518
+ dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
2519
+ ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
2520
+ w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
2521
+ BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
2522
+ 1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
2523
+ htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
2524
+ J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
2525
+ Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
2526
+ B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
2527
+ O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
2528
+ lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
2529
+ HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
2530
+ 09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
2531
+ TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
2532
+ Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
2533
+ Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
2534
+ D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
2535
+ DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
2536
+ Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
2537
+ 7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
2538
+ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
2539
+ +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
2540
+ -----END CERTIFICATE-----
2541
+
2542
+ Firmaprofesional Root CA
2543
+ ========================
2544
+ -----BEGIN CERTIFICATE-----
2545
+ MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
2546
+ GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
2547
+ Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
2548
+ ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
2549
+ MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
2550
+ OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
2551
+ ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
2552
+ AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
2553
+ j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
2554
+ lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
2555
+ 3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
2556
+ NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
2557
+ KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
2558
+ AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
2559
+ DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
2560
+ ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
2561
+ u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
2562
+ wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
2563
+ 7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
2564
+ VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
2565
+ -----END CERTIFICATE-----
2566
+
2567
+ Wells Fargo Root CA
2568
+ ===================
2569
+ -----BEGIN CERTIFICATE-----
2570
+ MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
2571
+ BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
2572
+ cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
2573
+ MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
2574
+ bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
2575
+ MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
2576
+ SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
2577
+ x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
2578
+ E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
2579
+ OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
2580
+ sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
2581
+ YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
2582
+ BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
2583
+ ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
2584
+ m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
2585
+ OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
2586
+ x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
2587
+ tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
2588
+ -----END CERTIFICATE-----
2589
+
2590
+ Swisscom Root CA 1
2591
+ ==================
2592
+ -----BEGIN CERTIFICATE-----
2593
+ MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
2594
+ EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
2595
+ dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
2596
+ MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
2597
+ aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
2598
+ IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
2599
+ MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
2600
+ NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
2601
+ AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
2602
+ b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
2603
+ 7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
2604
+ cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
2605
+ WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
2606
+ haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
2607
+ MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
2608
+ HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
2609
+ BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
2610
+ MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
2611
+ jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
2612
+ MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
2613
+ VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
2614
+ vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
2615
+ OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
2616
+ 1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
2617
+ nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
2618
+ x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
2619
+ NY6E0F/6MBr1mmz0DlP5OlvRHA==
2620
+ -----END CERTIFICATE-----
2621
+
2622
+ DigiCert Assured ID Root CA
2623
+ ===========================
2624
+ -----BEGIN CERTIFICATE-----
2625
+ MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
2626
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
2627
+ IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
2628
+ MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
2629
+ ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
2630
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
2631
+ 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
2632
+ UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
2633
+ /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
2634
+ oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
2635
+ GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
2636
+ 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
2637
+ hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
2638
+ EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
2639
+ SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
2640
+ 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
2641
+ +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
2642
+ -----END CERTIFICATE-----
2643
+
2644
+ DigiCert Global Root CA
2645
+ =======================
2646
+ -----BEGIN CERTIFICATE-----
2647
+ MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
2648
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
2649
+ HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
2650
+ MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
2651
+ dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
2652
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
2653
+ TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
2654
+ BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
2655
+ 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
2656
+ 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
2657
+ o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
2658
+ 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
2659
+ BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
2660
+ EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
2661
+ tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
2662
+ UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
2663
+ CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
2664
+ -----END CERTIFICATE-----
2665
+
2666
+ DigiCert High Assurance EV Root CA
2667
+ ==================================
2668
+ -----BEGIN CERTIFICATE-----
2669
+ MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
2670
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
2671
+ KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
2672
+ MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
2673
+ MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
2674
+ Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
2675
+ Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
2676
+ OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
2677
+ MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
2678
+ NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
2679
+ h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
2680
+ Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
2681
+ JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
2682
+ V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
2683
+ myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
2684
+ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
2685
+ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
2686
+ -----END CERTIFICATE-----
2687
+
2688
+ Certplus Class 2 Primary CA
2689
+ ===========================
2690
+ -----BEGIN CERTIFICATE-----
2691
+ MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
2692
+ BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
2693
+ OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
2694
+ dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
2695
+ ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
2696
+ 5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
2697
+ Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
2698
+ YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
2699
+ e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
2700
+ CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
2701
+ YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
2702
+ L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
2703
+ P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
2704
+ TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
2705
+ 7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
2706
+ //1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
2707
+ l7+ijrRU
2708
+ -----END CERTIFICATE-----
2709
+
2710
+ DST Root CA X3
2711
+ ==============
2712
+ -----BEGIN CERTIFICATE-----
2713
+ MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
2714
+ ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
2715
+ DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
2716
+ cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
2717
+ ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
2718
+ rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
2719
+ UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
2720
+ xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
2721
+ utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
2722
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
2723
+ MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
2724
+ dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
2725
+ GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
2726
+ RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
2727
+ fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
2728
+ -----END CERTIFICATE-----
2729
+
2730
+ DST ACES CA X6
2731
+ ==============
2732
+ -----BEGIN CERTIFICATE-----
2733
+ MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
2734
+ EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
2735
+ MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
2736
+ MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
2737
+ CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
2738
+ AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
2739
+ DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
2740
+ pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
2741
+ GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
2742
+ MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
2743
+ EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
2744
+ Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
2745
+ dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
2746
+ CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
2747
+ 5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
2748
+ Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
2749
+ nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
2750
+ vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
2751
+ oKfN5XozNmr6mis=
2752
+ -----END CERTIFICATE-----
2753
+
2754
+ TURKTRUST Certificate Services Provider Root 1
2755
+ ==============================================
2756
+ -----BEGIN CERTIFICATE-----
2757
+ MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
2758
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
2759
+ MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
2760
+ acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
2761
+ MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
2762
+ U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
2763
+ TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
2764
+ aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
2765
+ AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
2766
+ yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
2767
+ Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
2768
+ 8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
2769
+ W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
2770
+ BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
2771
+ sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
2772
+ q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
2773
+ B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
2774
+ nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
2775
+ -----END CERTIFICATE-----
2776
+
2777
+ TURKTRUST Certificate Services Provider Root 2
2778
+ ==============================================
2779
+ -----BEGIN CERTIFICATE-----
2780
+ MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
2781
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
2782
+ MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
2783
+ QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
2784
+ MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
2785
+ dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
2786
+ A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
2787
+ acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
2788
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
2789
+ LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
2790
+ x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
2791
+ QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
2792
+ 5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
2793
+ AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
2794
+ A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
2795
+ Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
2796
+ Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
2797
+ hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
2798
+ 9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
2799
+ UrbnBEI=
2800
+ -----END CERTIFICATE-----
2801
+
2802
+ SwissSign Platinum CA - G2
2803
+ ==========================
2804
+ -----BEGIN CERTIFICATE-----
2805
+ MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT
2806
+ BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw
2807
+ HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM
2808
+ U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ
2809
+ KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu
2810
+ 669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF
2811
+ eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne
2812
+ WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo
2813
+ j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6
2814
+ 8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T
2815
+ aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy
2816
+ domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D
2817
+ +m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV
2818
+ CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
2819
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv
2820
+ zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
2821
+ IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1
2822
+ Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3
2823
+ NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4
2824
+ U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8
2825
+ KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl
2826
+ 9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B
2827
+ aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs
2828
+ OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY
2829
+ Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci
2830
+ IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
2831
+ -----END CERTIFICATE-----
2832
+
2833
+ SwissSign Gold CA - G2
2834
+ ======================
2835
+ -----BEGIN CERTIFICATE-----
2836
+ MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
2837
+ EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
2838
+ MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
2839
+ c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
2840
+ AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
2841
+ t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
2842
+ jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
2843
+ vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
2844
+ ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
2845
+ AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
2846
+ jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
2847
+ peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
2848
+ 7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
2849
+ GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
2850
+ AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
2851
+ OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
2852
+ L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
2853
+ 5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
2854
+ 44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
2855
+ Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
2856
+ Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
2857
+ mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
2858
+ vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
2859
+ KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
2860
+ NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
2861
+ viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
2862
+ -----END CERTIFICATE-----
2863
+
2864
+ SwissSign Silver CA - G2
2865
+ ========================
2866
+ -----BEGIN CERTIFICATE-----
2867
+ MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
2868
+ BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
2869
+ DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
2870
+ aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
2871
+ 9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
2872
+ N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
2873
+ +/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
2874
+ 6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
2875
+ MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
2876
+ qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
2877
+ FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
2878
+ ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
2879
+ celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
2880
+ CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
2881
+ BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
2882
+ tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
2883
+ cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
2884
+ 4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
2885
+ kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
2886
+ 3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
2887
+ /uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
2888
+ DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
2889
+ e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
2890
+ WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
2891
+ DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
2892
+ DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
2893
+ -----END CERTIFICATE-----
2894
+
2895
+ GeoTrust Primary Certification Authority
2896
+ ========================================
2897
+ -----BEGIN CERTIFICATE-----
2898
+ MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
2899
+ EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
2900
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
2901
+ CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
2902
+ cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
2903
+ CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
2904
+ b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
2905
+ nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
2906
+ RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
2907
+ tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
2908
+ AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
2909
+ hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
2910
+ Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
2911
+ NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
2912
+ Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
2913
+ 1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
2914
+ -----END CERTIFICATE-----
2915
+
2916
+ thawte Primary Root CA
2917
+ ======================
2918
+ -----BEGIN CERTIFICATE-----
2919
+ MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
2920
+ BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
2921
+ aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
2922
+ cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
2923
+ MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
2924
+ SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
2925
+ KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
2926
+ FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
2927
+ oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
2928
+ 1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
2929
+ q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
2930
+ aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
2931
+ afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
2932
+ VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
2933
+ AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
2934
+ uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
2935
+ xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
2936
+ jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
2937
+ z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
2938
+ -----END CERTIFICATE-----
2939
+
2940
+ VeriSign Class 3 Public Primary Certification Authority - G5
2941
+ ============================================================
2942
+ -----BEGIN CERTIFICATE-----
2943
+ MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
2944
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
2945
+ ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
2946
+ IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
2947
+ ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
2948
+ yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
2949
+ biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
2950
+ dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
2951
+ YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
2952
+ ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
2953
+ j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
2954
+ Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
2955
+ Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
2956
+ fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
2957
+ BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
2958
+ Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
2959
+ aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
2960
+ SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
2961
+ X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
2962
+ KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
2963
+ Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
2964
+ ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
2965
+ -----END CERTIFICATE-----
2966
+
2967
+ SecureTrust CA
2968
+ ==============
2969
+ -----BEGIN CERTIFICATE-----
2970
+ MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
2971
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
2972
+ dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
2973
+ BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
2974
+ ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
2975
+ OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
2976
+ DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
2977
+ GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
2978
+ 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
2979
+ ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
2980
+ BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
2981
+ aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
2982
+ KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
2983
+ SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
2984
+ mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
2985
+ nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
2986
+ 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
2987
+ -----END CERTIFICATE-----
2988
+
2989
+ Secure Global CA
2990
+ ================
2991
+ -----BEGIN CERTIFICATE-----
2992
+ MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
2993
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
2994
+ bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
2995
+ MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
2996
+ Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
2997
+ YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
2998
+ bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
2999
+ 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
3000
+ HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
3001
+ 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
3002
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
3003
+ oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
3004
+ MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
3005
+ OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
3006
+ CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
3007
+ 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
3008
+ f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
3009
+ -----END CERTIFICATE-----
3010
+
3011
+ COMODO Certification Authority
3012
+ ==============================
3013
+ -----BEGIN CERTIFICATE-----
3014
+ MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
3015
+ BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
3016
+ A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
3017
+ dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
3018
+ MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
3019
+ T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
3020
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
3021
+ +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
3022
+ xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
3023
+ 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
3024
+ 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
3025
+ rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
3026
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
3027
+ b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
3028
+ AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
3029
+ OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
3030
+ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
3031
+ IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
3032
+ +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
3033
+ -----END CERTIFICATE-----
3034
+
3035
+ DigiNotar Root CA
3036
+ =================
3037
+ -----BEGIN CERTIFICATE-----
3038
+ MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQG
3039
+ EwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEgMB4G
3040
+ CSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwHhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgx
3041
+ OTIxWjBfMQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90
3042
+ YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3
3043
+ DQEBAQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B8cp86Yxq
3044
+ 7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXYtsMW2YiwsYcdcNqGtA8U
3045
+ i3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIlHgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8
3046
+ ZkqQfioLBQftFl9VkHXYRskbg+IIvvEjzJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEq
3047
+ bYRAhU52mXyC8/O3AlnUJgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4
3048
+ iHomGgVMktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXva5pk
3049
+ XuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57pK6kwe6AYHw4YC+Vb
3050
+ qdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMipuih2TkGl/VujQKQjBR7P4DNG5y6
3051
+ xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovTyD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHc
3052
+ BmfFlHqabWJMfczgZICynkeOowIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
3053
+ AwIBBjAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC
3054
+ jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXyfJ9oHbtdzno5
3055
+ wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBoY6pFITlIYXg23PFDk9Qlx/KA
3056
+ ZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHoM/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedT
3057
+ FLJgQT2EkTFoPSdE2+Xe9PpjRchMPpj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKf
3058
+ yvBovWsdst+Nbwed2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoA
3059
+ ZbwH/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQlnQ7KN+ZQ
3060
+ /YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jEO1hZibCMjFCz2IbLaKPE
3061
+ CudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU9jQZjHkJNsphFyUXC4KYcwx3dMPVDceo
3062
+ EkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr
3063
+ -----END CERTIFICATE-----
3064
+
3065
+ Network Solutions Certificate Authority
3066
+ =======================================
3067
+ -----BEGIN CERTIFICATE-----
3068
+ MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
3069
+ EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
3070
+ IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
3071
+ MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
3072
+ MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
3073
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
3074
+ jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
3075
+ aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
3076
+ crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
3077
+ /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
3078
+ AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
3079
+ BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
3080
+ bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
3081
+ A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
3082
+ 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
3083
+ GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
3084
+ wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
3085
+ ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
3086
+ -----END CERTIFICATE-----
3087
+
3088
+ WellsSecure Public Root Certificate Authority
3089
+ =============================================
3090
+ -----BEGIN CERTIFICATE-----
3091
+ MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
3092
+ F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
3093
+ NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
3094
+ MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
3095
+ bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
3096
+ VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
3097
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
3098
+ iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
3099
+ i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
3100
+ bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
3101
+ K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
3102
+ AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
3103
+ cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
3104
+ lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
3105
+ i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
3106
+ GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
3107
+ Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
3108
+ K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
3109
+ bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
3110
+ qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
3111
+ E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
3112
+ tylv2G0xffX8oRAHh84vWdw+WNs=
3113
+ -----END CERTIFICATE-----
app/libs/rackspace/share/magic ADDED
@@ -0,0 +1,15283 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Magic data for file(1) command.
2
+ # Format is described in magic(5).
3
+ # Don't edit this file, edit /etc/magic or send your suggested inclusions to
4
+ # this file as a wishlist bug against file (using the reportbug utility).
5
+
6
+
7
+ #------------------------------------------------------------------------------
8
+ # Localstuff: file(1) magic for locally observed files
9
+ #
10
+ # $File: Localstuff,v 1.4 2003/03/23 04:17:27 christos Exp $
11
+ # Add any locally observed files here. Remember:
12
+ # text if readable, executable if runnable binary, data if unreadable.
13
+ #------------------------------------------------------------------------------
14
+ # acorn: file(1) magic for files found on Acorn systems
15
+ #
16
+
17
+ # RISC OS Chunk File Format
18
+ # From RISC OS Programmer's Reference Manual, Appendix D
19
+ # We guess the file type from the type of the first chunk.
20
+ 0 lelong 0xc3cbc6c5 RISC OS Chunk data
21
+ >12 string OBJ_ \b, AOF object
22
+ >12 string LIB_ \b, ALF library
23
+
24
+ # RISC OS AIF, contains "SWI OS_Exit" at offset 16.
25
+ 16 lelong 0xef000011 RISC OS AIF executable
26
+
27
+ # RISC OS Draw files
28
+ # From RISC OS Programmer's Reference Manual, Appendix E
29
+ 0 string Draw RISC OS Draw file data
30
+
31
+ # RISC OS new format font files
32
+ # From RISC OS Programmer's Reference Manual, Appendix E
33
+ 0 string FONT\0 RISC OS outline font data,
34
+ >5 byte x version %d
35
+ 0 string FONT\1 RISC OS 1bpp font data,
36
+ >5 byte x version %d
37
+ 0 string FONT\4 RISC OS 4bpp font data
38
+ >5 byte x version %d
39
+
40
+ # RISC OS Music files
41
+ # From RISC OS Programmer's Reference Manual, Appendix E
42
+ 0 string Maestro\r RISC OS music file
43
+ >8 byte x version %d
44
+
45
+ >8 byte x type %d
46
+
47
+ # Digital Symphony data files
48
+ # From: Bernard Jungen (bern8817@euphonynet.be)
49
+ 0 string \x02\x01\x13\x13\x13\x01\x0d\x10 Digital Symphony sound sample (RISC OS),
50
+ >8 byte x version %d,
51
+ >9 pstring x named "%s",
52
+ >(9.b+19) byte =0 8-bit logarithmic
53
+ >(9.b+19) byte =1 LZW-compressed linear
54
+ >(9.b+19) byte =2 8-bit linear signed
55
+ >(9.b+19) byte =3 16-bit linear signed
56
+ >(9.b+19) byte =4 SigmaDelta-compressed linear
57
+ >(9.b+19) byte =5 SigmaDelta-compressed logarithmic
58
+ >(9.b+19) byte >5 unknown format
59
+
60
+ 0 string \x02\x01\x13\x13\x14\x12\x01\x0b Digital Symphony song (RISC OS),
61
+ >8 byte x version %d,
62
+ >9 byte =1 1 voice,
63
+ >9 byte !1 %d voices,
64
+ >10 leshort =1 1 track,
65
+ >10 leshort !1 %d tracks,
66
+ >12 leshort =1 1 pattern
67
+ >12 leshort !1 %d patterns
68
+
69
+ 0 string \x02\x01\x13\x13\x10\x14\x12\x0e
70
+ >9 byte =0 Digital Symphony sequence (RISC OS),
71
+ >>8 byte x version %d,
72
+ >>10 byte =1 1 line,
73
+ >>10 byte !1 %d lines,
74
+ >>11 leshort =1 1 position
75
+ >>11 leshort !1 %d positions
76
+ >9 byte =1 Digital Symphony pattern data (RISC OS),
77
+ >>8 byte x version %d,
78
+ >>10 leshort =1 1 pattern
79
+ >>10 leshort !1 %d patterns
80
+
81
+ #------------------------------------------------------------------------------
82
+ # adi: file(1) magic for ADi's objects
83
+ # From Gregory McGarry <g.mcgarry@ieee.org>
84
+ #
85
+ 0 leshort 0x521c COFF DSP21k
86
+ >18 lelong &02 executable,
87
+ >18 lelong ^02
88
+ >>18 lelong &01 static object,
89
+ >>18 lelong ^01 relocatable object,
90
+ >18 lelong &010 stripped
91
+ >18 lelong ^010 not stripped
92
+
93
+ #------------------------------------------------------------------------------
94
+ # adventure: file(1) magic for Adventure game files
95
+ #
96
+ # from Allen Garvin <earendil@faeryland.tamu-commerce.edu>
97
+ # Edited by Dave Chapeskie <dchapes@ddm.on.ca> Jun 28, 1998
98
+ # Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002
99
+ #
100
+ # ALAN
101
+ # I assume there are other, lower versions, but these are the only ones I
102
+ # saw in the archive.
103
+ 0 beshort 0x0206 ALAN game data
104
+ >2 byte <10 version 2.6%d
105
+
106
+
107
+ # Infocom (see z-machine)
108
+ #------------------------------------------------------------------------------
109
+ # Z-machine: file(1) magic for Z-machine binaries.
110
+ #
111
+ # Updated by Adam Buchbinder <adam.buchbinder@gmail.com>
112
+ #
113
+ # The first byte is the Z-machine revision; it is always between 1 and 8. We
114
+ # had false matches (for instance, inbig5.ocp from the Omega TeX extension as
115
+ # well as an occasional MP3 file), so we sanity-check the version number.
116
+ #
117
+ # It might be possible to sanity-check the release number as well, as it seems
118
+ # (at least in classic Infocom games) to always be a relatively small number,
119
+ # always under 150 or so, but as this isn't rigorous, we'll wait on that until
120
+ # it becomes clear that it's needed.
121
+ #
122
+ 0 ubyte >0
123
+ >0 ubyte <9
124
+ >>16 belong&0xfe00f0f0 0x3030 Infocom game data
125
+ >>>0 ubyte x (Z-machine %d,
126
+ >>>>2 ubeshort x Release %d /
127
+ >>>>18 string >\0 Serial %.6s)
128
+
129
+ #------------------------------------------------------------------------------
130
+ # Glulx: file(1) magic for Glulx binaries.
131
+ #
132
+ # I haven't checked for false matches yet.
133
+ #
134
+ 0 string Glul Glulx game data
135
+ >4 beshort x (Version %d
136
+ >>6 byte x \b.%d
137
+ >>8 byte x \b.%d)
138
+ >36 string Info Compiled by Inform
139
+
140
+
141
+
142
+ # For Quetzal and blorb magic see iff
143
+
144
+
145
+ # TADS (Text Adventure Development System)
146
+ # All files are machine-independent (games compile to byte-code) and are tagged
147
+ # with a version string of the form "V2.<digit>.<digit>\0" (but TADS 3 is
148
+ # on the way).
149
+ # Game files start with "TADS2 bin\n\r\032\0" then the compiler version.
150
+ 0 string TADS2\ bin TADS
151
+ >9 belong !0x0A0D1A00 game data, CORRUPTED
152
+ >9 belong 0x0A0D1A00
153
+ >>13 string >\0 %s game data
154
+ # Resource files start with "TADS2 rsc\n\r\032\0" then the compiler version.
155
+ 0 string TADS2\ rsc TADS
156
+ >9 belong !0x0A0D1A00 resource data, CORRUPTED
157
+ >9 belong 0x0A0D1A00
158
+ >>13 string >\0 %s resource data
159
+ # Some saved game files start with "TADS2 save/g\n\r\032\0", a little-endian
160
+ # 2-byte length N, the N-char name of the game file *without* a NUL (darn!),
161
+ # "TADS2 save\n\r\032\0" and the interpreter version.
162
+ 0 string TADS2\ save/g TADS
163
+ >12 belong !0x0A0D1A00 saved game data, CORRUPTED
164
+ >12 belong 0x0A0D1A00
165
+ >>(16.s+32) string >\0 %s saved game data
166
+ # Other saved game files start with "TADS2 save\n\r\032\0" and the interpreter
167
+ # version.
168
+ 0 string TADS2\ save TADS
169
+ >10 belong !0x0A0D1A00 saved game data, CORRUPTED
170
+ >10 belong 0x0A0D1A00
171
+ >>14 string >\0 %s saved game data
172
+
173
+ # Danny Milosavljevic <danny.milo@gmx.net>
174
+ # this are adrift (adventure game standard) game files, extension .taf
175
+ # depending on version magic continues with 0x93453E6139FA (V 4.0)
176
+ # 0x9445376139FA (V 3.90)
177
+ # 0x9445366139FA (V 3.80)
178
+ # this is from source (http://www.adrift.org.uk/) and I have some taf
179
+ # files, and checked them.
180
+ #0 belong 0x3C423FC9
181
+ #>4 belong 0x6A87C2CF Adrift game file
182
+ #!:mime application/x-adrift
183
+ #------------------------------------------------------------------------------
184
+ # allegro: file(1) magic for Allegro datafiles
185
+ # Toby Deshane <hac@shoelace.digivill.net>
186
+ #
187
+ 0 belong 0x736C6821 Allegro datafile (packed)
188
+ 0 belong 0x736C682E Allegro datafile (not packed/autodetect)
189
+ 0 belong 0x736C682B Allegro datafile (appended exe data)
190
+
191
+ #------------------------------------------------------------------------------
192
+ # alliant: file(1) magic for Alliant FX series a.out files
193
+ #
194
+ # If the FX series is the one that had a processor with a 68K-derived
195
+ # instruction set, the "short" should probably become "beshort" and the
196
+ # "long" should probably become "belong".
197
+ # If it's the i860-based one, they should probably become either the
198
+ # big-endian or little-endian versions, depending on the mode they ran
199
+ # the 860 in....
200
+ #
201
+ 0 short 0420 0420 Alliant virtual executable
202
+ >2 short &0x0020 common library
203
+ >16 long >0 not stripped
204
+ 0 short 0421 0421 Alliant compact executable
205
+ >2 short &0x0020 common library
206
+ >16 long >0 not stripped
207
+ #------------------------------------------------------------------------------
208
+ # alpha architecture description
209
+ #
210
+
211
+ 0 leshort 0603 COFF format alpha
212
+ >22 leshort&030000 !020000 executable
213
+ >24 leshort 0410 pure
214
+ >24 leshort 0413 paged
215
+ >22 leshort&020000 !0 dynamically linked
216
+ >16 lelong !0 not stripped
217
+ >16 lelong 0 stripped
218
+ >22 leshort&030000 020000 shared library
219
+ >24 leshort 0407 object
220
+ >27 byte x - version %d
221
+ >26 byte x .%d
222
+ >28 byte x -%d
223
+
224
+ # Basic recognition of Digital UNIX core dumps - Mike Bremford <mike@opac.bl.uk>
225
+ #
226
+ # The actual magic number is just "Core", followed by a 2-byte version
227
+ # number; however, treating any file that begins with "Core" as a Digital
228
+ # UNIX core dump file may produce too many false hits, so we include one
229
+ # byte of the version number as well; DU 5.0 appears only to be up to
230
+ # version 2.
231
+ #
232
+ 0 string Core\001 Alpha COFF format core dump (Digital UNIX)
233
+ >24 string >\0 \b, from '%s'
234
+ 0 string Core\002 Alpha COFF format core dump (Digital UNIX)
235
+ >24 string >\0 \b, from '%s'
236
+
237
+ #------------------------------------------------------------------------------
238
+ # amanda: file(1) magic for amanda file format
239
+ #
240
+ 0 string AMANDA:\ AMANDA
241
+ >8 string TAPESTART\ DATE tape header file,
242
+ >>23 string X
243
+ >>>25 string >\ Unused %s
244
+ >>23 string >\ DATE %s
245
+ >8 string FILE\ dump file,
246
+ >>13 string >\ DATE %s
247
+ #------------------------------------------------------------------------------
248
+ # amigaos: file(1) magic for AmigaOS binary formats:
249
+
250
+ #
251
+ # From ignatios@cs.uni-bonn.de (Ignatios Souvatzis)
252
+ #
253
+ 0 belong 0x000003fa AmigaOS shared library
254
+ 0 belong 0x000003f3 AmigaOS loadseg()ble executable/binary
255
+ 0 belong 0x000003e7 AmigaOS object/library data
256
+ #
257
+ 0 beshort 0xe310 Amiga Workbench
258
+ >2 beshort 1
259
+ >>48 byte 1 disk icon
260
+ >>48 byte 2 drawer icon
261
+ >>48 byte 3 tool icon
262
+ >>48 byte 4 project icon
263
+ >>48 byte 5 garbage icon
264
+ >>48 byte 6 device icon
265
+ >>48 byte 7 kickstart icon
266
+ >>48 byte 8 workbench application icon
267
+ >2 beshort >1 icon, vers. %d
268
+ #
269
+ # various sound formats from the Amiga
270
+ # G=F6tz Waschk <waschk@informatik.uni-rostock.de>
271
+ #
272
+ 0 string FC14 Future Composer 1.4 Module sound file
273
+ 0 string SMOD Future Composer 1.3 Module sound file
274
+ 0 string AON4artofnoise Art Of Noise Module sound file
275
+ 1 string MUGICIAN/SOFTEYES Mugician Module sound file
276
+ 58 string SIDMON\ II\ -\ THE Sidmon 2.0 Module sound file
277
+ 0 string Synth4.0 Synthesis Module sound file
278
+ 0 string ARP. The Holy Noise Module sound file
279
+ 0 string BeEp\0 JamCracker Module sound file
280
+ 0 string COSO\0 Hippel-COSO Module sound file
281
+ # Too simple (short, pure ASCII, deep), MPi
282
+ #26 string V.3 Brian Postma's Soundmon Module sound file v3
283
+ #26 string BPSM Brian Postma's Soundmon Module sound file v3
284
+ #26 string V.2 Brian Postma's Soundmon Module sound file v2
285
+
286
+ # The following are from: "Stefan A. Haubenthal" <polluks@web.de>
287
+ 0 beshort 0x0f00 AmigaOS bitmap font
288
+ 0 beshort 0x0f03 AmigaOS outline font
289
+ 0 belong 0x80001001 AmigaOS outline tag
290
+ 0 string ##\ version catalog translation
291
+ 0 string EMOD\0 Amiga E module
292
+ 8 string ECXM\0 ECX module
293
+ 0 string/c @database AmigaGuide file
294
+
295
+ # Amiga disk types
296
+ #
297
+ 0 string RDSK Rigid Disk Block
298
+ >160 string x on %.24s
299
+ 0 string DOS\0 Amiga DOS disk
300
+ 0 string DOS\1 Amiga FFS disk
301
+ 0 string DOS\2 Amiga Inter DOS disk
302
+ 0 string DOS\3 Amiga Inter FFS disk
303
+ 0 string DOS\4 Amiga Fastdir DOS disk
304
+ 0 string DOS\5 Amiga Fastdir FFS disk
305
+ 0 string KICK Kickstart disk
306
+
307
+ # From: Alex Beregszaszi <alex@fsn.hu>
308
+ 0 string LZX LZX compressed archive (Amiga)
309
+
310
+
311
+ #------------------------------------------------------------------------------
312
+ # animation: file(1) magic for animation/movie formats
313
+ #
314
+ # animation formats
315
+ # MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8)
316
+ # FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com)
317
+
318
+ # SGI and Apple formats
319
+ 0 string MOVI Silicon Graphics movie file
320
+ !:mime video/x-sgi-movie
321
+ 4 string moov Apple QuickTime
322
+ !:mime video/quicktime
323
+ >12 string mvhd \b movie (fast start)
324
+ >12 string mdra \b URL
325
+ >12 string cmov \b movie (fast start, compressed header)
326
+ >12 string rmra \b multiple URLs
327
+ 4 string mdat Apple QuickTime movie (unoptimized)
328
+ !:mime video/quicktime
329
+ #4 string wide Apple QuickTime movie (unoptimized)
330
+ #!:mime video/quicktime
331
+ #4 string skip Apple QuickTime movie (modified)
332
+ #!:mime video/quicktime
333
+ #4 string free Apple QuickTime movie (modified)
334
+ #!:mime video/quicktime
335
+ 4 string idsc Apple QuickTime image (fast start)
336
+ !:mime image/x-quicktime
337
+ #4 string idat Apple QuickTime image (unoptimized)
338
+ #!:mime image/x-quicktime
339
+ 4 string pckg Apple QuickTime compressed archive
340
+ !:mime application/x-quicktime-player
341
+ 4 string/B jP JPEG 2000 image
342
+ !:mime image/jp2
343
+ 4 string ftyp ISO Media
344
+ >8 string isom \b, MPEG v4 system, version 1
345
+ !:mime video/mp4
346
+ >8 string iso2 \b, MPEG v4 system, part 12 revision
347
+ >8 string mp41 \b, MPEG v4 system, version 1
348
+ !:mime video/mp4
349
+ >8 string mp42 \b, MPEG v4 system, version 2
350
+ !:mime video/mp4
351
+ >8 string mp7t \b, MPEG v4 system, MPEG v7 XML
352
+ >8 string mp7b \b, MPEG v4 system, MPEG v7 binary XML
353
+ >8 string/B jp2 \b, JPEG 2000
354
+ !:mime image/jp2
355
+ >8 string 3gp \b, MPEG v4 system, 3GPP
356
+ !:mime video/3gpp
357
+ >>11 byte 4 \b v4 (H.263/AMR GSM 6.10)
358
+ >>11 byte 5 \b v5 (H.263/AMR GSM 6.10)
359
+ >>11 byte 6 \b v6 (ITU H.264/AMR GSM 6.10)
360
+ >8 string mmp4 \b, MPEG v4 system, 3GPP Mobile
361
+ !:mime video/mp4
362
+ >8 string avc1 \b, MPEG v4 system, 3GPP JVT AVC
363
+ !:mime video/3gpp
364
+ >8 string/B M4A \b, MPEG v4 system, iTunes AAC-LC
365
+ !:mime audio/mp4
366
+ >8 string/B M4V \b, MPEG v4 system, iTunes AVC-LC
367
+ !:mime video/mp4
368
+ >8 string/B M4P \b, MPEG v4 system, iTunes AES encrypted
369
+ >8 string/B M4B \b, MPEG v4 system, iTunes bookmarked
370
+ >8 string/B qt \b, Apple QuickTime movie
371
+ !:mime video/quicktime
372
+
373
+ # MPEG sequences
374
+ # Scans for all common MPEG header start codes
375
+ 0 belong 0x00000001
376
+ >4 byte&0x1F 0x07 JVT NAL sequence, H.264 video
377
+ >>5 byte 66 \b, baseline
378
+ >>5 byte 77 \b, main
379
+ >>5 byte 88 \b, extended
380
+ >>7 byte x \b @ L %u
381
+ 0 belong&0xFFFFFF00 0x00000100
382
+ >3 byte 0xBA MPEG sequence
383
+ >>4 byte &0x40 \b, v2, program multiplex
384
+ >>4 byte ^0x40 \b, v1, system multiplex
385
+ >3 byte 0xBB MPEG sequence, v1/2, multiplex (missing pack header)
386
+ >3 byte&0x1F 0x07 MPEG sequence, H.264 video
387
+ >>4 byte 66 \b, baseline
388
+ >>4 byte 77 \b, main
389
+ >>4 byte 88 \b, extended
390
+ >>6 byte x \b @ L %u
391
+ >3 byte 0xB0 MPEG sequence, v4
392
+ >>5 belong 0x000001B5
393
+ >>>9 byte &0x80
394
+ >>>>10 byte&0xF0 16 \b, video
395
+ >>>>10 byte&0xF0 32 \b, still texture
396
+ >>>>10 byte&0xF0 48 \b, mesh
397
+ >>>>10 byte&0xF0 64 \b, face
398
+ >>>9 byte&0xF8 8 \b, video
399
+ >>>9 byte&0xF8 16 \b, still texture
400
+ >>>9 byte&0xF8 24 \b, mesh
401
+ >>>9 byte&0xF8 32 \b, face
402
+ >>4 byte 1 \b, simple @ L1
403
+ >>4 byte 2 \b, simple @ L2
404
+ >>4 byte 3 \b, simple @ L3
405
+ >>4 byte 4 \b, simple @ L0
406
+ >>4 byte 17 \b, simple scalable @ L1
407
+ >>4 byte 18 \b, simple scalable @ L2
408
+ >>4 byte 33 \b, core @ L1
409
+ >>4 byte 34 \b, core @ L2
410
+ >>4 byte 50 \b, main @ L2
411
+ >>4 byte 51 \b, main @ L3
412
+ >>4 byte 53 \b, main @ L4
413
+ >>4 byte 66 \b, n-bit @ L2
414
+ >>4 byte 81 \b, scalable texture @ L1
415
+ >>4 byte 97 \b, simple face animation @ L1
416
+ >>4 byte 98 \b, simple face animation @ L2
417
+ >>4 byte 99 \b, simple face basic animation @ L1
418
+ >>4 byte 100 \b, simple face basic animation @ L2
419
+ >>4 byte 113 \b, basic animation text @ L1
420
+ >>4 byte 114 \b, basic animation text @ L2
421
+ >>4 byte 129 \b, hybrid @ L1
422
+ >>4 byte 130 \b, hybrid @ L2
423
+ >>4 byte 145 \b, advanced RT simple @ L!
424
+ >>4 byte 146 \b, advanced RT simple @ L2
425
+ >>4 byte 147 \b, advanced RT simple @ L3
426
+ >>4 byte 148 \b, advanced RT simple @ L4
427
+ >>4 byte 161 \b, core scalable @ L1
428
+ >>4 byte 162 \b, core scalable @ L2
429
+ >>4 byte 163 \b, core scalable @ L3
430
+ >>4 byte 177 \b, advanced coding efficiency @ L1
431
+ >>4 byte 178 \b, advanced coding efficiency @ L2
432
+ >>4 byte 179 \b, advanced coding efficiency @ L3
433
+ >>4 byte 180 \b, advanced coding efficiency @ L4
434
+ >>4 byte 193 \b, advanced core @ L1
435
+ >>4 byte 194 \b, advanced core @ L2
436
+ >>4 byte 209 \b, advanced scalable texture @ L1
437
+ >>4 byte 210 \b, advanced scalable texture @ L2
438
+ >>4 byte 211 \b, advanced scalable texture @ L3
439
+ >>4 byte 225 \b, simple studio @ L1
440
+ >>4 byte 226 \b, simple studio @ L2
441
+ >>4 byte 227 \b, simple studio @ L3
442
+ >>4 byte 228 \b, simple studio @ L4
443
+ >>4 byte 229 \b, core studio @ L1
444
+ >>4 byte 230 \b, core studio @ L2
445
+ >>4 byte 231 \b, core studio @ L3
446
+ >>4 byte 232 \b, core studio @ L4
447
+ >>4 byte 240 \b, advanced simple @ L0
448
+ >>4 byte 241 \b, advanced simple @ L1
449
+ >>4 byte 242 \b, advanced simple @ L2
450
+ >>4 byte 243 \b, advanced simple @ L3
451
+ >>4 byte 244 \b, advanced simple @ L4
452
+ >>4 byte 245 \b, advanced simple @ L5
453
+ >>4 byte 247 \b, advanced simple @ L3b
454
+ >>4 byte 248 \b, FGS @ L0
455
+ >>4 byte 249 \b, FGS @ L1
456
+ >>4 byte 250 \b, FGS @ L2
457
+ >>4 byte 251 \b, FGS @ L3
458
+ >>4 byte 252 \b, FGS @ L4
459
+ >>4 byte 253 \b, FGS @ L5
460
+ >3 byte 0xB5 MPEG sequence, v4
461
+ >>4 byte &0x80
462
+ >>>5 byte&0xF0 16 \b, video (missing profile header)
463
+ >>>5 byte&0xF0 32 \b, still texture (missing profile header)
464
+ >>>5 byte&0xF0 48 \b, mesh (missing profile header)
465
+ >>>5 byte&0xF0 64 \b, face (missing profile header)
466
+ >>4 byte&0xF8 8 \b, video (missing profile header)
467
+ >>4 byte&0xF8 16 \b, still texture (missing profile header)
468
+ >>4 byte&0xF8 24 \b, mesh (missing profile header)
469
+ >>4 byte&0xF8 32 \b, face (missing profile header)
470
+ >3 byte 0xB3 MPEG sequence
471
+ >>12 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video
472
+ >>12 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video
473
+ >>12 belong 0x000001B5 \b, v2,
474
+ >>>16 byte&0x0F 1 \b HP
475
+ >>>16 byte&0x0F 2 \b Spt
476
+ >>>16 byte&0x0F 3 \b SNR
477
+ >>>16 byte&0x0F 4 \b MP
478
+ >>>16 byte&0x0F 5 \b SP
479
+ >>>17 byte&0xF0 64 \b@HL
480
+ >>>17 byte&0xF0 96 \b@H-14
481
+ >>>17 byte&0xF0 128 \b@ML
482
+ >>>17 byte&0xF0 160 \b@LL
483
+ >>>17 byte &0x08 \b progressive
484
+ >>>17 byte ^0x08 \b interlaced
485
+ >>>17 byte&0x06 2 \b Y'CbCr 4:2:0 video
486
+ >>>17 byte&0x06 4 \b Y'CbCr 4:2:2 video
487
+ >>>17 byte&0x06 6 \b Y'CbCr 4:4:4 video
488
+ >>11 byte &0x02
489
+ >>>75 byte &0x01
490
+ >>>>140 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video
491
+ >>>>140 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video
492
+ >>>>140 belong 0x000001B5 \b, v2,
493
+ >>>>>144 byte&0x0F 1 \b HP
494
+ >>>>>144 byte&0x0F 2 \b Spt
495
+ >>>>>144 byte&0x0F 3 \b SNR
496
+ >>>>>144 byte&0x0F 4 \b MP
497
+ >>>>>144 byte&0x0F 5 \b SP
498
+ >>>>>145 byte&0xF0 64 \b@HL
499
+ >>>>>145 byte&0xF0 96 \b@H-14
500
+ >>>>>145 byte&0xF0 128 \b@ML
501
+ >>>>>145 byte&0xF0 160 \b@LL
502
+ >>>>>145 byte &0x08 \b progressive
503
+ >>>>>145 byte ^0x08 \b interlaced
504
+ >>>>>145 byte&0x06 2 \b Y'CbCr 4:2:0 video
505
+ >>>>>145 byte&0x06 4 \b Y'CbCr 4:2:2 video
506
+ >>>>>145 byte&0x06 6 \b Y'CbCr 4:4:4 video
507
+ >>76 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video
508
+ >>76 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video
509
+ >>76 belong 0x000001B5 \b, v2,
510
+ >>>80 byte&0x0F 1 \b HP
511
+ >>>80 byte&0x0F 2 \b Spt
512
+ >>>80 byte&0x0F 3 \b SNR
513
+ >>>80 byte&0x0F 4 \b MP
514
+ >>>80 byte&0x0F 5 \b SP
515
+ >>>81 byte&0xF0 64 \b@HL
516
+ >>>81 byte&0xF0 96 \b@H-14
517
+ >>>81 byte&0xF0 128 \b@ML
518
+ >>>81 byte&0xF0 160 \b@LL
519
+ >>>81 byte &0x08 \b progressive
520
+ >>>81 byte ^0x08 \b interlaced
521
+ >>>81 byte&0x06 2 \b Y'CbCr 4:2:0 video
522
+ >>>81 byte&0x06 4 \b Y'CbCr 4:2:2 video
523
+ >>>81 byte&0x06 6 \b Y'CbCr 4:4:4 video
524
+ >>4 belong&0xFFFFFF00 0x78043800 \b, HD-TV 1920P
525
+ >>>7 byte&0xF0 0x10 \b, 16:9
526
+ >>4 belong&0xFFFFFF00 0x50002D00 \b, SD-TV 1280I
527
+ >>>7 byte&0xF0 0x10 \b, 16:9
528
+ >>4 belong&0xFFFFFF00 0x30024000 \b, PAL Capture
529
+ >>>7 byte&0xF0 0x10 \b, 4:3
530
+ >>4 beshort&0xFFF0 0x2C00 \b, 4CIF
531
+ >>>5 beshort&0x0FFF 0x01E0 \b NTSC
532
+ >>>5 beshort&0x0FFF 0x0240 \b PAL
533
+ >>>7 byte&0xF0 0x20 \b, 4:3
534
+ >>>7 byte&0xF0 0x30 \b, 16:9
535
+ >>>7 byte&0xF0 0x40 \b, 11:5
536
+ >>>7 byte&0xF0 0x80 \b, PAL 4:3
537
+ >>>7 byte&0xF0 0xC0 \b, NTSC 4:3
538
+ >>4 belong&0xFFFFFF00 0x2801E000 \b, LD-TV 640P
539
+ >>>7 byte&0xF0 0x10 \b, 4:3
540
+ >>4 belong&0xFFFFFF00 0x1400F000 \b, 320x240
541
+ >>>7 byte&0xF0 0x10 \b, 4:3
542
+ >>4 belong&0xFFFFFF00 0x0F00A000 \b, 240x160
543
+ >>>7 byte&0xF0 0x10 \b, 4:3
544
+ >>4 belong&0xFFFFFF00 0x0A007800 \b, 160x120
545
+ >>>7 byte&0xF0 0x10 \b, 4:3
546
+ >>4 beshort&0xFFF0 0x1600 \b, CIF
547
+ >>>5 beshort&0x0FFF 0x00F0 \b NTSC
548
+ >>>5 beshort&0x0FFF 0x0120 \b PAL
549
+ >>>7 byte&0xF0 0x20 \b, 4:3
550
+ >>>7 byte&0xF0 0x30 \b, 16:9
551
+ >>>7 byte&0xF0 0x40 \b, 11:5
552
+ >>>7 byte&0xF0 0x80 \b, PAL 4:3
553
+ >>>7 byte&0xF0 0xC0 \b, NTSC 4:3
554
+ >>>5 beshort&0x0FFF 0x0240 \b PAL 625
555
+ >>>>7 byte&0xF0 0x20 \b, 4:3
556
+ >>>>7 byte&0xF0 0x30 \b, 16:9
557
+ >>>>7 byte&0xF0 0x40 \b, 11:5
558
+ >>4 beshort&0xFFF0 0x2D00 \b, CCIR/ITU
559
+ >>>5 beshort&0x0FFF 0x01E0 \b NTSC 525
560
+ >>>5 beshort&0x0FFF 0x0240 \b PAL 625
561
+ >>>7 byte&0xF0 0x20 \b, 4:3
562
+ >>>7 byte&0xF0 0x30 \b, 16:9
563
+ >>>7 byte&0xF0 0x40 \b, 11:5
564
+ >>4 beshort&0xFFF0 0x1E00 \b, SVCD
565
+ >>>5 beshort&0x0FFF 0x01E0 \b NTSC 525
566
+ >>>5 beshort&0x0FFF 0x0240 \b PAL 625
567
+ >>>7 byte&0xF0 0x20 \b, 4:3
568
+ >>>7 byte&0xF0 0x30 \b, 16:9
569
+ >>>7 byte&0xF0 0x40 \b, 11:5
570
+ >>7 byte&0x0F 1 \b, 23.976 fps
571
+ >>7 byte&0x0F 2 \b, 24 fps
572
+ >>7 byte&0x0F 3 \b, 25 fps
573
+ >>7 byte&0x0F 4 \b, 29.97 fps
574
+ >>7 byte&0x0F 5 \b, 30 fps
575
+ >>7 byte&0x0F 6 \b, 50 fps
576
+ >>7 byte&0x0F 7 \b, 59.94 fps
577
+ >>7 byte&0x0F 8 \b, 60 fps
578
+ >>11 byte &0x04 \b, Constrained
579
+
580
+ # MPEG ADTS Audio (*.mpx/mxa/aac)
581
+ # from dreesen@math.fu-berlin.de
582
+ # modified to fully support MPEG ADTS
583
+
584
+ # MP3, M1A
585
+ # modified by Joerg Jenderek
586
+ # GRR the original test are too common for many DOS files
587
+ # so don't accept as MP3 until we've tested the rate
588
+ 0 beshort&0xFFFE 0xFFFA
589
+ # rates
590
+ >2 byte&0xF0 0x10 MPEG ADTS, layer III, v1, 32 kbps
591
+ !:mime audio/mpeg
592
+ >2 byte&0xF0 0x20 MPEG ADTS, layer III, v1, 40 kbps
593
+ !:mime audio/mpeg
594
+ >2 byte&0xF0 0x30 MPEG ADTS, layer III, v1, 48 kbps
595
+ !:mime audio/mpeg
596
+ >2 byte&0xF0 0x40 MPEG ADTS, layer III, v1, 56 kbps
597
+ !:mime audio/mpeg
598
+ >2 byte&0xF0 0x50 MPEG ADTS, layer III, v1, 64 kbps
599
+ !:mime audio/mpeg
600
+ >2 byte&0xF0 0x60 MPEG ADTS, layer III, v1, 80 kbps
601
+ !:mime audio/mpeg
602
+ >2 byte&0xF0 0x70 MPEG ADTS, layer III, v1, 96 kbps
603
+ !:mime audio/mpeg
604
+ >2 byte&0xF0 0x80 MPEG ADTS, layer III, v1, 112 kbps
605
+ !:mime audio/mpeg
606
+ >2 byte&0xF0 0x90 MPEG ADTS, layer III, v1, 128 kbps
607
+ !:mime audio/mpeg
608
+ >2 byte&0xF0 0xA0 MPEG ADTS, layer III, v1, 160 kbps
609
+ !:mime audio/mpeg
610
+ >2 byte&0xF0 0xB0 MPEG ADTS, layer III, v1, 192 kbps
611
+ !:mime audio/mpeg
612
+ >2 byte&0xF0 0xC0 MPEG ADTS, layer III, v1, 224 kbps
613
+ !:mime audio/mpeg
614
+ >2 byte&0xF0 0xD0 MPEG ADTS, layer III, v1, 256 kbps
615
+ !:mime audio/mpeg
616
+ >2 byte&0xF0 0xE0 MPEG ADTS, layer III, v1, 320 kbps
617
+ !:mime audio/mpeg
618
+ # timing
619
+ >2 byte&0x0C 0x00 \b, 44.1 kHz
620
+ >2 byte&0x0C 0x04 \b, 48 kHz
621
+ >2 byte&0x0C 0x08 \b, 32 kHz
622
+ # channels/options
623
+ >3 byte&0xC0 0x00 \b, Stereo
624
+ >3 byte&0xC0 0x40 \b, JntStereo
625
+ >3 byte&0xC0 0x80 \b, 2x Monaural
626
+ >3 byte&0xC0 0xC0 \b, Monaural
627
+ #>1 byte ^0x01 \b, Data Verify
628
+ #>2 byte &0x02 \b, Packet Pad
629
+ #>2 byte &0x01 \b, Custom Flag
630
+ #>3 byte &0x08 \b, Copyrighted
631
+ #>3 byte &0x04 \b, Original Source
632
+ #>3 byte&0x03 1 \b, NR: 50/15 ms
633
+ #>3 byte&0x03 3 \b, NR: CCIT J.17
634
+
635
+ # MP2, M1A
636
+ 0 beshort&0xFFFE 0xFFFC MPEG ADTS, layer II, v1
637
+ !:mime audio/mpeg
638
+ # rates
639
+ >2 byte&0xF0 0x10 \b, 32 kbps
640
+ >2 byte&0xF0 0x20 \b, 48 kbps
641
+ >2 byte&0xF0 0x30 \b, 56 kbps
642
+ >2 byte&0xF0 0x40 \b, 64 kbps
643
+ >2 byte&0xF0 0x50 \b, 80 kbps
644
+ >2 byte&0xF0 0x60 \b, 96 kbps
645
+ >2 byte&0xF0 0x70 \b, 112 kbps
646
+ >2 byte&0xF0 0x80 \b, 128 kbps
647
+ >2 byte&0xF0 0x90 \b, 160 kbps
648
+ >2 byte&0xF0 0xA0 \b, 192 kbps
649
+ >2 byte&0xF0 0xB0 \b, 224 kbps
650
+ >2 byte&0xF0 0xC0 \b, 256 kbps
651
+ >2 byte&0xF0 0xD0 \b, 320 kbps
652
+ >2 byte&0xF0 0xE0 \b, 384 kbps
653
+ # timing
654
+ >2 byte&0x0C 0x00 \b, 44.1 kHz
655
+ >2 byte&0x0C 0x04 \b, 48 kHz
656
+ >2 byte&0x0C 0x08 \b, 32 kHz
657
+ # channels/options
658
+ >3 byte&0xC0 0x00 \b, Stereo
659
+ >3 byte&0xC0 0x40 \b, JntStereo
660
+ >3 byte&0xC0 0x80 \b, 2x Monaural
661
+ >3 byte&0xC0 0xC0 \b, Monaural
662
+ #>1 byte ^0x01 \b, Data Verify
663
+ #>2 byte &0x02 \b, Packet Pad
664
+ #>2 byte &0x01 \b, Custom Flag
665
+ #>3 byte &0x08 \b, Copyrighted
666
+ #>3 byte &0x04 \b, Original Source
667
+ #>3 byte&0x03 1 \b, NR: 50/15 ms
668
+ #>3 byte&0x03 3 \b, NR: CCIT J.17
669
+
670
+ # MPA, M1A
671
+ # updated by Joerg Jenderek
672
+ # GRR the original test are too common for many DOS files, so test 32 <= kbits <= 448
673
+ # GRR this test is still too general as it catches a BOM of UTF-16 files (0xFFFE)
674
+ # FIXME: Almost all little endian UTF-16 text with BOM are clobbered by these entries
675
+ #0 beshort&0xFFFE 0xFFFE
676
+ #>2 ubyte&0xF0 >0x0F
677
+ #>>2 ubyte&0xF0 <0xE1 MPEG ADTS, layer I, v1
678
+ ## rate
679
+ #>>>2 byte&0xF0 0x10 \b, 32 kbps
680
+ #>>>2 byte&0xF0 0x20 \b, 64 kbps
681
+ #>>>2 byte&0xF0 0x30 \b, 96 kbps
682
+ #>>>2 byte&0xF0 0x40 \b, 128 kbps
683
+ #>>>2 byte&0xF0 0x50 \b, 160 kbps
684
+ #>>>2 byte&0xF0 0x60 \b, 192 kbps
685
+ #>>>2 byte&0xF0 0x70 \b, 224 kbps
686
+ #>>>2 byte&0xF0 0x80 \b, 256 kbps
687
+ #>>>2 byte&0xF0 0x90 \b, 288 kbps
688
+ #>>>2 byte&0xF0 0xA0 \b, 320 kbps
689
+ #>>>2 byte&0xF0 0xB0 \b, 352 kbps
690
+ #>>>2 byte&0xF0 0xC0 \b, 384 kbps
691
+ #>>>2 byte&0xF0 0xD0 \b, 416 kbps
692
+ #>>>2 byte&0xF0 0xE0 \b, 448 kbps
693
+ ## timing
694
+ #>>>2 byte&0x0C 0x00 \b, 44.1 kHz
695
+ #>>>2 byte&0x0C 0x04 \b, 48 kHz
696
+ #>>>2 byte&0x0C 0x08 \b, 32 kHz
697
+ ## channels/options
698
+ #>>>3 byte&0xC0 0x00 \b, Stereo
699
+ #>>>3 byte&0xC0 0x40 \b, JntStereo
700
+ #>>>3 byte&0xC0 0x80 \b, 2x Monaural
701
+ #>>>3 byte&0xC0 0xC0 \b, Monaural
702
+ ##>1 byte ^0x01 \b, Data Verify
703
+ ##>2 byte &0x02 \b, Packet Pad
704
+ ##>2 byte &0x01 \b, Custom Flag
705
+ ##>3 byte &0x08 \b, Copyrighted
706
+ ##>3 byte &0x04 \b, Original Source
707
+ ##>3 byte&0x03 1 \b, NR: 50/15 ms
708
+ ##>3 byte&0x03 3 \b, NR: CCIT J.17
709
+
710
+ # MP3, M2A
711
+ 0 beshort&0xFFFE 0xFFF2 MPEG ADTS, layer III, v2
712
+ !:mime audio/mpeg
713
+ # rate
714
+ >2 byte&0xF0 0x10 \b, 8 kbps
715
+ >2 byte&0xF0 0x20 \b, 16 kbps
716
+ >2 byte&0xF0 0x30 \b, 24 kbps
717
+ >2 byte&0xF0 0x40 \b, 32 kbps
718
+ >2 byte&0xF0 0x50 \b, 40 kbps
719
+ >2 byte&0xF0 0x60 \b, 48 kbps
720
+ >2 byte&0xF0 0x70 \b, 56 kbps
721
+ >2 byte&0xF0 0x80 \b, 64 kbps
722
+ >2 byte&0xF0 0x90 \b, 80 kbps
723
+ >2 byte&0xF0 0xA0 \b, 96 kbps
724
+ >2 byte&0xF0 0xB0 \b, 112 kbps
725
+ >2 byte&0xF0 0xC0 \b, 128 kbps
726
+ >2 byte&0xF0 0xD0 \b, 144 kbps
727
+ >2 byte&0xF0 0xE0 \b, 160 kbps
728
+ # timing
729
+ >2 byte&0x0C 0x00 \b, 22.05 kHz
730
+ >2 byte&0x0C 0x04 \b, 24 kHz
731
+ >2 byte&0x0C 0x08 \b, 16 kHz
732
+ # channels/options
733
+ >3 byte&0xC0 0x00 \b, Stereo
734
+ >3 byte&0xC0 0x40 \b, JntStereo
735
+ >3 byte&0xC0 0x80 \b, 2x Monaural
736
+ >3 byte&0xC0 0xC0 \b, Monaural
737
+ #>1 byte ^0x01 \b, Data Verify
738
+ #>2 byte &0x02 \b, Packet Pad
739
+ #>2 byte &0x01 \b, Custom Flag
740
+ #>3 byte &0x08 \b, Copyrighted
741
+ #>3 byte &0x04 \b, Original Source
742
+ #>3 byte&0x03 1 \b, NR: 50/15 ms
743
+ #>3 byte&0x03 3 \b, NR: CCIT J.17
744
+
745
+ # MP2, M2A
746
+ 0 beshort&0xFFFE 0xFFF4 MPEG ADTS, layer II, v2
747
+ # rate
748
+ >2 byte&0xF0 0x10 \b, 8 kbps
749
+ >2 byte&0xF0 0x20 \b, 16 kbps
750
+ >2 byte&0xF0 0x30 \b, 24 kbps
751
+ >2 byte&0xF0 0x40 \b, 32 kbps
752
+ >2 byte&0xF0 0x50 \b, 40 kbps
753
+ >2 byte&0xF0 0x60 \b, 48 kbps
754
+ >2 byte&0xF0 0x70 \b, 56 kbps
755
+ >2 byte&0xF0 0x80 \b, 64 kbps
756
+ >2 byte&0xF0 0x90 \b, 80 kbps
757
+ >2 byte&0xF0 0xA0 \b, 96 kbps
758
+ >2 byte&0xF0 0xB0 \b, 112 kbps
759
+ >2 byte&0xF0 0xC0 \b, 128 kbps
760
+ >2 byte&0xF0 0xD0 \b, 144 kbps
761
+ >2 byte&0xF0 0xE0 \b, 160 kbps
762
+ # timing
763
+ >2 byte&0x0C 0x00 \b, 22.05 kHz
764
+ >2 byte&0x0C 0x04 \b, 24 kHz
765
+ >2 byte&0x0C 0x08 \b, 16 kHz
766
+ # channels/options
767
+ >3 byte&0xC0 0x00 \b, Stereo
768
+ >3 byte&0xC0 0x40 \b, JntStereo
769
+ >3 byte&0xC0 0x80 \b, 2x Monaural
770
+ >3 byte&0xC0 0xC0 \b, Monaural
771
+ #>1 byte ^0x01 \b, Data Verify
772
+ #>2 byte &0x02 \b, Packet Pad
773
+ #>2 byte &0x01 \b, Custom Flag
774
+ #>3 byte &0x08 \b, Copyrighted
775
+ #>3 byte &0x04 \b, Original Source
776
+ #>3 byte&0x03 1 \b, NR: 50/15 ms
777
+ #>3 byte&0x03 3 \b, NR: CCIT J.17
778
+
779
+ # MPA, M2A
780
+ 0 beshort&0xFFFE 0xFFF6 MPEG ADTS, layer I, v2
781
+ # rate
782
+ >2 byte&0xF0 0x10 \b, 32 kbps
783
+ >2 byte&0xF0 0x20 \b, 48 kbps
784
+ >2 byte&0xF0 0x30 \b, 56 kbps
785
+ >2 byte&0xF0 0x40 \b, 64 kbps
786
+ >2 byte&0xF0 0x50 \b, 80 kbps
787
+ >2 byte&0xF0 0x60 \b, 96 kbps
788
+ >2 byte&0xF0 0x70 \b, 112 kbps
789
+ >2 byte&0xF0 0x80 \b, 128 kbps
790
+ >2 byte&0xF0 0x90 \b, 144 kbps
791
+ >2 byte&0xF0 0xA0 \b, 160 kbps
792
+ >2 byte&0xF0 0xB0 \b, 176 kbps
793
+ >2 byte&0xF0 0xC0 \b, 192 kbps
794
+ >2 byte&0xF0 0xD0 \b, 224 kbps
795
+ >2 byte&0xF0 0xE0 \b, 256 kbps
796
+ # timing
797
+ >2 byte&0x0C 0x00 \b, 22.05 kHz
798
+ >2 byte&0x0C 0x04 \b, 24 kHz
799
+ >2 byte&0x0C 0x08 \b, 16 kHz
800
+ # channels/options
801
+ >3 byte&0xC0 0x00 \b, Stereo
802
+ >3 byte&0xC0 0x40 \b, JntStereo
803
+ >3 byte&0xC0 0x80 \b, 2x Monaural
804
+ >3 byte&0xC0 0xC0 \b, Monaural
805
+ #>1 byte ^0x01 \b, Data Verify
806
+ #>2 byte &0x02 \b, Packet Pad
807
+ #>2 byte &0x01 \b, Custom Flag
808
+ #>3 byte &0x08 \b, Copyrighted
809
+ #>3 byte &0x04 \b, Original Source
810
+ #>3 byte&0x03 1 \b, NR: 50/15 ms
811
+ #>3 byte&0x03 3 \b, NR: CCIT J.17
812
+
813
+ # MP3, M25A
814
+ 0 beshort&0xFFFE 0xFFE2 MPEG ADTS, layer III, v2.5
815
+ # rate
816
+ >2 byte&0xF0 0x10 \b, 8 kbps
817
+ >2 byte&0xF0 0x20 \b, 16 kbps
818
+ >2 byte&0xF0 0x30 \b, 24 kbps
819
+ >2 byte&0xF0 0x40 \b, 32 kbps
820
+ >2 byte&0xF0 0x50 \b, 40 kbps
821
+ >2 byte&0xF0 0x60 \b, 48 kbps
822
+ >2 byte&0xF0 0x70 \b, 56 kbps
823
+ >2 byte&0xF0 0x80 \b, 64 kbps
824
+ >2 byte&0xF0 0x90 \b, 80 kbps
825
+ >2 byte&0xF0 0xA0 \b, 96 kbps
826
+ >2 byte&0xF0 0xB0 \b, 112 kbps
827
+ >2 byte&0xF0 0xC0 \b, 128 kbps
828
+ >2 byte&0xF0 0xD0 \b, 144 kbps
829
+ >2 byte&0xF0 0xE0 \b, 160 kbps
830
+ # timing
831
+ >2 byte&0x0C 0x00 \b, 11.025 kHz
832
+ >2 byte&0x0C 0x04 \b, 12 kHz
833
+ >2 byte&0x0C 0x08 \b, 8 kHz
834
+ # channels/options
835
+ >3 byte&0xC0 0x00 \b, Stereo
836
+ >3 byte&0xC0 0x40 \b, JntStereo
837
+ >3 byte&0xC0 0x80 \b, 2x Monaural
838
+ >3 byte&0xC0 0xC0 \b, Monaural
839
+ #>1 byte ^0x01 \b, Data Verify
840
+ #>2 byte &0x02 \b, Packet Pad
841
+ #>2 byte &0x01 \b, Custom Flag
842
+ #>3 byte &0x08 \b, Copyrighted
843
+ #>3 byte &0x04 \b, Original Source
844
+ #>3 byte&0x03 1 \b, NR: 50/15 ms
845
+ #>3 byte&0x03 3 \b, NR: CCIT J.17
846
+
847
+ # AAC (aka MPEG-2 NBC audio) and MPEG-4 audio
848
+
849
+ # Stored AAC streams (instead of the MP4 format)
850
+ 0 string ADIF MPEG ADIF, AAC
851
+ !:mime audio/x-hx-aac-adif
852
+ >4 byte &0x80
853
+ >>13 byte &0x10 \b, VBR
854
+ >>13 byte ^0x10 \b, CBR
855
+ >>16 byte&0x1E 0x02 \b, single stream
856
+ >>16 byte&0x1E 0x04 \b, 2 streams
857
+ >>16 byte&0x1E 0x06 \b, 3 streams
858
+ >>16 byte &0x08 \b, 4 or more streams
859
+ >>16 byte &0x10 \b, 8 or more streams
860
+ >>4 byte &0x80 \b, Copyrighted
861
+ >>13 byte &0x40 \b, Original Source
862
+ >>13 byte &0x20 \b, Home Flag
863
+ >4 byte ^0x80
864
+ >>4 byte &0x10 \b, VBR
865
+ >>4 byte ^0x10 \b, CBR
866
+ >>7 byte&0x1E 0x02 \b, single stream
867
+ >>7 byte&0x1E 0x04 \b, 2 streams
868
+ >>7 byte&0x1E 0x06 \b, 3 streams
869
+ >>7 byte &0x08 \b, 4 or more streams
870
+ >>7 byte &0x10 \b, 8 or more streams
871
+ >>4 byte &0x40 \b, Original Stream(s)
872
+ >>4 byte &0x20 \b, Home Source
873
+
874
+ # Live or stored single AAC stream (used with MPEG-2 systems)
875
+ 0 beshort&0xFFF6 0xFFF0 MPEG ADTS, AAC
876
+ !:mime audio/x-hx-aac-adts
877
+ >1 byte &0x08 \b, v2
878
+ >1 byte ^0x08 \b, v4
879
+ # profile
880
+ >>2 byte &0xC0 \b LTP
881
+ >2 byte&0xc0 0x00 \b Main
882
+ >2 byte&0xc0 0x40 \b LC
883
+ >2 byte&0xc0 0x80 \b SSR
884
+ # timing
885
+ >2 byte&0x3c 0x00 \b, 96 kHz
886
+ >2 byte&0x3c 0x04 \b, 88.2 kHz
887
+ >2 byte&0x3c 0x08 \b, 64 kHz
888
+ >2 byte&0x3c 0x0c \b, 48 kHz
889
+ >2 byte&0x3c 0x10 \b, 44.1 kHz
890
+ >2 byte&0x3c 0x14 \b, 32 kHz
891
+ >2 byte&0x3c 0x18 \b, 24 kHz
892
+ >2 byte&0x3c 0x1c \b, 22.05 kHz
893
+ >2 byte&0x3c 0x20 \b, 16 kHz
894
+ >2 byte&0x3c 0x24 \b, 12 kHz
895
+ >2 byte&0x3c 0x28 \b, 11.025 kHz
896
+ >2 byte&0x3c 0x2c \b, 8 kHz
897
+ # channels
898
+ >2 beshort&0x01c0 0x0040 \b, monaural
899
+ >2 beshort&0x01c0 0x0080 \b, stereo
900
+ >2 beshort&0x01c0 0x00c0 \b, stereo + center
901
+ >2 beshort&0x01c0 0x0100 \b, stereo+center+LFE
902
+ >2 beshort&0x01c0 0x0140 \b, surround
903
+ >2 beshort&0x01c0 0x0180 \b, surround + LFE
904
+ >2 beshort &0x01C0 \b, surround + side
905
+ #>1 byte ^0x01 \b, Data Verify
906
+ #>2 byte &0x02 \b, Custom Flag
907
+ #>3 byte &0x20 \b, Original Stream
908
+ #>3 byte &0x10 \b, Home Source
909
+ #>3 byte &0x08 \b, Copyrighted
910
+
911
+ # Live MPEG-4 audio streams (instead of RTP FlexMux)
912
+ 0 beshort&0xFFE0 0x56E0 MPEG-4 LOAS
913
+ !:mime audio/x-mp4a-latm
914
+ #>1 beshort&0x1FFF x \b, %u byte packet
915
+ >3 byte&0xE0 0x40
916
+ >>4 byte&0x3C 0x04 \b, single stream
917
+ >>4 byte&0x3C 0x08 \b, 2 streams
918
+ >>4 byte&0x3C 0x0C \b, 3 streams
919
+ >>4 byte &0x08 \b, 4 or more streams
920
+ >>4 byte &0x20 \b, 8 or more streams
921
+ >3 byte&0xC0 0
922
+ >>4 byte&0x78 0x08 \b, single stream
923
+ >>4 byte&0x78 0x10 \b, 2 streams
924
+ >>4 byte&0x78 0x18 \b, 3 streams
925
+ >>4 byte &0x20 \b, 4 or more streams
926
+ >>4 byte &0x40 \b, 8 or more streams
927
+ # This magic isn't strong enough (matches plausible ISO-8859-1 text)
928
+ #0 beshort 0x4DE1 MPEG-4 LO-EP audio stream
929
+ #!:mime audio/x-mp4a-latm
930
+
931
+ # Summary: FLI animation format
932
+ # Created by: Daniel Quinlan <quinlan@yggdrasil.com>
933
+ # Modified by (1): Abel Cheung <abelcheung@gmail.com> (avoid over-generic detection)
934
+ 4 leshort 0xAF11
935
+ # standard FLI always has 320x200 resolution and 8 bit color
936
+ >8 leshort 320
937
+ >>10 leshort 200
938
+ >>>12 leshort 8 FLI animation, 320x200x8
939
+ !:mime video/x-fli
940
+ >>>>6 leshort x \b, %d frames
941
+ # frame speed is multiple of 1/70s
942
+ >>>>16 leshort x \b, %d/70s per frame
943
+
944
+ # Summary: FLC animation format
945
+ # Created by: Daniel Quinlan <quinlan@yggdrasil.com>
946
+ # Modified by (1): Abel Cheung <abelcheung@gmail.com> (avoid over-generic detection)
947
+ 4 leshort 0xAF12
948
+ # standard FLC always use 8 bit color
949
+ >12 leshort 8 FLC animation
950
+ !:mime video/x-flc
951
+ >>8 leshort x \b, %d
952
+ >>10 leshort x \bx%dx8
953
+ >>6 uleshort x \b, %d frames
954
+ >>16 uleshort x \b, %dms per frame
955
+
956
+ # DL animation format
957
+ # XXX - collision with most `mips' magic
958
+ #
959
+ # I couldn't find a real magic number for these, however, this
960
+ # -appears- to work. Note that it might catch other files, too, so be
961
+ # careful!
962
+ #
963
+ # Note that title and author appear in the two 20-byte chunks
964
+ # at decimal offsets 2 and 22, respectively, but they are XOR'ed with
965
+ # 255 (hex FF)! The DL format is really bad.
966
+ #
967
+ #0 byte 1 DL version 1, medium format (160x100, 4 images/screen)
968
+ #!:mime video/x-unknown
969
+ #>42 byte x - %d screens,
970
+ #>43 byte x %d commands
971
+ #0 byte 2 DL version 2
972
+ #!:mime video/x-unknown
973
+ #>1 byte 1 - large format (320x200,1 image/screen),
974
+ #>1 byte 2 - medium format (160x100,4 images/screen),
975
+ #>1 byte >2 - unknown format,
976
+ #>42 byte x %d screens,
977
+ #>43 byte x %d commands
978
+ # Based on empirical evidence, DL version 3 have several nulls following the
979
+ # \003. Most of them start with non-null values at hex offset 0x34 or so.
980
+ #0 string \3\0\0\0\0\0\0\0\0\0\0\0 DL version 3
981
+
982
+ # iso 13818 transport stream
983
+ #
984
+ # from Oskar Schirmer <schirmer@scara.com> Feb 3, 2001 (ISO 13818.1)
985
+ # (the following is a little bit restrictive and works fine for a stream
986
+ # that starts with PAT properly. it won't work for stream data, that is
987
+ # cut from an input device data right in the middle, but this shouldn't
988
+ # disturb)
989
+ # syncbyte 8 bit 0x47
990
+ # error_ind 1 bit -
991
+ # payload_start 1 bit 1
992
+ # priority 1 bit -
993
+ # PID 13 bit 0x0000
994
+ # scrambling 2 bit -
995
+ # adaptfld_ctrl 2 bit 1 or 3
996
+ # conti_count 4 bit 0
997
+ 0 belong&0xFF5FFF1F 0x47400010 MPEG transport stream data
998
+ >188 byte !0x47 CORRUPTED
999
+
1000
+ # DIF digital video file format <mpruett@sgi.com>
1001
+ 0 belong&0xffffff00 0x1f070000 DIF
1002
+ >4 byte &0x01 (DVCPRO) movie file
1003
+ >4 byte ^0x01 (DV) movie file
1004
+ >3 byte &0x80 (PAL)
1005
+ >3 byte ^0x80 (NTSC)
1006
+
1007
+ # Microsoft Advanced Streaming Format (ASF) <mpruett@sgi.com>
1008
+ 0 belong 0x3026b275 Microsoft ASF
1009
+ !:mime video/x-ms-asf
1010
+
1011
+ # MNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>
1012
+ 0 string \x8aMNG MNG video data,
1013
+ !:mime video/x-mng
1014
+ >4 belong !0x0d0a1a0a CORRUPTED,
1015
+ >4 belong 0x0d0a1a0a
1016
+ >>16 belong x %ld x
1017
+ >>20 belong x %ld
1018
+
1019
+ # JNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>
1020
+ 0 string \x8bJNG JNG video data,
1021
+ !:mime video/x-jng
1022
+ >4 belong !0x0d0a1a0a CORRUPTED,
1023
+ >4 belong 0x0d0a1a0a
1024
+ >>16 belong x %ld x
1025
+ >>20 belong x %ld
1026
+
1027
+ # Vivo video (Wolfram Kleff)
1028
+ 3 string \x0D\x0AVersion:Vivo Vivo video data
1029
+
1030
+ # VRML (Virtual Reality Modelling Language)
1031
+ 0 string/b #VRML\ V1.0\ ascii VRML 1 file
1032
+ !:mime model/vrml
1033
+ 0 string/b #VRML\ V2.0\ utf8 ISO/IEC 14772 VRML 97 file
1034
+ !:mime model/vrml
1035
+
1036
+ # X3D (Extensible 3D) [http://www.web3d.org/specifications/x3d-3.0.dtd]
1037
+ # From Michel Briand <michelbriand@free.fr>
1038
+ 0 string \<?xml\ version="
1039
+ !:strength +1
1040
+ >20 search/1000/cb \<!DOCTYPE\ X3D X3D (Extensible 3D) model xml text
1041
+ !:mime model/x3d
1042
+
1043
+ #---------------------------------------------------------------------------
1044
+ # HVQM4: compressed movie format designed by Hudson for Nintendo GameCube
1045
+ # From Mark Sheppard <msheppard@climax.co.uk>, 2002-10-03
1046
+ #
1047
+ 0 string HVQM4 %s
1048
+ >6 string >\0 v%s
1049
+ >0 byte x GameCube movie,
1050
+ >0x34 ubeshort x %d x
1051
+ >0x36 ubeshort x %d,
1052
+ >0x26 ubeshort x %dµs,
1053
+ >0x42 ubeshort 0 no audio
1054
+ >0x42 ubeshort >0 %dHz audio
1055
+
1056
+ # From: "Stefan A. Haubenthal" <polluks@web.de>
1057
+ 0 string DVDVIDEO-VTS Video title set,
1058
+ >0x21 byte x v%x
1059
+ 0 string DVDVIDEO-VMG Video manager,
1060
+ >0x21 byte x v%x
1061
+
1062
+ # From: Behan Webster <behanw@websterwood.com>
1063
+ # NuppelVideo used by Mythtv (*.nuv)
1064
+ # Note: there are two identical stanzas here differing only in the
1065
+ # initial string matched. It used to be done with a regex, but we're
1066
+ # trying to get rid of those.
1067
+ 0 string NuppelVideo MythTV NuppelVideo
1068
+ >12 string x v%s
1069
+ >20 lelong x (%d
1070
+ >24 lelong x \bx%d),
1071
+ >36 string P \bprogressive,
1072
+ >36 string I \binterlaced,
1073
+ >40 ledouble x \baspect:%.2f,
1074
+ >48 ledouble x \bfps:%.2f
1075
+ 0 string MythTV MythTV NuppelVideo
1076
+ >12 string x v%s
1077
+ >20 lelong x (%d
1078
+ >24 lelong x \bx%d),
1079
+ >36 string P \bprogressive,
1080
+ >36 string I \binterlaced,
1081
+ >40 ledouble x \baspect:%.2f,
1082
+ >48 ledouble x \bfps:%.2f
1083
+
1084
+ # MPEG file
1085
+ # MPEG sequences
1086
+ # FIXME: This section is from the old magic.mime file and needs integrating with the rest
1087
+ 0 belong 0x000001BA
1088
+ >4 byte &0x40
1089
+ !:mime video/mp2p
1090
+ >4 byte ^0x40
1091
+ !:mime video/mpeg
1092
+ 0 belong 0x000001BB
1093
+ !:mime video/mpeg
1094
+ 0 belong 0x000001B0
1095
+ !:mime video/mp4v-es
1096
+ 0 belong 0x000001B5
1097
+ !:mime video/mp4v-es
1098
+ 0 belong 0x000001B3
1099
+ !:mime video/mpv
1100
+ 0 belong&0xFF5FFF1F 0x47400010
1101
+ !:mime video/mp2t
1102
+ 0 belong 0x00000001
1103
+ >4 byte&0x1F 0x07
1104
+ !:mime video/h264
1105
+
1106
+ # Type: Bink Video
1107
+ # URL: http://wiki.multimedia.cx/index.php?title=3DBink_Container
1108
+ # From: <hoehle@users.sourceforge.net> 2008-07-18
1109
+ 0 string BIK Bink Video
1110
+ >3 regex =[a-z] rev.%s
1111
+ #>4 ulelong x size %d
1112
+ >20 ulelong x \b, %d
1113
+ >24 ulelong x \bx%d
1114
+ >8 ulelong x \b, %d frames
1115
+ >32 ulelong x at rate %d/
1116
+ >28 ulelong >1 \b%d
1117
+ >40 ulelong =0 \b, no audio
1118
+ >40 ulelong !0 \b, %d audio track
1119
+ >>40 ulelong !1 \bs
1120
+ # follow properties of the first audio track only
1121
+ >>48 uleshort x %dHz
1122
+ >>51 byte&0x20 0 mono
1123
+ >>51 byte&0x20 !0 stereo
1124
+ #>>51 byte&0x10 0 FFT
1125
+ #>>51 byte&0x10 !0 DCT
1126
+
1127
+ #------------------------------------------------------------------------------
1128
+ # apl: file(1) magic for APL (see also "pdp" and "vax" for other APL
1129
+ # workspaces)
1130
+ #
1131
+ 0 long 0100554 APL workspace (Ken's original?)
1132
+ #------------------------------------------------------------------------------
1133
+ # apple: file(1) magic for Apple file formats
1134
+ #
1135
+ 0 search/1 FiLeStArTfIlEsTaRt binscii (apple ][) text
1136
+ 0 string \x0aGL Binary II (apple ][) data
1137
+ 0 string \x76\xff Squeezed (apple ][) data
1138
+ 0 string NuFile NuFile archive (apple ][) data
1139
+ 0 string N\xf5F\xe9l\xe5 NuFile archive (apple ][) data
1140
+ 0 belong 0x00051600 AppleSingle encoded Macintosh file
1141
+ 0 belong 0x00051607 AppleDouble encoded Macintosh file
1142
+
1143
+ # Type: Apple Emulator 2IMG format
1144
+ # From: Radek Vokal <rvokal@redhat.com>
1145
+ 0 string 2IMG Apple ][ 2IMG Disk Image
1146
+ >4 string XGS! \b, XGS
1147
+ >4 string CTKG \b, Catakig
1148
+ >4 string ShIm \b, Sheppy's ImageMaker
1149
+ >4 string WOOF \b, Sweet 16
1150
+ >4 string B2TR \b, Bernie ][ the Rescue
1151
+ >4 string !nfc \b, ASIMOV2
1152
+ >4 string x \b, Unknown Format
1153
+ >0xc byte 00 \b, DOS 3.3 sector order
1154
+ >>0x10 byte 00 \b, Volume 254
1155
+ >>0x10 byte&0x7f x \b, Volume %u
1156
+ >0xc byte 01 \b, ProDOS sector order
1157
+ >>0x14 short x \b, %u Blocks
1158
+ >0xc byte 02 \b, NIB data
1159
+
1160
+ # magic for Newton PDA package formats
1161
+ # from Ruda Moura <ruda@helllabs.org>
1162
+ 0 string package0 Newton package, NOS 1.x,
1163
+ >12 belong &0x80000000 AutoRemove,
1164
+ >12 belong &0x40000000 CopyProtect,
1165
+ >12 belong &0x10000000 NoCompression,
1166
+ >12 belong &0x04000000 Relocation,
1167
+ >12 belong &0x02000000 UseFasterCompression,
1168
+ >16 belong x version %d
1169
+
1170
+ 0 string package1 Newton package, NOS 2.x,
1171
+ >12 belong &0x80000000 AutoRemove,
1172
+ >12 belong &0x40000000 CopyProtect,
1173
+ >12 belong &0x10000000 NoCompression,
1174
+ >12 belong &0x04000000 Relocation,
1175
+ >12 belong &0x02000000 UseFasterCompression,
1176
+ >16 belong x version %d
1177
+
1178
+ 0 string package4 Newton package,
1179
+ >8 byte 8 NOS 1.x,
1180
+ >8 byte 9 NOS 2.x,
1181
+ >12 belong &0x80000000 AutoRemove,
1182
+ >12 belong &0x40000000 CopyProtect,
1183
+ >12 belong &0x10000000 NoCompression,
1184
+
1185
+ # The following entries for the Apple II are for files that have
1186
+ # been transferred as raw binary data from an Apple, without having
1187
+ # been encapsulated by any of the above archivers.
1188
+ #
1189
+ # In general, Apple II formats are hard to identify because Apple DOS
1190
+ # and especially Apple ProDOS have strong typing in the file system and
1191
+ # therefore programmers never felt much need to include type information
1192
+ # in the files themselves.
1193
+ #
1194
+ # Eric Fischer <enf@pobox.com>
1195
+
1196
+ # AppleWorks word processor:
1197
+ #
1198
+ # This matches the standard tab stops for an AppleWorks file, but if
1199
+ # a file has a tab stop set in the first four columns this will fail.
1200
+ #
1201
+ # The "O" is really the magic number, but that's so common that it's
1202
+ # necessary to check the tab stops that follow it to avoid false positives.
1203
+
1204
+ 4 string O==== AppleWorks word processor data
1205
+ >85 byte&0x01 >0 \b, zoomed
1206
+ >90 byte&0x01 >0 \b, paginated
1207
+ >92 byte&0x01 >0 \b, with mail merge
1208
+ #>91 byte x \b, left margin %d
1209
+
1210
+ # AppleWorks database:
1211
+ #
1212
+ # This isn't really a magic number, but it's the closest thing to one
1213
+ # that I could find. The 1 and 2 really mean "order in which you defined
1214
+ # categories" and "left to right, top to bottom," respectively; the D and R
1215
+ # mean that the cursor should move either down or right when you press Return.
1216
+
1217
+ #30 string \x01D AppleWorks database data
1218
+ #30 string \x02D AppleWorks database data
1219
+ #30 string \x01R AppleWorks database data
1220
+ #30 string \x02R AppleWorks database data
1221
+
1222
+ # AppleWorks spreadsheet:
1223
+ #
1224
+ # Likewise, this isn't really meant as a magic number. The R or C means
1225
+ # row- or column-order recalculation; the A or M means automatic or manual
1226
+ # recalculation.
1227
+
1228
+ #131 string RA AppleWorks spreadsheet data
1229
+ #131 string RM AppleWorks spreadsheet data
1230
+ #131 string CA AppleWorks spreadsheet data
1231
+ #131 string CM AppleWorks spreadsheet data
1232
+
1233
+ # Applesoft BASIC:
1234
+ #
1235
+ # This is incredibly sloppy, but will be true if the program was
1236
+ # written at its usual memory location of 2048 and its first line
1237
+ # number is less than 256. Yuck.
1238
+
1239
+ 0 belong&0xff00ff 0x80000 Applesoft BASIC program data
1240
+ #>2 leshort x \b, first line number %d
1241
+
1242
+ # ORCA/EZ assembler:
1243
+ #
1244
+ # This will not identify ORCA/M source files, since those have
1245
+ # some sort of date code instead of the two zero bytes at 6 and 7
1246
+ # XXX Conflicts with ELF
1247
+ #4 belong&0xff00ffff 0x01000000 ORCA/EZ assembler source data
1248
+ #>5 byte x \b, build number %d
1249
+
1250
+ # Broderbund Fantavision
1251
+ #
1252
+ # I don't know what these values really mean, but they seem to recur.
1253
+ # Will they cause too many conflicts?
1254
+
1255
+ # Probably :-)
1256
+ #2 belong&0xFF00FF 0x040008 Fantavision movie data
1257
+
1258
+ # Some attempts at images.
1259
+ #
1260
+ # These are actually just bit-for-bit dumps of the frame buffer, so
1261
+ # there's really no reasonably way to distinguish them except for their
1262
+ # address (if preserved) -- 8192 or 16384 -- and their length -- 8192
1263
+ # or, occasionally, 8184.
1264
+ #
1265
+ # Nevertheless this will manage to catch a lot of images that happen
1266
+ # to have a solid-colored line at the bottom of the screen.
1267
+
1268
+ # GRR: Magic too weak
1269
+ #8144 string \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F Apple II image with white background
1270
+ #8144 string \x55\x2A\x55\x2A\x55\x2A\x55\x2A Apple II image with purple background
1271
+ #8144 string \x2A\x55\x2A\x55\x2A\x55\x2A\x55 Apple II image with green background
1272
+ #8144 string \xD5\xAA\xD5\xAA\xD5\xAA\xD5\xAA Apple II image with blue background
1273
+ #8144 string \xAA\xD5\xAA\xD5\xAA\xD5\xAA\xD5 Apple II image with orange background
1274
+
1275
+ # Beagle Bros. Apple Mechanic fonts
1276
+
1277
+ 0 belong&0xFF00FFFF 0x6400D000 Apple Mechanic font
1278
+
1279
+ # Apple Universal Disk Image Format (UDIF) - dmg files.
1280
+ # From Johan Gade.
1281
+ # These entries are disabled for now until we fix the following issues.
1282
+ #
1283
+ # Note there might be some problems with the "VAX COFF executable"
1284
+ # entry. Note this entry should be placed before the mac filesystem section,
1285
+ # particularly the "Apple Partition data" entry.
1286
+ #
1287
+ # The intended meaning of these tests is, that the file is only of the
1288
+ # specified type if both of the lines are correct - i.e. if the first
1289
+ # line matches and the second doesn't then it is not of that type.
1290
+ #
1291
+ #0 long 0x7801730d
1292
+ #>4 long 0x62626060 UDIF read-only zlib-compressed image (UDZO)
1293
+ #
1294
+ # Note that this entry is recognized correctly by the "Apple Partition
1295
+ # data" entry - however since this entry is more specific - this
1296
+ # information seems to be more useful.
1297
+ #0 long 0x45520200
1298
+ #>0x410 string disk\ image UDIF read/write image (UDRW)
1299
+
1300
+ # From: Toby Peterson <toby@apple.com>
1301
+ 0 string bplist00 Apple binary property list
1302
+
1303
+ # Apple binary property list (bplist)
1304
+ # Assumes version bytes are hex.
1305
+ # Provides content hints for version 0 files. Assumes that the root
1306
+ # object is the first object (true for CoreFoundation implementation).
1307
+ # From: David Remahl <dremahl@apple.com>
1308
+ 0 string bplist
1309
+ >6 byte x \bCoreFoundation binary property list data, version 0x%c
1310
+ >>7 byte x \b%c
1311
+ >6 string 00 \b
1312
+ >>8 byte&0xF0 0x00 \b
1313
+ >>>8 byte&0x0F 0x00 \b, root type: null
1314
+ >>>8 byte&0x0F 0x08 \b, root type: false boolean
1315
+ >>>8 byte&0x0F 0x09 \b, root type: true boolean
1316
+ >>8 byte&0xF0 0x10 \b, root type: integer
1317
+ >>8 byte&0xF0 0x20 \b, root type: real
1318
+ >>8 byte&0xF0 0x30 \b, root type: date
1319
+ >>8 byte&0xF0 0x40 \b, root type: data
1320
+ >>8 byte&0xF0 0x50 \b, root type: ascii string
1321
+ >>8 byte&0xF0 0x60 \b, root type: unicode string
1322
+ >>8 byte&0xF0 0x80 \b, root type: uid (CORRUPT)
1323
+ >>8 byte&0xF0 0xa0 \b, root type: array
1324
+ >>8 byte&0xF0 0xd0 \b, root type: dictionary
1325
+
1326
+ # Apple/NeXT typedstream data
1327
+ # Serialization format used by NeXT and Apple for various
1328
+ # purposes in YellowStep/Cocoa, including some nib files.
1329
+ # From: David Remahl <dremahl@apple.com>
1330
+ 2 string typedstream NeXT/Apple typedstream data, big endian
1331
+ >0 byte x \b, version %hhd
1332
+ >0 byte <5 \b
1333
+ >>13 byte 0x81 \b
1334
+ >>>14 ubeshort x \b, system %hd
1335
+ 2 string streamtyped NeXT/Apple typedstream data, little endian
1336
+ >0 byte x \b, version %hhd
1337
+ >0 byte <5 \b
1338
+ >>13 byte 0x81 \b
1339
+ >>>14 uleshort x \b, system %hd
1340
+
1341
+ #------------------------------------------------------------------------------
1342
+ # CAF: Apple CoreAudio File Format
1343
+ #
1344
+ # Container format for high-end audio purposes.
1345
+ # From: David Remahl <dremahl@apple.com>
1346
+ #
1347
+ 0 string caff CoreAudio Format audio file
1348
+ >4 beshort <10 version %d
1349
+ >6 beshort x
1350
+
1351
+
1352
+ #------------------------------------------------------------------------------
1353
+ # Keychain database files
1354
+ 0 string kych Mac OS X Keychain File
1355
+
1356
+ #------------------------------------------------------------------------------
1357
+ # Code Signing related file types
1358
+ 0 belong 0xfade0c00 Mac OS X Code Requirement
1359
+ >8 belong 1 (opExpr)
1360
+ >4 belong x - %d bytes
1361
+
1362
+ 0 belong 0xfade0c01 Mac OS X Code Requirement Set
1363
+ >8 belong >1 containing %d items
1364
+ >4 belong x - %d bytes
1365
+
1366
+ 0 belong 0xfade0c02 Mac OS X Code Directory
1367
+ >8 belong x version %x
1368
+ >12 belong >0 flags 0x%x
1369
+ >4 belong x - %d bytes
1370
+
1371
+ 0 belong 0xfade0cc0 Mac OS X Detached Code Signature (non-executable)
1372
+ >4 belong x - %d bytes
1373
+
1374
+ 0 belong 0xfade0cc1 Mac OS X Detached Code Signature
1375
+ >8 belong >1 (%d elements)
1376
+ >4 belong x - %d bytes
1377
+
1378
+ # From: "Nelson A. de Oliveira" <naoliv@gmail.com>
1379
+ # .vdi
1380
+ 4 string innotek\ VirtualBox\ Disk\ Image %s
1381
+
1382
+ #------------------------------------------------------------------------------
1383
+ # applix: file(1) magic for Applixware
1384
+ # From: Peter Soos <sp@osb.hu>
1385
+ #
1386
+ 0 string *BEGIN Applixware
1387
+ >7 string WORDS Words Document
1388
+ >7 string GRAPHICS Graphic
1389
+ >7 string RASTER Bitmap
1390
+ >7 string SPREADSHEETS Spreadsheet
1391
+ >7 string MACRO Macro
1392
+ >7 string BUILDER Builder Object
1393
+ #------------------------------------------------------------------------------
1394
+ # archive: file(1) magic for archive formats (see also "msdos" for self-
1395
+ # extracting compressed archives)
1396
+ #
1397
+ # cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc.
1398
+ # pre-POSIX "tar" archives are handled in the C code.
1399
+
1400
+ # POSIX tar archives
1401
+ 257 string ustar\0 POSIX tar archive
1402
+ !:mime application/x-tar # encoding: posix
1403
+ 257 string ustar\040\040\0 GNU tar archive
1404
+ !:mime application/x-tar # encoding: gnu
1405
+
1406
+ # cpio archives
1407
+ #
1408
+ # Yes, the top two "cpio archive" formats *are* supposed to just be "short".
1409
+ # The idea is to indicate archives produced on machines with the same
1410
+ # byte order as the machine running "file" with "cpio archive", and
1411
+ # to indicate archives produced on machines with the opposite byte order
1412
+ # from the machine running "file" with "byte-swapped cpio archive".
1413
+ #
1414
+ # The SVR4 "cpio(4)" hints that there are additional formats, but they
1415
+ # are defined as "short"s; I think all the new formats are
1416
+ # character-header formats and thus are strings, not numbers.
1417
+ 0 short 070707 cpio archive
1418
+ !:mime application/x-cpio
1419
+ 0 short 0143561 byte-swapped cpio archive
1420
+ !:mime application/x-cpio # encoding: swapped
1421
+ 0 string 070707 ASCII cpio archive (pre-SVR4 or odc)
1422
+ 0 string 070701 ASCII cpio archive (SVR4 with no CRC)
1423
+ 0 string 070702 ASCII cpio archive (SVR4 with CRC)
1424
+
1425
+ # Debian package (needs to go before regular portable archives)
1426
+ #
1427
+ 0 string =!<arch>\ndebian
1428
+ !:mime application/x-debian-package
1429
+ >8 string debian-split part of multipart Debian package
1430
+ >8 string debian-binary Debian binary package
1431
+ >8 string !debian
1432
+ >68 string >\0 (format %s)
1433
+ # These next two lines do not work, because a bzip2 Debian archive
1434
+ # still uses gzip for the control.tar (first in the archive). Only
1435
+ # data.tar varies, and the location of its filename varies too.
1436
+ # file/libmagic does not current have support for ascii-string based
1437
+ # (offsets) as of 2005-09-15.
1438
+ #>81 string bz2 \b, uses bzip2 compression
1439
+ #>84 string gz \b, uses gzip compression
1440
+ #>136 ledate x created: %s
1441
+
1442
+ # other archives
1443
+ 0 long 0177555 very old archive
1444
+ 0 short 0177555 very old PDP-11 archive
1445
+ 0 long 0177545 old archive
1446
+ 0 short 0177545 old PDP-11 archive
1447
+ 0 long 0100554 apl workspace
1448
+ 0 string =<ar> archive
1449
+ !:mime application/x-archive
1450
+
1451
+ # MIPS archive (needs to go before regular portable archives)
1452
+ #
1453
+ 0 string =!<arch>\n__________E MIPS archive
1454
+ >20 string U with MIPS Ucode members
1455
+ >21 string L with MIPSEL members
1456
+ >21 string B with MIPSEB members
1457
+ >19 string L and an EL hash table
1458
+ >19 string B and an EB hash table
1459
+ >22 string X -- out of date
1460
+
1461
+ 0 search/1 -h- Software Tools format archive text
1462
+
1463
+ #
1464
+ # XXX - why are there multiple <ar> thingies? Note that 0x213c6172 is
1465
+ # "!<ar", so, for new-style (4.xBSD/SVR2andup) archives, we have:
1466
+ #
1467
+ # 0 string =!<arch> current ar archive
1468
+ # 0 long 0x213c6172 archive file
1469
+ #
1470
+ # and for SVR1 archives, we have:
1471
+ #
1472
+ # 0 string \<ar> System V Release 1 ar archive
1473
+ # 0 string =<ar> archive
1474
+ #
1475
+ # XXX - did Aegis really store shared libraries, breakpointed modules,
1476
+ # and absolute code program modules in the same format as new-style
1477
+ # "ar" archives?
1478
+ #
1479
+ 0 string =!<arch> current ar archive
1480
+ !:mime application/x-archive
1481
+ >8 string __.SYMDEF random library
1482
+ >0 belong =65538 - pre SR9.5
1483
+ >0 belong =65539 - post SR9.5
1484
+ >0 beshort 2 - object archive
1485
+ >0 beshort 3 - shared library module
1486
+ >0 beshort 4 - debug break-pointed module
1487
+ >0 beshort 5 - absolute code program module
1488
+ 0 string \<ar> System V Release 1 ar archive
1489
+ 0 string =<ar> archive
1490
+ #
1491
+ # XXX - from "vax", which appears to collect a bunch of byte-swapped
1492
+ # thingies, to help you recognize VAX files on big-endian machines;
1493
+ # with "leshort", "lelong", and "string", that's no longer necessary....
1494
+ #
1495
+ 0 belong 0x65ff0000 VAX 3.0 archive
1496
+ 0 belong 0x3c61723e VAX 5.0 archive
1497
+ #
1498
+ 0 long 0x213c6172 archive file
1499
+ 0 lelong 0177555 very old VAX archive
1500
+ 0 leshort 0177555 very old PDP-11 archive
1501
+ #
1502
+ # XXX - "pdp" claims that 0177545 can have an __.SYMDEF member and thus
1503
+ # be a random library (it said 0xff65 rather than 0177545).
1504
+ #
1505
+ 0 lelong 0177545 old VAX archive
1506
+ >8 string __.SYMDEF random library
1507
+ 0 leshort 0177545 old PDP-11 archive
1508
+ >8 string __.SYMDEF random library
1509
+ #
1510
+ # From "pdp" (but why a 4-byte quantity?)
1511
+ #
1512
+ 0 lelong 0x39bed PDP-11 old archive
1513
+ 0 lelong 0x39bee PDP-11 4.0 archive
1514
+
1515
+ # ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com)
1516
+ #
1517
+ # The first byte is the magic (0x1a), byte 2 is the compression type for
1518
+ # the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS
1519
+ # filename of the first file (null terminated). Since some types collide
1520
+ # we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%),
1521
+ # 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%). 0x01 collides with terminfo.
1522
+ 0 lelong&0x8080ffff 0x0000081a ARC archive data, dynamic LZW
1523
+ !:mime application/x-arc
1524
+ 0 lelong&0x8080ffff 0x0000091a ARC archive data, squashed
1525
+ !:mime application/x-arc
1526
+ 0 lelong&0x8080ffff 0x0000021a ARC archive data, uncompressed
1527
+ !:mime application/x-arc
1528
+ 0 lelong&0x8080ffff 0x0000031a ARC archive data, packed
1529
+ !:mime application/x-arc
1530
+ 0 lelong&0x8080ffff 0x0000041a ARC archive data, squeezed
1531
+ !:mime application/x-arc
1532
+ 0 lelong&0x8080ffff 0x0000061a ARC archive data, crunched
1533
+ !:mime application/x-arc
1534
+ # [JW] stuff taken from idarc, obviously ARC successors:
1535
+ 0 lelong&0x8080ffff 0x00000a1a PAK archive data
1536
+ !:mime application/x-arc
1537
+ 0 lelong&0x8080ffff 0x0000141a ARC+ archive data
1538
+ !:mime application/x-arc
1539
+ 0 lelong&0x8080ffff 0x0000481a HYP archive data
1540
+ !:mime application/x-arc
1541
+
1542
+ # Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk)
1543
+ # I can't create either SPARK or ArcFS archives so I have not tested this stuff
1544
+ # [GRR: the original entries collide with ARC, above; replaced with combined
1545
+ # version (not tested)]
1546
+ #0 byte 0x1a RISC OS archive (spark format)
1547
+ 0 string \032archive RISC OS archive (ArcFS format)
1548
+ 0 string Archive\000 RISC OS archive (ArcFS format)
1549
+
1550
+ # All these were taken from idarc, many could not be verified. Unfortunately,
1551
+ # there were many low-quality sigs, i.e. easy to trigger false positives.
1552
+ # Please notify me of any real-world fishy/ambiguous signatures and I'll try
1553
+ # to get my hands on the actual archiver and see if I find something better. [JW]
1554
+ # probably many can be enhanced by finding some 0-byte or control char near the start
1555
+
1556
+ # idarc calls this Crush/Uncompressed... *shrug*
1557
+ 0 string CRUSH Crush archive data
1558
+ # Squeeze It (.sqz)
1559
+ 0 string HLSQZ Squeeze It archive data
1560
+ # SQWEZ
1561
+ 0 string SQWEZ SQWEZ archive data
1562
+ # HPack (.hpk)
1563
+ 0 string HPAK HPack archive data
1564
+ # HAP
1565
+ 0 string \x91\x33HF HAP archive data
1566
+ # MD/MDCD
1567
+ 0 string MDmd MDCD archive data
1568
+ # LIM
1569
+ 0 string LIM\x1a LIM archive data
1570
+ # SAR
1571
+ 3 string LH5 SAR archive data
1572
+ # BSArc/BS2
1573
+ 0 string \212\3SB \0 BSArc/BS2 archive data
1574
+ # MAR
1575
+ 2 string =-ah MAR archive data
1576
+ # ACB
1577
+ 0 belong&0x00f800ff 0x00800000 ACB archive data
1578
+ # CPZ
1579
+ # TODO, this is what idarc says: 0 string \0\0\0 CPZ archive data
1580
+ # JRC
1581
+ 0 string JRchive JRC archive data
1582
+ # Quantum
1583
+ 0 string DS\0 Quantum archive data
1584
+ # ReSOF
1585
+ 0 string PK\3\6 ReSOF archive data
1586
+ # QuArk
1587
+ 0 string 7\4 QuArk archive data
1588
+ # YAC
1589
+ 14 string YC YAC archive data
1590
+ # X1
1591
+ 0 string X1 X1 archive data
1592
+ 0 string XhDr X1 archive data
1593
+ # CDC Codec (.dqt)
1594
+ 0 belong&0xffffe000 0x76ff2000 CDC Codec archive data
1595
+ # AMGC
1596
+ 0 string \xad6" AMGC archive data
1597
+ # NuLIB
1598
+ 0 string NõFélå NuLIB archive data
1599
+ # PakLeo
1600
+ 0 string LEOLZW PAKLeo archive data
1601
+ # ChArc
1602
+ 0 string SChF ChArc archive data
1603
+ # PSA
1604
+ 0 string PSA PSA archive data
1605
+ # CrossePAC
1606
+ 0 string DSIGDCC CrossePAC archive data
1607
+ # Freeze
1608
+ 0 string \x1f\x9f\x4a\x10\x0a Freeze archive data
1609
+ # KBoom
1610
+ 0 string ¨MP¨ KBoom archive data
1611
+ # NSQ, must go after CDC Codec
1612
+ 0 string \x76\xff NSQ archive data
1613
+ # DPA
1614
+ 0 string Dirk\ Paehl DPA archive data
1615
+ # BA
1616
+ # TODO: idarc says "bytes 0-2 == bytes 3-5"
1617
+ # TTComp
1618
+ 0 string \0\6 TTComp archive data
1619
+ # ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation?
1620
+ 0 string ESP ESP archive data
1621
+ # ZPack
1622
+ 0 string \1ZPK\1 ZPack archive data
1623
+ # Sky
1624
+ 0 string \xbc\x40 Sky archive data
1625
+ # UFA
1626
+ 0 string UFA UFA archive data
1627
+ # Dry
1628
+ 0 string =-H2O DRY archive data
1629
+ # FoxSQZ
1630
+ 0 string FOXSQZ FoxSQZ archive data
1631
+ # AR7
1632
+ 0 string ,AR7 AR7 archive data
1633
+ # PPMZ
1634
+ 0 string PPMZ PPMZ archive data
1635
+ # MS Compress
1636
+ 4 string \x88\xf0\x27 MS Compress archive data
1637
+ # updated by Joerg Jenderek
1638
+ >9 string \0
1639
+ >>0 string KWAJ
1640
+ >>>7 string \321\003 MS Compress archive data
1641
+ >>>>14 ulong >0 \b, original size: %ld bytes
1642
+ >>>>18 ubyte >0x65
1643
+ >>>>>18 string x \b, was %.8s
1644
+ >>>>>(10.b-4) string x \b.%.3s
1645
+ # MP3 (archiver, not lossy audio compression)
1646
+ 0 string MP3\x1a MP3-Archiver archive data
1647
+ # ZET
1648
+ 0 string OZÝ ZET archive data
1649
+ # TSComp
1650
+ 0 string \x65\x5d\x13\x8c\x08\x01\x03\x00 TSComp archive data
1651
+ # ARQ
1652
+ 0 string gW\4\1 ARQ archive data
1653
+ # Squash
1654
+ 3 string OctSqu Squash archive data
1655
+ # Terse
1656
+ 0 string \5\1\1\0 Terse archive data
1657
+ # PUCrunch
1658
+ 0 string \x01\x08\x0b\x08\xef\x00\x9e\x32\x30\x36\x31 PUCrunch archive data
1659
+ # UHarc
1660
+ 0 string UHA UHarc archive data
1661
+ # ABComp
1662
+ 0 string \2AB ABComp archive data
1663
+ 0 string \3AB2 ABComp archive data
1664
+ # CMP
1665
+ 0 string CO\0 CMP archive data
1666
+ # Splint
1667
+ 0 string \x93\xb9\x06 Splint archive data
1668
+ # InstallShield
1669
+ 0 string \x13\x5d\x65\x8c InstallShield Z archive Data
1670
+ # Gather
1671
+ 1 string GTH Gather archive data
1672
+ # BOA
1673
+ 0 string BOA BOA archive data
1674
+ # RAX
1675
+ 0 string ULEB\xa RAX archive data
1676
+ # Xtreme
1677
+ 0 string ULEB\0 Xtreme archive data
1678
+ # Pack Magic
1679
+ 0 string @â\1\0 Pack Magic archive data
1680
+ # BTS
1681
+ 0 belong&0xfeffffff 0x1a034465 BTS archive data
1682
+ # ELI 5750
1683
+ 0 string Ora\ ELI 5750 archive data
1684
+ # QFC
1685
+ 0 string \x1aFC\x1a QFC archive data
1686
+ 0 string \x1aQF\x1a QFC archive data
1687
+ # PRO-PACK
1688
+ 0 string RNC PRO-PACK archive data
1689
+ # 777
1690
+ 0 string 777 777 archive data
1691
+ # LZS221
1692
+ 0 string sTaC LZS221 archive data
1693
+ # HPA
1694
+ 0 string HPA HPA archive data
1695
+ # Arhangel
1696
+ 0 string LG Arhangel archive data
1697
+ # EXP1, uses bzip2
1698
+ 0 string 0123456789012345BZh EXP1 archive data
1699
+ # IMP
1700
+ 0 string IMP\xa IMP archive data
1701
+ # NRV
1702
+ 0 string \x00\x9E\x6E\x72\x76\xFF NRV archive data
1703
+ # Squish
1704
+ 0 string \x73\xb2\x90\xf4 Squish archive data
1705
+ # Par
1706
+ 0 string PHILIPP Par archive data
1707
+ 0 string PAR Par archive data
1708
+ # HIT
1709
+ 0 string UB HIT archive data
1710
+ # SBX
1711
+ 0 belong&0xfffff000 0x53423000 SBX archive data
1712
+ # NaShrink
1713
+ 0 string NSK NaShrink archive data
1714
+ # SAPCAR
1715
+ 0 string #\ CAR\ archive\ header SAPCAR archive data
1716
+ 0 string CAR\ 2.00RG SAPCAR archive data
1717
+ # Disintegrator
1718
+ 0 string DST Disintegrator archive data
1719
+ # ASD
1720
+ 0 string ASD ASD archive data
1721
+ # InstallShield CAB
1722
+ 0 string ISc( InstallShield CAB
1723
+ # TOP4
1724
+ 0 string T4\x1a TOP4 archive data
1725
+ # BatComp left out: sig looks like COM executable
1726
+ # so TODO: get real 4dos batcomp file and find sig
1727
+ # BlakHole
1728
+ 0 string BH\5\7 BlakHole archive data
1729
+ # BIX
1730
+ 0 string BIX0 BIX archive data
1731
+ # ChiefLZA
1732
+ 0 string ChfLZ ChiefLZA archive data
1733
+ # Blink
1734
+ 0 string Blink Blink archive data
1735
+ # Logitech Compress
1736
+ 0 string \xda\xfa Logitech Compress archive data
1737
+ # ARS-Sfx (FIXME: really a SFX? then goto COM/EXE)
1738
+ 1 string (C)\ STEPANYUK ARS-Sfx archive data
1739
+ # AKT/AKT32
1740
+ 0 string AKT32 AKT32 archive data
1741
+ 0 string AKT AKT archive data
1742
+ # NPack
1743
+ 0 string MSTSM NPack archive data
1744
+ # PFT
1745
+ 0 string \0\x50\0\x14 PFT archive data
1746
+ # SemOne
1747
+ 0 string SEM SemOne archive data
1748
+ # PPMD
1749
+ 0 string \x8f\xaf\xac\x84 PPMD archive data
1750
+ # FIZ
1751
+ 0 string FIZ FIZ archive data
1752
+ # MSXiE
1753
+ 0 belong&0xfffff0f0 0x4d530000 MSXiE archive data
1754
+ # DeepFreezer
1755
+ 0 belong&0xfffffff0 0x797a3030 DeepFreezer archive data
1756
+ # DC
1757
+ 0 string =<DC- DC archive data
1758
+ # TPac
1759
+ 0 string \4TPAC\3 TPac archive data
1760
+ # Ai
1761
+ 0 string Ai\1\1\0 Ai archive data
1762
+ 0 string Ai\1\0\0 Ai archive data
1763
+ # Ai32
1764
+ 0 string Ai\2\0 Ai32 archive data
1765
+ 0 string Ai\2\1 Ai32 archive data
1766
+ # SBC
1767
+ 0 string SBC SBC archive data
1768
+ # Ybs
1769
+ 0 string YBS Ybs archive data
1770
+ # DitPack
1771
+ 0 string \x9e\0\0 DitPack archive data
1772
+ # DMS
1773
+ 0 string DMS! DMS archive data
1774
+ # EPC
1775
+ 0 string \x8f\xaf\xac\x8c EPC archive data
1776
+ # VSARC
1777
+ 0 string VS\x1a VSARC archive data
1778
+ # PDZ
1779
+ 0 string PDZ PDZ archive data
1780
+ # ReDuq
1781
+ 0 string rdqx ReDuq archive data
1782
+ # GCA
1783
+ 0 string GCAX GCA archive data
1784
+ # PPMN
1785
+ 0 string pN PPMN archive data
1786
+ # WinImage
1787
+ 3 string WINIMAGE WinImage archive data
1788
+ # Compressia
1789
+ 0 string CMP0CMP Compressia archive data
1790
+ # UHBC
1791
+ 0 string UHB UHBC archive data
1792
+ # WinHKI
1793
+ 0 string \x61\x5C\x04\x05 WinHKI archive data
1794
+ # WWPack data file
1795
+ 0 string WWP WWPack archive data
1796
+ # BSN (BSA, PTS-DOS)
1797
+ 0 string \xffBSG BSN archive data
1798
+ 1 string \xffBSG BSN archive data
1799
+ 3 string \xffBSG BSN archive data
1800
+ 1 string \0\xae\2 BSN archive data
1801
+ 1 string \0\xae\3 BSN archive data
1802
+ 1 string \0\xae\7 BSN archive data
1803
+ # AIN
1804
+ 0 string \x33\x18 AIN archive data
1805
+ 0 string \x33\x17 AIN archive data
1806
+ # XPA32
1807
+ 0 string xpa\0\1 XPA32 archive data
1808
+ # SZip (TODO: doesn't catch all versions)
1809
+ 0 string SZ\x0a\4 SZip archive data
1810
+ # XPack DiskImage
1811
+ 0 string jm XPack DiskImage archive data
1812
+ # XPack Data
1813
+ 0 string xpa XPack archive data
1814
+ # XPack Single Data
1815
+ 0 string Í\ jm XPack single archive data
1816
+
1817
+ # TODO: missing due to unknown magic/magic at end of file:
1818
+ #DWC
1819
+ #ARG
1820
+ #ZAR
1821
+ #PC/3270
1822
+ #InstallIt
1823
+ #RKive
1824
+ #RK
1825
+ #XPack Diskimage
1826
+
1827
+ # These were inspired by idarc, but actually verified
1828
+ # Dzip archiver (.dz)
1829
+ 0 string DZ Dzip archive data
1830
+ >2 byte x \b, version %i
1831
+ >3 byte x \b.%i
1832
+ # ZZip archiver (.zz)
1833
+ 0 string ZZ\ \0\0 ZZip archive data
1834
+ 0 string ZZ0 ZZip archive data
1835
+ # PAQ archiver (.paq)
1836
+ 0 string \xaa\x40\x5f\x77\x1f\xe5\x82\x0d PAQ archive data
1837
+ 0 string PAQ PAQ archive data
1838
+ >3 byte&0xf0 0x30
1839
+ >>3 byte x (v%c)
1840
+ # JAR archiver (.j), this is the successor to ARJ, not Java's JAR (which is essentially ZIP)
1841
+ 0xe string \x1aJar\x1b JAR (ARJ Software, Inc.) archive data
1842
+ 0 string JARCS JAR (ARJ Software, Inc.) archive data
1843
+
1844
+ # ARJ archiver (jason@jarthur.Claremont.EDU)
1845
+ 0 leshort 0xea60 ARJ archive data
1846
+ !:mime application/x-arj
1847
+ >5 byte x \b, v%d,
1848
+ >8 byte &0x04 multi-volume,
1849
+ >8 byte &0x10 slash-switched,
1850
+ >8 byte &0x20 backup,
1851
+ >34 string x original name: %s,
1852
+ >7 byte 0 os: MS-DOS
1853
+ >7 byte 1 os: PRIMOS
1854
+ >7 byte 2 os: Unix
1855
+ >7 byte 3 os: Amiga
1856
+ >7 byte 4 os: Macintosh
1857
+ >7 byte 5 os: OS/2
1858
+ >7 byte 6 os: Apple ][ GS
1859
+ >7 byte 7 os: Atari ST
1860
+ >7 byte 8 os: NeXT
1861
+ >7 byte 9 os: VAX/VMS
1862
+ >3 byte >0 %d]
1863
+ # [JW] idarc says this is also possible
1864
+ 2 leshort 0xea60 ARJ archive data
1865
+
1866
+ # HA archiver (Greg Roelofs, newt@uchicago.edu)
1867
+ # This is a really bad format. A file containing HAWAII will match this...
1868
+ #0 string HA HA archive data,
1869
+ #>2 leshort =1 1 file,
1870
+ #>2 leshort >1 %u files,
1871
+ #>4 byte&0x0f =0 first is type CPY
1872
+ #>4 byte&0x0f =1 first is type ASC
1873
+ #>4 byte&0x0f =2 first is type HSC
1874
+ #>4 byte&0x0f =0x0e first is type DIR
1875
+ #>4 byte&0x0f =0x0f first is type SPECIAL
1876
+ # suggestion: at least identify small archives (<1024 files)
1877
+ 0 belong&0xffff00fc 0x48410000 HA archive data
1878
+ >2 leshort =1 1 file,
1879
+ >2 leshort >1 %u files,
1880
+ >4 byte&0x0f =0 first is type CPY
1881
+ >4 byte&0x0f =1 first is type ASC
1882
+ >4 byte&0x0f =2 first is type HSC
1883
+ >4 byte&0x0f =0x0e first is type DIR
1884
+ >4 byte&0x0f =0x0f first is type SPECIAL
1885
+
1886
+ # HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz)
1887
+ 0 string HPAK HPACK archive data
1888
+
1889
+ # JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net
1890
+ 0 string \351,\001JAM\ JAM archive,
1891
+ >7 string >\0 version %.4s
1892
+ >0x26 byte =0x27 -
1893
+ >>0x2b string >\0 label %.11s,
1894
+ >>0x27 lelong x serial %08x,
1895
+ >>0x36 string >\0 fstype %.8s
1896
+
1897
+ # LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu)
1898
+ 2 string -lh0- LHarc 1.x/ARX archive data [lh0]
1899
+ !:mime application/x-lharc
1900
+ 2 string -lh1- LHarc 1.x/ARX archive data [lh1]
1901
+ !:mime application/x-lharc
1902
+ 2 string -lz4- LHarc 1.x archive data [lz4]
1903
+ !:mime application/x-lharc
1904
+ 2 string -lz5- LHarc 1.x archive data [lz5]
1905
+ !:mime application/x-lharc
1906
+ # [never seen any but the last; -lh4- reported in comp.compression:]
1907
+ 2 string -lzs- LHa/LZS archive data [lzs]
1908
+ !:mime application/x-lha
1909
+ 2 string -lh\40- LHa 2.x? archive data [lh ]
1910
+ !:mime application/x-lha
1911
+ 2 string -lhd- LHa 2.x? archive data [lhd]
1912
+ !:mime application/x-lha
1913
+ 2 string -lh2- LHa 2.x? archive data [lh2]
1914
+ !:mime application/x-lha
1915
+ 2 string -lh3- LHa 2.x? archive data [lh3]
1916
+ !:mime application/x-lha
1917
+ 2 string -lh4- LHa (2.x) archive data [lh4]
1918
+ !:mime application/x-lha
1919
+ 2 string -lh5- LHa (2.x) archive data [lh5]
1920
+ !:mime application/x-lha
1921
+ 2 string -lh6- LHa (2.x) archive data [lh6]
1922
+ !:mime application/x-lha
1923
+ 2 string -lh7- LHa (2.x)/LHark archive data [lh7]
1924
+ !:mime application/x-lha
1925
+ >20 byte x - header level %d
1926
+ # taken from idarc [JW]
1927
+ 2 string -lZ PUT archive data
1928
+ 2 string -lz LZS archive data
1929
+ 2 string -sw1- Swag archive data
1930
+
1931
+ # RAR archiver (Greg Roelofs, newt@uchicago.edu)
1932
+ 0 string Rar! RAR archive data,
1933
+ !:mime application/x-rar
1934
+ >44 byte x v%0x,
1935
+ >10 byte >0 flags:
1936
+ >>10 byte &0x01 Archive volume,
1937
+ >>10 byte &0x02 Commented,
1938
+ >>10 byte &0x04 Locked,
1939
+ >>10 byte &0x08 Solid,
1940
+ >>10 byte &0x20 Authenticated,
1941
+ >35 byte 0 os: MS-DOS
1942
+ >35 byte 1 os: OS/2
1943
+ >35 byte 2 os: Win32
1944
+ >35 byte 3 os: Unix
1945
+ # some old version? idarc says:
1946
+ 0 string RE\x7e\x5e RAR archive data
1947
+
1948
+ # SQUISH archiver (Greg Roelofs, newt@uchicago.edu)
1949
+ 0 string SQSH squished archive data (Acorn RISCOS)
1950
+
1951
+ # UC2 archiver (Greg Roelofs, newt@uchicago.edu)
1952
+ # [JW] see exe section for self-extracting version
1953
+ 0 string UC2\x1a UC2 archive data
1954
+
1955
+ # ZIP archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu)
1956
+ 0 string PK\003\004
1957
+ >4 byte 0x00 Zip archive data
1958
+ !:mime application/zip
1959
+ >4 byte 0x09 Zip archive data, at least v0.9 to extract
1960
+ !:mime application/zip
1961
+ >4 byte 0x0a Zip archive data, at least v1.0 to extract
1962
+ !:mime application/zip
1963
+ >4 byte 0x0b Zip archive data, at least v1.1 to extract
1964
+ !:mime application/zip
1965
+ >0x161 string WINZIP Zip archive data, WinZIP self-extracting
1966
+ !:mime application/zip
1967
+ >4 byte 0x14
1968
+ >>30 ubelong !0x6d696d65 Zip archive data, at least v2.0 to extract
1969
+ !:mime application/zip
1970
+
1971
+ # OpenOffice.org / KOffice / StarOffice documents
1972
+ # Listed here because they ARE zip files
1973
+ #
1974
+ # From: Abel Cheung <abel@oaka.org>
1975
+ >4 byte 0x14
1976
+ >>30 string mimetype
1977
+
1978
+ # KOffice (1.2 or above) formats
1979
+ >>>50 string vnd.kde. KOffice (>=1.2)
1980
+ >>>>58 string karbon Karbon document
1981
+ >>>>58 string kchart KChart document
1982
+ >>>>58 string kformula KFormula document
1983
+ >>>>58 string kivio Kivio document
1984
+ >>>>58 string kontour Kontour document
1985
+ >>>>58 string kpresenter KPresenter document
1986
+ >>>>58 string kspread KSpread document
1987
+ >>>>58 string kword KWord document
1988
+
1989
+ # OpenOffice formats (for OpenOffice 1.x / StarOffice 6/7)
1990
+ >>>50 string vnd.sun.xml. OpenOffice.org 1.x
1991
+ >>>>62 string writer Writer
1992
+ >>>>>68 byte !0x2e document
1993
+ >>>>>68 string .template template
1994
+ >>>>>68 string .global global document
1995
+ >>>>62 string calc Calc
1996
+ >>>>>66 byte !0x2e spreadsheet
1997
+ >>>>>66 string .template template
1998
+ >>>>62 string draw Draw
1999
+ >>>>>66 byte !0x2e document
2000
+ >>>>>66 string .template template
2001
+ >>>>62 string impress Impress
2002
+ >>>>>69 byte !0x2e presentation
2003
+ >>>>>69 string .template template
2004
+ >>>>62 string math Math document
2005
+ >>>>62 string base Database file
2006
+
2007
+ # OpenDocument formats (for OpenOffice 2.x / StarOffice >= 8)
2008
+ # http://lists.oasis-open.org/archives/office/200505/msg00006.html
2009
+ >>>50 string vnd.oasis.opendocument. OpenDocument
2010
+ >>>>73 string text
2011
+ >>>>>77 byte !0x2d Text
2012
+ !:mime application/vnd.oasis.opendocument.text
2013
+ >>>>>77 string -template Text Template
2014
+ >>>>>77 string -web HTML Document Template
2015
+ >>>>>77 string -master Master Document
2016
+ >>>>73 string graphics Drawing
2017
+ >>>>>81 string -template Template
2018
+ >>>>73 string presentation Presentation
2019
+ >>>>>85 string -template Template
2020
+ >>>>73 string spreadsheet Spreadsheet
2021
+ >>>>>84 string -template Template
2022
+ >>>>73 string chart Chart
2023
+ >>>>>78 string -template Template
2024
+ >>>>73 string formula Formula
2025
+ >>>>>80 string -template Template
2026
+ >>>>73 string database Database
2027
+ >>>>73 string image Image
2028
+
2029
+ # Zoo archiver
2030
+ 20 lelong 0xfdc4a7dc Zoo archive data
2031
+ !:mime application/x-zoo
2032
+ >4 byte >48 \b, v%c.
2033
+ >>6 byte >47 \b%c
2034
+ >>>7 byte >47 \b%c
2035
+ >32 byte >0 \b, modify: v%d
2036
+ >>33 byte x \b.%d+
2037
+ >42 lelong 0xfdc4a7dc \b,
2038
+ >>70 byte >0 extract: v%d
2039
+ >>>71 byte x \b.%d+
2040
+
2041
+ # Shell archives
2042
+ 10 string #\ This\ is\ a\ shell\ archive shell archive text
2043
+ !:mime application/octet-stream
2044
+
2045
+ #
2046
+ # LBR. NB: May conflict with the questionable
2047
+ # "binary Computer Graphics Metafile" format.
2048
+ #
2049
+ 0 string \0\ \ \ \ \ \ \ \ \ \ \ \0\0 LBR archive data
2050
+ #
2051
+ # PMA (CP/M derivative of LHA)
2052
+ #
2053
+ 2 string -pm0- PMarc archive data [pm0]
2054
+ 2 string -pm1- PMarc archive data [pm1]
2055
+ 2 string -pm2- PMarc archive data [pm2]
2056
+ 2 string -pms- PMarc SFX archive (CP/M, DOS)
2057
+ 5 string -pc1- PopCom compressed executable (CP/M)
2058
+
2059
+ # From Rafael Laboissiere <rafael@laboissiere.net>
2060
+ # The Project Revision Control System (see
2061
+ # http://prcs.sourceforge.net) generates a packaged project
2062
+ # file which is recognized by the following entry:
2063
+ 0 leshort 0xeb81 PRCS packaged project
2064
+
2065
+ # Microsoft cabinets
2066
+ # by David Necas (Yeti) <yeti@physics.muni.cz>
2067
+ #0 string MSCF\0\0\0\0 Microsoft cabinet file data,
2068
+ #>25 byte x v%d
2069
+ #>24 byte x \b.%d
2070
+ # MPi: All CABs have version 1.3, so this is pointless.
2071
+ # Better magic in debian-additions.
2072
+
2073
+ # GTKtalog catalogs
2074
+ # by David Necas (Yeti) <yeti@physics.muni.cz>
2075
+ 4 string gtktalog\ GTKtalog catalog data,
2076
+ >13 string 3 version 3
2077
+ >>14 beshort 0x677a (gzipped)
2078
+ >>14 beshort !0x677a (not gzipped)
2079
+ >13 string >3 version %s
2080
+
2081
+ ############################################################################
2082
+ # Parity archive reconstruction file, the 'par' file format now used on Usenet.
2083
+ 0 string PAR\0 PARity archive data
2084
+ >48 leshort =0 - Index file
2085
+ >48 leshort >0 - file number %d
2086
+
2087
+ # Felix von Leitner <felix-file@fefe.de>
2088
+ 0 string d8:announce BitTorrent file
2089
+ !:mime application/x-bittorrent
2090
+
2091
+ # Atari MSA archive - Teemu Hukkanen <tjhukkan@iki.fi>
2092
+ 0 beshort 0x0e0f Atari MSA archive data
2093
+ >2 beshort x \b, %d sectors per track
2094
+ >4 beshort 0 \b, 1 sided
2095
+ >4 beshort 1 \b, 2 sided
2096
+ >6 beshort x \b, starting track: %d
2097
+ >8 beshort x \b, ending track: %d
2098
+
2099
+ # Alternate ZIP string (amc@arwen.cs.berkeley.edu)
2100
+ 0 string PK00PK\003\004 Zip archive data
2101
+
2102
+ # ACE archive (from http://www.wotsit.org/download.asp?f=ace)
2103
+ # by Stefan `Sec` Zehl <sec@42.org>
2104
+ 7 string **ACE** ACE archive data
2105
+ >15 byte >0 version %d
2106
+ >16 byte =0x00 \b, from MS-DOS
2107
+ >16 byte =0x01 \b, from OS/2
2108
+ >16 byte =0x02 \b, from Win/32
2109
+ >16 byte =0x03 \b, from Unix
2110
+ >16 byte =0x04 \b, from MacOS
2111
+ >16 byte =0x05 \b, from WinNT
2112
+ >16 byte =0x06 \b, from Primos
2113
+ >16 byte =0x07 \b, from AppleGS
2114
+ >16 byte =0x08 \b, from Atari
2115
+ >16 byte =0x09 \b, from Vax/VMS
2116
+ >16 byte =0x0A \b, from Amiga
2117
+ >16 byte =0x0B \b, from Next
2118
+ >14 byte x \b, version %d to extract
2119
+ >5 leshort &0x0080 \b, multiple volumes,
2120
+ >>17 byte x \b (part %d),
2121
+ >5 leshort &0x0002 \b, contains comment
2122
+ >5 leshort &0x0200 \b, sfx
2123
+ >5 leshort &0x0400 \b, small dictionary
2124
+ >5 leshort &0x0800 \b, multi-volume
2125
+ >5 leshort &0x1000 \b, contains AV-String
2126
+ >>30 string \x16*UNREGISTERED\x20VERSION* (unregistered)
2127
+ >5 leshort &0x2000 \b, with recovery record
2128
+ >5 leshort &0x4000 \b, locked
2129
+ >5 leshort &0x8000 \b, solid
2130
+ # Date in MS-DOS format (whatever that is)
2131
+ #>18 lelong x Created on
2132
+
2133
+ # sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann
2134
+ # <doj@cubic.org>
2135
+ 0x1A string sfArk sfArk compressed Soundfont
2136
+ >0x15 string 2
2137
+ >>0x1 string >\0 Version %s
2138
+ >>0x2A string >\0 : %s
2139
+
2140
+ # DR-DOS 7.03 Packed File *.??_
2141
+ 0 string Packed\ File\ Personal NetWare Packed File
2142
+ >12 string x \b, was "%.12s"
2143
+
2144
+ # EET archive
2145
+ # From: Tilman Sauerbeck <tilman@code-monkey.de>
2146
+ 0 belong 0x1ee7ff00 EET archive
2147
+ !:mime application/x-eet
2148
+
2149
+ # rzip archives
2150
+ 0 string RZIP rzip compressed data
2151
+ >4 byte x - version %d
2152
+ >5 byte x \b.%d
2153
+ >6 belong x (%d bytes)
2154
+
2155
+ # From: "Robert Dale" <robdale@gmail.com>
2156
+ 0 belong 123 dar archive,
2157
+ >4 belong x label "%.8x
2158
+ >>8 belong x %.8x
2159
+ >>>12 beshort x %.4x"
2160
+ >14 byte 0x54 end slice
2161
+ >14 beshort 0x4e4e multi-part
2162
+ >14 beshort 0x4e53 multi-part, with -S
2163
+
2164
+ # Symbian installation files
2165
+ # http://www.thouky.co.uk/software/psifs/sis.html
2166
+ # http://developer.symbian.com/main/downloads/papers/SymbianOSv91/softwareinstallsis.pdf
2167
+ 8 lelong 0x10000419 Symbian installation file
2168
+ !:mime application/vnd.symbian.install
2169
+ >4 lelong 0x1000006D (EPOC release 3/4/5)
2170
+ >4 lelong 0x10003A12 (EPOC release 6)
2171
+ 0 lelong 0x10201A7A Symbian installation file (Symbian OS 9.x)
2172
+ !:mime x-epoc/x-sisx-app
2173
+
2174
+ # From "Nelson A. de Oliveira" <naoliv@gmail.com>
2175
+ 0 string MPQ\032 MoPaQ (MPQ) archive
2176
+
2177
+ # From: Dirk Jagdmann <doj@cubic.org>
2178
+ # xar archive format: http://code.google.com/p/xar/
2179
+ 0 string xar! xar archive
2180
+ >6 beshort x - version %ld
2181
+
2182
+ # From: "Nelson A. de Oliveira" <naoliv@gmail.com>
2183
+ # .kgb
2184
+ 0 string KGB_arch KGB Archiver file
2185
+ >10 string x with compression level %.1s
2186
+
2187
+ # xar (eXtensible ARchiver) archive
2188
+ # From: "David Remahl" <dremahl@apple.com>
2189
+ 0 string xar! xar archive
2190
+ #>4 beshort x header size %d
2191
+ >6 beshort x version %d,
2192
+ #>8 quad x compressed TOC: %d,
2193
+ #>16 quad x uncompressed TOC: %d,
2194
+ >24 belong 0 no checksum
2195
+ >24 belong 1 SHA-1 checksum
2196
+ >24 belong 2 MD5 checksum
2197
+
2198
+ # Type: Parity Archive
2199
+ # From: Daniel van Eeden <daniel_e@dds.nl>
2200
+ 0 string PAR2 Parity Archive Volume Set
2201
+
2202
+ #------------------------------------------------------------------------------
2203
+ # asterix: file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character
2204
+ # strings as "long" - we assume they're just strings:
2205
+ # From: guy@netapp.com (Guy Harris)
2206
+ #
2207
+ 0 string *STA Aster*x
2208
+ >7 string WORD Words Document
2209
+ >7 string GRAP Graphic
2210
+ >7 string SPRE Spreadsheet
2211
+ >7 string MACR Macro
2212
+ 0 string 2278 Aster*x Version 2
2213
+ >29 byte 0x36 Words Document
2214
+ >29 byte 0x35 Graphic
2215
+ >29 byte 0x32 Spreadsheet
2216
+ >29 byte 0x38 Macro
2217
+
2218
+
2219
+ #------------------------------------------------------------------------------
2220
+ # att3b: file(1) magic for AT&T 3B machines
2221
+ #
2222
+ # The `versions' should be un-commented if they work for you.
2223
+ # (Was the problem just one of endianness?)
2224
+ #
2225
+ # 3B20
2226
+ #
2227
+ # The 3B20 conflicts with SCCS.
2228
+ #0 beshort 0550 3b20 COFF executable
2229
+ #>12 belong >0 not stripped
2230
+ #>22 beshort >0 - version %ld
2231
+ #0 beshort 0551 3b20 COFF executable (TV)
2232
+ #>12 belong >0 not stripped
2233
+ #>22 beshort >0 - version %ld
2234
+ #
2235
+ # WE32K
2236
+ #
2237
+ 0 beshort 0560 WE32000 COFF
2238
+ >18 beshort ^00000020 object
2239
+ >18 beshort &00000020 executable
2240
+ >12 belong >0 not stripped
2241
+ >18 beshort ^00010000 N/A on 3b2/300 w/paging
2242
+ >18 beshort &00020000 32100 required
2243
+ >18 beshort &00040000 and MAU hardware required
2244
+ >20 beshort 0407 (impure)
2245
+ >20 beshort 0410 (pure)
2246
+ >20 beshort 0413 (demand paged)
2247
+ >20 beshort 0443 (target shared library)
2248
+ >22 beshort >0 - version %ld
2249
+ 0 beshort 0561 WE32000 COFF executable (TV)
2250
+ >12 belong >0 not stripped
2251
+ #>18 beshort &00020000 - 32100 required
2252
+ #>18 beshort &00040000 and MAU hardware required
2253
+ #>22 beshort >0 - version %ld
2254
+ #
2255
+ # core file for 3b2
2256
+ 0 string \000\004\036\212\200 3b2 core file
2257
+ >364 string >\0 of '%s'
2258
+ #------------------------------------------------------------------------------
2259
+ # audio: file(1) magic for sound formats (see also "iff")
2260
+ #
2261
+ # Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com),
2262
+ # and others
2263
+ #
2264
+
2265
+ # Sun/NeXT audio data
2266
+ 0 string .snd Sun/NeXT audio data:
2267
+ >12 belong 1 8-bit ISDN mu-law,
2268
+ !:mime audio/basic
2269
+ >12 belong 2 8-bit linear PCM [REF-PCM],
2270
+ !:mime audio/basic
2271
+ >12 belong 3 16-bit linear PCM,
2272
+ !:mime audio/basic
2273
+ >12 belong 4 24-bit linear PCM,
2274
+ !:mime audio/basic
2275
+ >12 belong 5 32-bit linear PCM,
2276
+ !:mime audio/basic
2277
+ >12 belong 6 32-bit IEEE floating point,
2278
+ !:mime audio/basic
2279
+ >12 belong 7 64-bit IEEE floating point,
2280
+ !:mime audio/basic
2281
+ >12 belong 8 Fragmented sample data,
2282
+ >12 belong 10 DSP program,
2283
+ >12 belong 11 8-bit fixed point,
2284
+ >12 belong 12 16-bit fixed point,
2285
+ >12 belong 13 24-bit fixed point,
2286
+ >12 belong 14 32-bit fixed point,
2287
+ >12 belong 18 16-bit linear with emphasis,
2288
+ >12 belong 19 16-bit linear compressed,
2289
+ >12 belong 20 16-bit linear with emphasis and compression,
2290
+ >12 belong 21 Music kit DSP commands,
2291
+ >12 belong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.),
2292
+ !:mime audio/x-adpcm
2293
+ >12 belong 24 compressed (8-bit CCITT G.722 ADPCM)
2294
+ >12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM),
2295
+ >12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM),
2296
+ >12 belong 27 8-bit A-law (CCITT G.711),
2297
+ >20 belong 1 mono,
2298
+ >20 belong 2 stereo,
2299
+ >20 belong 4 quad,
2300
+ >16 belong >0 %d Hz
2301
+
2302
+ # DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format
2303
+ # that uses little-endian encoding and has a different magic number
2304
+ 0 lelong 0x0064732E DEC audio data:
2305
+ >12 lelong 1 8-bit ISDN mu-law,
2306
+ !:mime audio/x-dec-basic
2307
+ >12 lelong 2 8-bit linear PCM [REF-PCM],
2308
+ !:mime audio/x-dec-basic
2309
+ >12 lelong 3 16-bit linear PCM,
2310
+ !:mime audio/x-dec-basic
2311
+ >12 lelong 4 24-bit linear PCM,
2312
+ !:mime audio/x-dec-basic
2313
+ >12 lelong 5 32-bit linear PCM,
2314
+ !:mime audio/x-dec-basic
2315
+ >12 lelong 6 32-bit IEEE floating point,
2316
+ !:mime audio/x-dec-basic
2317
+ >12 lelong 7 64-bit IEEE floating point,
2318
+ !:mime audio/x-dec-basic
2319
+ >12 belong 8 Fragmented sample data,
2320
+ >12 belong 10 DSP program,
2321
+ >12 belong 11 8-bit fixed point,
2322
+ >12 belong 12 16-bit fixed point,
2323
+ >12 belong 13 24-bit fixed point,
2324
+ >12 belong 14 32-bit fixed point,
2325
+ >12 belong 18 16-bit linear with emphasis,
2326
+ >12 belong 19 16-bit linear compressed,
2327
+ >12 belong 20 16-bit linear with emphasis and compression,
2328
+ >12 belong 21 Music kit DSP commands,
2329
+ >12 lelong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.),
2330
+ !:mime audio/x-dec-basic
2331
+ >12 belong 24 compressed (8-bit CCITT G.722 ADPCM)
2332
+ >12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM),
2333
+ >12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM),
2334
+ >12 belong 27 8-bit A-law (CCITT G.711),
2335
+ >20 lelong 1 mono,
2336
+ >20 lelong 2 stereo,
2337
+ >20 lelong 4 quad,
2338
+ >16 lelong >0 %d Hz
2339
+
2340
+ # Creative Labs AUDIO stuff
2341
+ 0 string MThd Standard MIDI data
2342
+ !:mime audio/midi
2343
+ >8 beshort x (format %d)
2344
+ >10 beshort x using %d track
2345
+ >10 beshort >1 \bs
2346
+ >12 beshort&0x7fff x at 1/%d
2347
+ >12 beshort&0x8000 >0 SMPTE
2348
+
2349
+ 0 string CTMF Creative Music (CMF) data
2350
+ !:mime audio/x-unknown
2351
+ 0 string SBI SoundBlaster instrument data
2352
+ !:mime audio/x-unknown
2353
+ 0 string Creative\ Voice\ File Creative Labs voice data
2354
+ !:mime audio/x-unknown
2355
+ # is this next line right? it came this way...
2356
+ >19 byte 0x1A
2357
+ >23 byte >0 - version %d
2358
+ >22 byte >0 \b.%d
2359
+
2360
+ # first entry is also the string "NTRK"
2361
+ 0 belong 0x4e54524b MultiTrack sound data
2362
+ >4 belong x - version %ld
2363
+
2364
+ # Extended MOD format (*.emd) (Greg Roelofs, newt@uchicago.edu); NOT TESTED
2365
+ # [based on posting 940824 by "Dirk/Elastik", husberg@lehtori.cc.tut.fi]
2366
+ 0 string EMOD Extended MOD sound data,
2367
+ >4 byte&0xf0 x version %d
2368
+ >4 byte&0x0f x \b.%d,
2369
+ >45 byte x %d instruments
2370
+ >83 byte 0 (module)
2371
+ >83 byte 1 (song)
2372
+
2373
+ # Real Audio (Magic .ra\0375)
2374
+ 0 belong 0x2e7261fd RealAudio sound file
2375
+ !:mime audio/x-pn-realaudio
2376
+ 0 string .RMF\0\0\0 RealMedia file
2377
+ !:mime application/vnd.rn-realmedia
2378
+ #video/x-pn-realvideo
2379
+ #video/vnd.rn-realvideo
2380
+ #application/vnd.rn-realmedia
2381
+ # sigh, there are many mimes for that but the above are the most common.
2382
+
2383
+ # MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert@dialin.ind.net]
2384
+ # Oct 31, 1995
2385
+ # fixed by <doj@cubic.org> 2003-06-24
2386
+ # Too short...
2387
+ #0 string MTM MultiTracker Module sound file
2388
+ #0 string if Composer 669 Module sound data
2389
+ #0 string JN Composer 669 Module sound data (extended format)
2390
+ 0 string MAS_U ULT(imate) Module sound data
2391
+
2392
+ #0 string FAR Module sound data
2393
+ #>4 string >\15 Title: "%s"
2394
+
2395
+ 0x2c string SCRM ScreamTracker III Module sound data
2396
+ >0 string >\0 Title: "%s"
2397
+
2398
+ # Gravis UltraSound patches
2399
+ # From <ache@nagual.ru>
2400
+
2401
+ 0 string GF1PATCH110\0ID#000002\0 GUS patch
2402
+ 0 string GF1PATCH100\0ID#000002\0 Old GUS patch
2403
+
2404
+ # mime types according to http://www.geocities.com/nevilo/mod.htm:
2405
+ # audio/it .it
2406
+ # audio/x-zipped-it .itz
2407
+ # audio/xm fasttracker modules
2408
+ # audio/x-s3m screamtracker modules
2409
+ # audio/s3m screamtracker modules
2410
+ # audio/x-zipped-mod mdz
2411
+ # audio/mod mod
2412
+ # audio/x-mod All modules (mod, s3m, 669, mtm, med, xm, it, mdz, stm, itz, xmz, s3z)
2413
+
2414
+ #
2415
+ # Taken from loader code from mikmod version 2.14
2416
+ # by Steve McIntyre (stevem@chiark.greenend.org.uk)
2417
+ # <doj@cubic.org> added title printing on 2003-06-24
2418
+ 0 string MAS_UTrack_V00
2419
+ >14 string >/0 ultratracker V1.%.1s module sound data
2420
+ !:mime audio/x-mod
2421
+ #audio/x-tracker-module
2422
+
2423
+ 0 string UN05 MikMod UNI format module sound data
2424
+
2425
+ 0 string Extended\ Module: Fasttracker II module sound data
2426
+ !:mime audio/x-mod
2427
+ #audio/x-tracker-module
2428
+ >17 string >\0 Title: "%s"
2429
+
2430
+ 21 string/c =!SCREAM! Screamtracker 2 module sound data
2431
+ !:mime audio/x-mod
2432
+ #audio/x-screamtracker-module
2433
+ 21 string BMOD2STM Screamtracker 2 module sound data
2434
+ !:mime audio/x-mod
2435
+ #audio/x-screamtracker-module
2436
+ 1080 string M.K. 4-channel Protracker module sound data
2437
+ !:mime audio/x-mod
2438
+ #audio/x-protracker-module
2439
+ >0 string >\0 Title: "%s"
2440
+ 1080 string M!K! 4-channel Protracker module sound data
2441
+ !:mime audio/x-mod
2442
+ #audio/x-protracker-module
2443
+ >0 string >\0 Title: "%s"
2444
+ 1080 string FLT4 4-channel Startracker module sound data
2445
+ !:mime audio/x-mod
2446
+ #audio/x-startracker-module
2447
+ >0 string >\0 Title: "%s"
2448
+ 1080 string FLT8 8-channel Startracker module sound data
2449
+ !:mime audio/x-mod
2450
+ #audio/x-startracker-module
2451
+ >0 string >\0 Title: "%s"
2452
+ 1080 string 4CHN 4-channel Fasttracker module sound data
2453
+ !:mime audio/x-mod
2454
+ #audio/x-fasttracker-module
2455
+ >0 string >\0 Title: "%s"
2456
+ 1080 string 6CHN 6-channel Fasttracker module sound data
2457
+ !:mime audio/x-mod
2458
+ #audio/x-fasttracker-module
2459
+ >0 string >\0 Title: "%s"
2460
+ 1080 string 8CHN 8-channel Fasttracker module sound data
2461
+ !:mime audio/x-mod
2462
+ #audio/x-fasttracker-module
2463
+ >0 string >\0 Title: "%s"
2464
+ 1080 string CD81 8-channel Octalyser module sound data
2465
+ !:mime audio/x-mod
2466
+ #audio/x-octalysertracker-module
2467
+ >0 string >\0 Title: "%s"
2468
+ 1080 string OKTA 8-channel Octalyzer module sound data
2469
+ !:mime audio/x-mod
2470
+ #audio/x-octalysertracker-module
2471
+ >0 string >\0 Title: "%s"
2472
+ # Not good enough.
2473
+ #1082 string CH
2474
+ #>1080 string >/0 %.2s-channel Fasttracker "oktalyzer" module sound data
2475
+ 1080 string 16CN 16-channel Taketracker module sound data
2476
+ !:mime audio/x-mod
2477
+ #audio/x-taketracker-module
2478
+ >0 string >\0 Title: "%s"
2479
+ 1080 string 32CN 32-channel Taketracker module sound data
2480
+ !:mime audio/x-mod
2481
+ #audio/x-taketracker-module
2482
+ >0 string >\0 Title: "%s"
2483
+
2484
+ # TOC sound files -Trevor Johnson <trevor@jpj.net>
2485
+ #
2486
+ 0 string TOC TOC sound file
2487
+
2488
+ # sidfiles <pooka@iki.fi>
2489
+ # added name,author,(c) and new RSID type by <doj@cubic.org> 2003-06-24
2490
+ 0 string SIDPLAY\ INFOFILE Sidplay info file
2491
+
2492
+ 0 string PSID PlaySID v2.2+ (AMIGA) sidtune
2493
+ >4 beshort >0 w/ header v%d,
2494
+ >14 beshort =1 single song,
2495
+ >14 beshort >1 %d songs,
2496
+ >16 beshort >0 default song: %d
2497
+ >0x16 string >\0 name: "%s"
2498
+ >0x36 string >\0 author: "%s"
2499
+ >0x56 string >\0 copyright: "%s"
2500
+
2501
+ 0 string RSID RSID sidtune PlaySID compatible
2502
+ >4 beshort >0 w/ header v%d,
2503
+ >14 beshort =1 single song,
2504
+ >14 beshort >1 %d songs,
2505
+ >16 beshort >0 default song: %d
2506
+ >0x16 string >\0 name: "%s"
2507
+ >0x36 string >\0 author: "%s"
2508
+ >0x56 string >\0 copyright: "%s"
2509
+
2510
+ # IRCAM <mpruett@sgi.com>
2511
+ # VAX and MIPS files are little-endian; Sun and NeXT are big-endian
2512
+ 0 belong 0x64a30100 IRCAM file (VAX)
2513
+ 0 belong 0x64a30200 IRCAM file (Sun)
2514
+ 0 belong 0x64a30300 IRCAM file (MIPS little-endian)
2515
+ 0 belong 0x64a30400 IRCAM file (NeXT)
2516
+
2517
+ # NIST SPHERE <mpruett@sgi.com>
2518
+ 0 string NIST_1A\n\ \ \ 1024\n NIST SPHERE file
2519
+
2520
+ # Sample Vision <mpruett@sgi.com>
2521
+ 0 string SOUND\ SAMPLE\ DATA\ Sample Vision file
2522
+
2523
+ # Audio Visual Research <tonigonenstein@users.sourceforge.net>
2524
+ 0 string 2BIT Audio Visual Research file,
2525
+ >12 beshort =0 mono,
2526
+ >12 beshort =-1 stereo,
2527
+ >14 beshort x %d bits
2528
+ >16 beshort =0 unsigned,
2529
+ >16 beshort =-1 signed,
2530
+ >22 belong&0x00ffffff x %d Hz,
2531
+ >18 beshort =0 no loop,
2532
+ >18 beshort =-1 loop,
2533
+ >21 ubyte <128 note %d,
2534
+ >22 byte =0 replay 5.485 KHz
2535
+ >22 byte =1 replay 8.084 KHz
2536
+ >22 byte =2 replay 10.971 Khz
2537
+ >22 byte =3 replay 16.168 Khz
2538
+ >22 byte =4 replay 21.942 KHz
2539
+ >22 byte =5 replay 32.336 KHz
2540
+ >22 byte =6 replay 43.885 KHz
2541
+ >22 byte =7 replay 47.261 KHz
2542
+
2543
+ # SGI SoundTrack <mpruett@sgi.com>
2544
+ 0 string _SGI_SoundTrack SGI SoundTrack project file
2545
+ # ID3 version 2 tags <waschk@informatik.uni-rostock.de>
2546
+ 0 string ID3 Audio file with ID3 version 2
2547
+ >3 byte x \b.%d
2548
+ >4 byte x \b.%d
2549
+ >>5 byte &0x80 \b, unsynchronized frames
2550
+ >>5 byte &0x40 \b, extended header
2551
+ >>5 byte &0x20 \b, experimental
2552
+ >>5 byte &0x10 \b, footer present
2553
+ >(6.I) indirect x \b, contains:
2554
+
2555
+ # NSF (NES sound file) magic
2556
+ 0 string NESM\x1a NES Sound File
2557
+ >14 string >\0 ("%s" by
2558
+ >46 string >\0 %s, copyright
2559
+ >78 string >\0 %s),
2560
+ >5 byte x version %d,
2561
+ >6 byte x %d tracks,
2562
+ >122 byte&0x2 =1 dual PAL/NTSC
2563
+ >122 byte&0x1 =1 PAL
2564
+ >122 byte&0x1 =0 NTSC
2565
+
2566
+ # Type: SNES SPC700 sound files
2567
+ # From: Josh Triplett <josh@freedesktop.org>
2568
+ 0 string SNES-SPC700\ Sound\ File\ Data\ v SNES SPC700 sound file
2569
+ >&0 string 0.30 \b, version %s
2570
+ >>0x23 byte 0x1B \b, without ID666 tag
2571
+ >>0x23 byte 0x1A \b, with ID666 tag
2572
+ >>>0x2E string >\0 \b, song "%.32s"
2573
+ >>>0x4E string >\0 \b, game "%.32s"
2574
+
2575
+ # Impulse tracker module (audio/x-it)
2576
+ 0 string IMPM Impulse Tracker module sound data -
2577
+ !:mime audio/x-mod
2578
+ >4 string >\0 "%s"
2579
+ >40 leshort !0 compatible w/ITv%x
2580
+ >42 leshort !0 created w/ITv%x
2581
+
2582
+ # Imago Orpheus module (audio/x-imf)
2583
+ 60 string IM10 Imago Orpheus module sound data -
2584
+ >0 string >\0 "%s"
2585
+
2586
+ # From <collver1@attbi.com>
2587
+ # These are the /etc/magic entries to decode modules, instruments, and
2588
+ # samples in Impulse Tracker's native format.
2589
+
2590
+ 0 string IMPS Impulse Tracker Sample
2591
+ >18 byte &2 16 bit
2592
+ >18 byte ^2 8 bit
2593
+ >18 byte &4 stereo
2594
+ >18 byte ^4 mono
2595
+ 0 string IMPI Impulse Tracker Instrument
2596
+ >28 leshort !0 ITv%x
2597
+ >30 byte !0 %d samples
2598
+
2599
+ # Yamaha TX Wave: file(1) magic for Yamaha TX Wave audio files
2600
+ # From <collver1@attbi.com>
2601
+ 0 string LM8953 Yamaha TX Wave
2602
+ >22 byte 0x49 looped
2603
+ >22 byte 0xC9 non-looped
2604
+ >23 byte 1 33kHz
2605
+ >23 byte 2 50kHz
2606
+ >23 byte 3 16kHz
2607
+
2608
+ # scream tracker: file(1) magic for Scream Tracker sample files
2609
+ #
2610
+ # From <collver1@attbi.com>
2611
+ 76 string SCRS Scream Tracker Sample
2612
+ >0 byte 1 sample
2613
+ >0 byte 2 adlib melody
2614
+ >0 byte >2 adlib drum
2615
+ >31 byte &2 stereo
2616
+ >31 byte ^2 mono
2617
+ >31 byte &4 16bit little endian
2618
+ >31 byte ^4 8bit
2619
+ >30 byte 0 unpacked
2620
+ >30 byte 1 packed
2621
+
2622
+ # audio
2623
+ # From: Cory Dikkers <cdikkers@swbell.net>
2624
+ 0 string MMD0 MED music file, version 0
2625
+ 0 string MMD1 OctaMED Pro music file, version 1
2626
+ 0 string MMD3 OctaMED Soundstudio music file, version 3
2627
+ 0 string OctaMEDCmpr OctaMED Soundstudio compressed file
2628
+ 0 string MED MED_Song
2629
+ 0 string SymM Symphonie SymMOD music file
2630
+ #
2631
+ 0 string THX AHX version
2632
+ >3 byte =0 1 module data
2633
+ >3 byte =1 2 module data
2634
+ #
2635
+ 0 string OKTASONG Oktalyzer module data
2636
+ #
2637
+ 0 string DIGI\ Booster\ module\0 %s
2638
+ >20 byte >0 %c
2639
+ >>21 byte >0 \b%c
2640
+ >>>22 byte >0 \b%c
2641
+ >>>>23 byte >0 \b%c
2642
+ >610 string >\0 \b, "%s"
2643
+ #
2644
+ 0 string DBM0 DIGI Booster Pro Module
2645
+ >4 byte >0 V%X.
2646
+ >>5 byte x \b%02X
2647
+ >16 string >\0 \b, "%s"
2648
+ #
2649
+ 0 string FTMN FaceTheMusic module
2650
+ >16 string >\0d \b, "%s"
2651
+
2652
+ # From: <doj@cubic.org> 2003-06-24
2653
+ 0 string AMShdr\32 Velvet Studio AMS Module v2.2
2654
+ 0 string Extreme Extreme Tracker AMS Module v1.3
2655
+ 0 string DDMF Xtracker DMF Module
2656
+ >4 byte x v%i
2657
+ >0xD string >\0 Title: "%s"
2658
+ >0x2B string >\0 Composer: "%s"
2659
+ 0 string DSM\32 Dynamic Studio Module DSM
2660
+ 0 string SONG DigiTrekker DTM Module
2661
+ 0 string DMDL DigiTrakker MDL Module
2662
+ 0 string PSM\32 Protracker Studio PSM Module
2663
+ 44 string PTMF Poly Tracker PTM Module
2664
+ >0 string >\32 Title: "%s"
2665
+ 0 string MT20 MadTracker 2.0 Module MT2
2666
+ 0 string RAD\40by\40REALiTY!! RAD Adlib Tracker Module RAD
2667
+ 0 string RTMM RTM Module
2668
+ 0x426 string MaDoKaN96 XMS Adlib Module
2669
+ >0 string >\0 Composer: "%s"
2670
+ 0 string AMF AMF Module
2671
+ >4 string >\0 Title: "%s"
2672
+ 0 string MODINFO1 Open Cubic Player Module Inforation MDZ
2673
+ 0 string Extended\40Instrument: Fast Tracker II Instrument
2674
+
2675
+ # From: Takeshi Hamasaki <hma@syd.odn.ne.jp>
2676
+ # NOA Nancy Codec file
2677
+ 0 string \210NOA\015\012\032 NOA Nancy Codec Movie file
2678
+ # Yamaha SMAF format
2679
+ 0 string MMMD Yamaha SMAF file
2680
+ # Sharp Jisaku Melody format for PDC
2681
+ 0 string \001Sharp\040JisakuMelody SHARP Cell-Phone ringing Melody
2682
+ >20 string Ver01.00 Ver. 1.00
2683
+ >>32 byte x , %d tracks
2684
+
2685
+ # Free lossless audio codec <http://flac.sourceforge.net>
2686
+ # From: Przemyslaw Augustyniak <silvathraec@rpg.pl>
2687
+ 0 string fLaC FLAC audio bitstream data
2688
+ !:mime audio/x-flac
2689
+ >4 byte&0x7f >0 \b, unknown version
2690
+ >4 byte&0x7f 0 \b
2691
+ # some common bits/sample values
2692
+ >>20 beshort&0x1f0 0x030 \b, 4 bit
2693
+ >>20 beshort&0x1f0 0x050 \b, 6 bit
2694
+ >>20 beshort&0x1f0 0x070 \b, 8 bit
2695
+ >>20 beshort&0x1f0 0x0b0 \b, 12 bit
2696
+ >>20 beshort&0x1f0 0x0f0 \b, 16 bit
2697
+ >>20 beshort&0x1f0 0x170 \b, 24 bit
2698
+ >>20 byte&0xe 0x0 \b, mono
2699
+ >>20 byte&0xe 0x2 \b, stereo
2700
+ >>20 byte&0xe 0x4 \b, 3 channels
2701
+ >>20 byte&0xe 0x6 \b, 4 channels
2702
+ >>20 byte&0xe 0x8 \b, 5 channels
2703
+ >>20 byte&0xe 0xa \b, 6 channels
2704
+ >>20 byte&0xe 0xc \b, 7 channels
2705
+ >>20 byte&0xe 0xe \b, 8 channels
2706
+ # some common sample rates
2707
+ >>17 belong&0xfffff0 0x0ac440 \b, 44.1 kHz
2708
+ >>17 belong&0xfffff0 0x0bb800 \b, 48 kHz
2709
+ >>17 belong&0xfffff0 0x07d000 \b, 32 kHz
2710
+ >>17 belong&0xfffff0 0x056220 \b, 22.05 kHz
2711
+ >>17 belong&0xfffff0 0x05dc00 \b, 24 kHz
2712
+ >>17 belong&0xfffff0 0x03e800 \b, 16 kHz
2713
+ >>17 belong&0xfffff0 0x02b110 \b, 11.025 kHz
2714
+ >>17 belong&0xfffff0 0x02ee00 \b, 12 kHz
2715
+ >>17 belong&0xfffff0 0x01f400 \b, 8 kHz
2716
+ >>17 belong&0xfffff0 0x177000 \b, 96 kHz
2717
+ >>17 belong&0xfffff0 0x0fa000 \b, 64 kHz
2718
+ >>21 byte&0xf >0 \b, >4G samples
2719
+ >>21 byte&0xf 0 \b
2720
+ >>>22 belong >0 \b, %u samples
2721
+ >>>22 belong 0 \b, length unknown
2722
+
2723
+ # (ISDN) VBOX voice message file (Wolfram Kleff)
2724
+ 0 string VBOX VBOX voice message data
2725
+
2726
+ # ReBorn Song Files (.rbs)
2727
+ # David J. Singer <doc@deadvirgins.org.uk>
2728
+ 8 string RB40 RBS Song file
2729
+ >29 string ReBorn created by ReBorn
2730
+ >37 string Propellerhead created by ReBirth
2731
+
2732
+ # Synthesizer Generator and Kimwitu share their file format
2733
+ 0 string A#S#C#S#S#L#V#3 Synthesizer Generator or Kimwitu data
2734
+ # Kimwitu++ uses a slightly different magic
2735
+ 0 string A#S#C#S#S#L#HUB Kimwitu++ data
2736
+
2737
+ # From "Simon Hosie
2738
+ 0 string TFMX-SONG TFMX module sound data
2739
+
2740
+ # Monkey's Audio compressed audio format (.ape)
2741
+ # From danny.milo@gmx.net (Danny Milosavljevic)
2742
+ # New version from Abel Cheung <abel (@) oaka.org>
2743
+ 0 string MAC\040 Monkey's Audio compressed format
2744
+ >4 uleshort >0x0F8B version %d
2745
+ >>(0x08.l) uleshort =1000 with fast compression
2746
+ >>(0x08.l) uleshort =2000 with normal compression
2747
+ >>(0x08.l) uleshort =3000 with high compression
2748
+ >>(0x08.l) uleshort =4000 with extra high compression
2749
+ >>(0x08.l) uleshort =5000 with insane compression
2750
+ >>(0x08.l+18) uleshort =1 \b, mono
2751
+ >>(0x08.l+18) uleshort =2 \b, stereo
2752
+ >>(0x08.l+20) ulelong x \b, sample rate %d
2753
+ >4 uleshort <0x0F8C version %d
2754
+ >>6 uleshort =1000 with fast compression
2755
+ >>6 uleshort =2000 with normal compression
2756
+ >>6 uleshort =3000 with high compression
2757
+ >>6 uleshort =4000 with extra high compression
2758
+ >>6 uleshort =5000 with insane compression
2759
+ >>10 uleshort =1 \b, mono
2760
+ >>10 uleshort =2 \b, stereo
2761
+ >>12 ulelong x \b, sample rate %d
2762
+
2763
+ # adlib sound files
2764
+ # From Gürkan Sengün <gurkan@linuks.mine.nu>, http://www.linuks.mine.nu
2765
+ 0 string RAWADATA RdosPlay RAW
2766
+
2767
+ 1068 string RoR AMUSIC Adlib Tracker
2768
+
2769
+ 0 string JCH EdLib
2770
+
2771
+ 0 string mpu401tr MPU-401 Trakker
2772
+
2773
+ 0 string SAdT Surprise! Adlib Tracker
2774
+ >4 byte x Version %d
2775
+
2776
+ 0 string XAD! eXotic ADlib
2777
+
2778
+ 0 string ofTAZ! eXtra Simple Music
2779
+
2780
+ # Spectrum 128 tunes (.ay files).
2781
+ # From: Emanuel Haupt <ehaupt@critical.ch>
2782
+ 0 string ZXAYEMUL Spectrum 128 tune
2783
+
2784
+ 0 string \0BONK BONK,
2785
+ #>5 byte x version %d
2786
+ >14 byte x %d channel(s),
2787
+ >15 byte =1 lossless,
2788
+ >15 byte =0 lossy,
2789
+ >16 byte x mid-side
2790
+
2791
+ 384 string LockStream LockStream Embedded file (mostly MP3 on old Nokia phones)
2792
+
2793
+ # format VQF (proprietary codec for sound)
2794
+ # some infos on the header file available at :
2795
+ # http://www.twinvq.org/english/technology_format.html
2796
+ 0 string TWIN97012000 VQF data
2797
+ >27 short 0 \b, Mono
2798
+ >27 short 1 \b, Stereo
2799
+ >31 short >0 \b, %d kbit/s
2800
+ >35 short >0 \b, %d kHz
2801
+
2802
+ # Nelson A. de Oliveira (naoliv@gmail.com)
2803
+ # .eqf
2804
+ 0 string Winamp\ EQ\ library\ file %s
2805
+ # it will match only versions like v<digit>.<digit>
2806
+ # Since I saw only eqf files with version v1.1 I think that it's OK
2807
+ >23 string x \b%.4s
2808
+ # .preset
2809
+ 0 string [Equalizer\ preset] XMMS equalizer preset
2810
+ # .m3u
2811
+ 0 search/1 #EXTM3U M3U playlist text
2812
+ # .pls
2813
+ 0 search/1 [playlist] PLS playlist text
2814
+ # licq.conf
2815
+ 1 string [licq] LICQ configuration file
2816
+
2817
+ # Atari ST audio files by Dirk Jagdmann <doj@cubic.org>
2818
+ 0 string ICE! SNDH Atari ST music
2819
+ 0 string SC68\ Music-file\ /\ (c)\ (BeN)jami sc68 Atari ST music
2820
+
2821
+ # musepak support From: "Jiri Pejchal" <jiri.pejchal@gmail.com>
2822
+ 0 string MP+ Musepack audio
2823
+ >3 byte 255 \b, SV pre8
2824
+ >3 byte&0xF 0x6 \b, SV 6
2825
+ >3 byte&0xF 0x8 \b, SV 8
2826
+ >3 byte&0xF 0x7 \b, SV 7
2827
+ >>3 byte&0xF0 0x0 \b.0
2828
+ >>3 byte&0xF0 0x10 \b.1
2829
+ >>3 byte&0xF0 240 \b.15
2830
+ >>10 byte&0xF0 0x0 \b, no profile
2831
+ >>10 byte&0xF0 0x10 \b, profile 'Unstable/Experimental'
2832
+ >>10 byte&0xF0 0x50 \b, quality 0
2833
+ >>10 byte&0xF0 0x60 \b, quality 1
2834
+ >>10 byte&0xF0 0x70 \b, quality 2 (Telephone)
2835
+ >>10 byte&0xF0 0x80 \b, quality 3 (Thumb)
2836
+ >>10 byte&0xF0 0x90 \b, quality 4 (Radio)
2837
+ >>10 byte&0xF0 0xA0 \b, quality 5 (Standard)
2838
+ >>10 byte&0xF0 0xB0 \b, quality 6 (Xtreme)
2839
+ >>10 byte&0xF0 0xC0 \b, quality 7 (Insane)
2840
+ >>10 byte&0xF0 0xD0 \b, quality 8 (BrainDead)
2841
+ >>10 byte&0xF0 0xE0 \b, quality 9
2842
+ >>10 byte&0xF0 0xF0 \b, quality 10
2843
+ >>27 byte 0x0 \b, Buschmann 1.7.0-9, Klemm 0.90-1.05
2844
+ >>27 byte 102 \b, Beta 1.02
2845
+ >>27 byte 104 \b, Beta 1.04
2846
+ >>27 byte 105 \b, Alpha 1.05
2847
+ >>27 byte 106 \b, Beta 1.06
2848
+ >>27 byte 110 \b, Release 1.1
2849
+ >>27 byte 111 \b, Alpha 1.11
2850
+ >>27 byte 112 \b, Beta 1.12
2851
+ >>27 byte 113 \b, Alpha 1.13
2852
+ >>27 byte 114 \b, Beta 1.14
2853
+ >>27 byte 115 \b, Alpha 1.15
2854
+
2855
+ # IMY
2856
+ # from http://filext.com/detaillist.php?extdetail=IMY
2857
+ # http://cellphones.about.com/od/cellularfaqs/f/rf_imelody.htm
2858
+ # http://download.ncl.ie/doc/api/ie/ncl/media/music/IMelody.html
2859
+ # http://www.wx800.com/msg/download/irda/iMelody.pdf
2860
+ 0 string BEGIN:IMELODY iMelody Ringtone Format
2861
+
2862
+ # From: "Mateus Caruccio" <mateus@caruccio.com>
2863
+ # guitar pro v3,4,5 from http://filext.com/file-extension/gp3
2864
+ 0 string \030FICHIER\ GUITAR\ PRO\ v3. Guitar Pro Ver. 3 Tablature
2865
+
2866
+ # From: "Leslie P. Polzer" <leslie.polzer@gmx.net>
2867
+ 60 string SONG SoundFX Module sound file
2868
+
2869
+ # Type: Adaptive Multi-Rate Codec
2870
+ # URL: http://filext.com/detaillist.php?extdetail=AMR
2871
+ # From: Russell Coker <russell@coker.com.au>
2872
+ 0 string #!AMR Adaptive Multi-Rate Codec (GSM telephony)
2873
+
2874
+ # Type: SuperCollider 3 Synth Definition File Format
2875
+ # From: Mario Lang <mlang@debian.org>
2876
+ 0 string SCgf SuperCollider3 Synth Definition file,
2877
+ >4 belong x version %d
2878
+ #----------------------------------------------------------------
2879
+ # basis: file(1) magic for BBx/Pro5-files
2880
+ # Oliver Dammer <dammer@olida.de> 2005/11/07
2881
+ # http://www.basis.com business-basic-files.
2882
+ #
2883
+ 0 string \074\074bbx\076\076 BBx
2884
+ >7 string \000 indexed file
2885
+ >7 string \001 serial file
2886
+ >7 string \002 keyed file
2887
+ >>13 short 0 (sort)
2888
+ >7 string \004 program
2889
+ >>18 byte x (LEVEL %d)
2890
+ >>>23 string >\000 psaved
2891
+ >7 string \006 mkeyed file
2892
+ >>13 short 0 (sort)
2893
+ >>8 string \000 (mkey)
2894
+ #------------------------------------------------------------------------------
2895
+ # bFLT: file(1) magic for BFLT uclinux binary files
2896
+ #
2897
+ # From Philippe De Muyter <phdm@macqel.be>
2898
+ #
2899
+ 0 string bFLT BFLT executable
2900
+ >4 belong x - version %ld
2901
+ >4 belong 4
2902
+ >>36 belong&0x1 0x1 ram
2903
+ >>36 belong&0x2 0x2 gotpic
2904
+ >>36 belong&0x4 0x4 gzip
2905
+ >>36 belong&0x8 0x8 gzdata
2906
+ #------------------------------------------------------------------------------
2907
+ # blender: file(1) magic for Blender 3D related files
2908
+ #
2909
+ # Native format rule v1.2. For questions use the developers list
2910
+ # http://lists.blender.org/mailman/listinfo/bf-committers
2911
+ # GLOB chunk was moved near start and provides subversion info since 2.42
2912
+
2913
+ 0 string =BLENDER Blender3D,
2914
+ >7 string =_ saved as 32-bits
2915
+ >>8 string =v little endian
2916
+ >>>9 byte x with version %c.
2917
+ >>>10 byte x \b%c
2918
+ >>>11 byte x \b%c
2919
+ >>>0x40 string =GLOB \b.
2920
+ >>>>0x58 leshort x \b%.4d
2921
+ >>8 string =V big endian
2922
+ >>>9 byte x with version %c.
2923
+ >>>10 byte x \b%c
2924
+ >>>11 byte x \b%c
2925
+ >>>0x40 string =GLOB \b.
2926
+ >>>>0x58 beshort x \b%.4d
2927
+ >7 string =- saved as 64-bits
2928
+ >>8 string =v little endian
2929
+ >>9 byte x with version %c.
2930
+ >>10 byte x \b%c
2931
+ >>11 byte x \b%c
2932
+ >>0x44 string =GLOB \b.
2933
+ >>>0x60 leshort x \b%.4d
2934
+ >>8 string =V big endian
2935
+ >>>9 byte x with version %c.
2936
+ >>>10 byte x \b%c
2937
+ >>>11 byte x \b%c
2938
+ >>>0x44 string =GLOB \b.
2939
+ >>>>0x60 beshort x \b%.4d
2940
+
2941
+ # Scripts that run in the embeded Python interpreter
2942
+ 0 string #!BPY Blender3D BPython script
2943
+
2944
+ #------------------------------------------------------------------------------
2945
+ # blit: file(1) magic for 68K Blit stuff as seen from 680x0 machine
2946
+ #
2947
+ # Note that this 0407 conflicts with several other a.out formats...
2948
+ #
2949
+ # XXX - should this be redone with "be" and "le", so that it works on
2950
+ # little-endian machines as well? If so, what's the deal with
2951
+ # "VAX-order" and "VAX-order2"?
2952
+ #
2953
+ #0 long 0407 68K Blit (standalone) executable
2954
+ #0 short 0407 VAX-order2 68K Blit (standalone) executable
2955
+ 0 short 03401 VAX-order 68K Blit (standalone) executable
2956
+ 0 long 0406 68k Blit mpx/mux executable
2957
+ 0 short 0406 VAX-order2 68k Blit mpx/mux executable
2958
+ 0 short 03001 VAX-order 68k Blit mpx/mux executable
2959
+ # Need more values for WE32 DMD executables.
2960
+ # Note that 0520 is the same as COFF
2961
+ #0 short 0520 tty630 layers executable
2962
+ #
2963
+ # i80960 b.out objects and archives
2964
+ #
2965
+ 0 long 0x10d i960 b.out relocatable object
2966
+ >16 long >0 not stripped
2967
+ #
2968
+ # b.out archive (hp-rt on i960)
2969
+ 0 string =!<bout> b.out archive
2970
+ >8 string __.SYMDEF random library
2971
+ #------------------------------------------------------------------------------
2972
+ # bsdi: file(1) magic for BSD/OS (from BSDI) objects
2973
+ #
2974
+
2975
+ 0 lelong 0314 386 compact demand paged pure executable
2976
+ >16 lelong >0 not stripped
2977
+ >32 byte 0x6a (uses shared libs)
2978
+
2979
+ 0 lelong 0407 386 executable
2980
+ >16 lelong >0 not stripped
2981
+ >32 byte 0x6a (uses shared libs)
2982
+
2983
+ 0 lelong 0410 386 pure executable
2984
+ >16 lelong >0 not stripped
2985
+ >32 byte 0x6a (uses shared libs)
2986
+
2987
+ 0 lelong 0413 386 demand paged pure executable
2988
+ >16 lelong >0 not stripped
2989
+ >32 byte 0x6a (uses shared libs)
2990
+
2991
+ # same as in SunOS 4.x, except for static shared libraries
2992
+ 0 belong&077777777 0600413 sparc demand paged
2993
+ >0 byte &0x80
2994
+ >>20 belong <4096 shared library
2995
+ >>20 belong =4096 dynamically linked executable
2996
+ >>20 belong >4096 dynamically linked executable
2997
+ >0 byte ^0x80 executable
2998
+ >16 belong >0 not stripped
2999
+ >36 belong 0xb4100001 (uses shared libs)
3000
+
3001
+ 0 belong&077777777 0600410 sparc pure
3002
+ >0 byte &0x80 dynamically linked executable
3003
+ >0 byte ^0x80 executable
3004
+ >16 belong >0 not stripped
3005
+ >36 belong 0xb4100001 (uses shared libs)
3006
+
3007
+ 0 belong&077777777 0600407 sparc
3008
+ >0 byte &0x80 dynamically linked executable
3009
+ >0 byte ^0x80 executable
3010
+ >16 belong >0 not stripped
3011
+ >36 belong 0xb4100001 (uses shared libs)
3012
+ #------------------------------------------------------------------------------
3013
+ # BTSnoop: file(1) magic for BTSnoop files
3014
+ #
3015
+ # From <marcel@holtmann.org>
3016
+ 0 string btsnoop\0 BTSnoop
3017
+ >8 belong x version %d,
3018
+ >12 belong 1001 Unencapsulated HCI
3019
+ >12 belong 1002 HCI UART (H4)
3020
+ >12 belong 1003 HCI BCSP
3021
+ >12 belong 1004 HCI Serial (H5)
3022
+ >>12 belong x type %d
3023
+ #------------------------------------------------------------------------------
3024
+ # c-lang: file(1) magic for C programs (or REXX)
3025
+ #
3026
+
3027
+ # XPM icons (Greg Roelofs, newt@uchicago.edu)
3028
+ # if you uncomment "/*" for C/REXX below, also uncomment this entry
3029
+ #0 string /*\ XPM\ */ X pixmap image data
3030
+ #!:mime image/x-xpmi
3031
+
3032
+ # 3DS (3d Studio files) Conflicts with diff output 0x3d '='
3033
+ #16 beshort 0x3d3d image/x-3ds
3034
+
3035
+ # this first will upset you if you're a PL/1 shop...
3036
+ # in which case rm it; ascmagic will catch real C programs
3037
+ #0 search/1 /* C or REXX program text
3038
+ #0 search/1 // C++ program text
3039
+
3040
+ # From: Mikhail Teterin <mi@aldan.algebra.com>
3041
+ 0 string cscope cscope reference data
3042
+ >7 string x version %.2s
3043
+ # We skip the path here, because it is often long (so file will
3044
+ # truncate it) and mostly redundant.
3045
+ # The inverted index functionality was added some time betwen
3046
+ # versions 11 and 15, so look for -q if version is above 14:
3047
+ >7 string >14
3048
+ >>10 search/100 \ -q\ with inverted index
3049
+ >10 search/100 \ -c\ text (non-compressed)
3050
+ #------------------------------------------------------------------------------
3051
+ # c64: file(1) magic for various commodore 64 related files
3052
+ #
3053
+ # From: Dirk Jagdmann <doj@cubic.org>
3054
+
3055
+ 0x16500 belong 0x12014100 D64 Image
3056
+ 0x16500 belong 0x12014180 D71 Image
3057
+ 0x61800 belong 0x28034400 D81 Image
3058
+ 0 string C64\40CARTRIDGE CCS C64 Emultar Cartridge Image
3059
+ 0 belong 0x43154164 X64 Image
3060
+
3061
+ 0 string GCR-1541 GCR Image
3062
+ >8 byte x version: %i
3063
+ >9 byte x tracks: %i
3064
+
3065
+ 9 string PSUR ARC archive (c64)
3066
+ 2 string -LH1- LHA archive (c64)
3067
+
3068
+ 0 string C64File PC64 Emulator file
3069
+ >8 string >\0 "%s"
3070
+ 0 string C64Image PC64 Freezer Image
3071
+
3072
+ 0 beshort 0x38CD C64 PCLink Image
3073
+ 0 string CBM\144\0\0 Power 64 C64 Emulator Snapshot
3074
+
3075
+ 0 belong 0xFF424CFF WRAptor packer (c64)
3076
+
3077
+ 0 string C64S\x20tape\x20file T64 tape Image
3078
+ >32 leshort x Version:0x%x
3079
+ >36 leshort !0 Entries:%i
3080
+ >40 string x Name:%.24s
3081
+
3082
+ 0 string C64\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image
3083
+ >32 leshort x Version:0x%x
3084
+ >36 leshort !0 Entries:%i
3085
+ >40 string x Name:%.24s
3086
+
3087
+ 0 string C64S\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image
3088
+ >32 leshort x Version:0x%x
3089
+ >36 leshort !0 Entries:%i
3090
+ >40 string x Name:%.24s
3091
+
3092
+ #------------------------------------------------------------------------------
3093
+ # autocad: file(1) magic for cad files
3094
+ #
3095
+
3096
+ # AutoCAD DWG versions R13/R14 (www.autodesk.com)
3097
+ # Written December 01, 2003 by Lester Hightower
3098
+ # Based on the DWG File Format Specifications at http://www.opendwg.org/
3099
+ 0 string \101\103\061\060\061 AutoCAD
3100
+ >5 string \062\000\000\000\000 DWG ver. R13
3101
+ >5 string \064\000\000\000\000 DWG ver. R14
3102
+
3103
+ # Microstation DGN/CIT Files (www.bentley.com)
3104
+ # Last updated July 29, 2005 by Lester Hightower
3105
+ # DGN is the default file extension of Microstation/Intergraph CAD files.
3106
+ # CIT is the proprietary raster format (similar to TIFF) used to attach
3107
+ # raster underlays to Microstation DGN (vector) drawings.
3108
+ #
3109
+ # http://www.wotsit.org/search.asp
3110
+ # http://filext.com/detaillist.php?extdetail=DGN
3111
+ # http://filext.com/detaillist.php?extdetail=CIT
3112
+ #
3113
+ # http://www.bentley.com/products/default.cfm?objectid=97F351F5-9C35-4E5E-89C2
3114
+ # 3F86C928&method=display&p_objectid=97F351F5-9C35-4E5E-89C280A93F86C928
3115
+ # http://www.bentley.com/products/default.cfm?objectid=A5C2FD43-3AC9-4C71-B682
3116
+ # 721C479F&method=display&p_objectid=A5C2FD43-3AC9-4C71-B682C7BE721C479F
3117
+ 0 string \010\011\376 Microstation
3118
+ >3 string \002
3119
+ >>30 string \026\105 DGNFile
3120
+ >>30 string \034\105 DGNFile
3121
+ >>30 string \073\107 DGNFile
3122
+ >>30 string \073\110 DGNFile
3123
+ >>30 string \106\107 DGNFile
3124
+ >>30 string \110\103 DGNFile
3125
+ >>30 string \120\104 DGNFile
3126
+ >>30 string \172\104 DGNFile
3127
+ >>30 string \172\105 DGNFile
3128
+ >>30 string \172\106 DGNFile
3129
+ >>30 string \234\106 DGNFile
3130
+ >>30 string \273\105 DGNFile
3131
+ >>30 string \306\106 DGNFile
3132
+ >>30 string \310\104 DGNFile
3133
+ >>30 string \341\104 DGNFile
3134
+ >>30 string \372\103 DGNFile
3135
+ >>30 string \372\104 DGNFile
3136
+ >>30 string \372\106 DGNFile
3137
+ >>30 string \376\103 DGNFile
3138
+ >4 string \030\000\000 CITFile
3139
+ >4 string \030\000\003 CITFile
3140
+
3141
+ # AutoCad, from Nahuel Greco
3142
+ # AutoCAD DWG versions R12/R13/R14 (www.autodesk.com)
3143
+ 0 string AC1012 AutoCad (release 12)
3144
+ 0 string AC1013 AutoCad (release 13)
3145
+ 0 string AC1014 AutoCad (release 14)
3146
+
3147
+ # CAD: file(1) magic for computer aided design files
3148
+ # Phillip Griffith <phillip dot griffith at gmail dot com>
3149
+ # AutoCAD magic taken from the Open Design Alliance's OpenDWG specifications.
3150
+ #
3151
+ 0 belong 0x08051700 Bentley/Intergraph MicroStation DGN cell library
3152
+ 0 belong 0x0809fe02 Bentley/Intergraph MicroStation DGN vector CAD
3153
+ 0 belong 0xc809fe02 Bentley/Intergraph MicroStation DGN vector CAD
3154
+ 0 beshort 0x0809 Bentley/Intergraph MicroStation
3155
+ >0x02 byte 0xfe
3156
+ >>0x04 beshort 0x1800 CIT raster CAD
3157
+ 0 string AC1012 AutoDesk AutoCAD R13
3158
+ 0 string AC1014 AutoDesk AutoCAD R14
3159
+ 0 string AC1015 AutoDesk AutoCAD R2000
3160
+ #------------------------------------------------------------------------------
3161
+ # Cafe Babes unite!
3162
+ #
3163
+ # Since Java bytecode and Mach-O fat-files have the same magic number, the test
3164
+ # must be performed in the same "magic" sequence to get both right. The long
3165
+ # at offset 4 in a mach-O fat file tells the number of architectures; the short at
3166
+ # offset 4 in a Java bytecode file is the JVM minor version and the
3167
+ # short at offset 6 is the JVM major version. Since there are only
3168
+ # only 18 labeled Mach-O architectures at current, and the first released
3169
+ # Java class format was version 43.0, we can safely choose any number
3170
+ # between 18 and 39 to test the number of architectures against
3171
+ # (and use as a hack). Let's not use 18, because the Mach-O people
3172
+ # might add another one or two as time goes by...
3173
+ #
3174
+ 0 belong 0xcafebabe
3175
+ !:mime application/x-java-applet
3176
+ >4 belong >30 compiled Java class data,
3177
+ >>6 beshort x version %d.
3178
+ >>4 beshort x \b%d
3179
+ # Which is which?
3180
+ #>>4 belong 0x032d (Java 1.0)
3181
+ #>>4 belong 0x032d (Java 1.1)
3182
+ >>4 belong 0x002e (Java 1.2)
3183
+ >>4 belong 0x002f (Java 1.3)
3184
+ >>4 belong 0x0030 (Java 1.4)
3185
+ >>4 belong 0x0031 (Java 1.5)
3186
+ >>4 belong 0x0032 (Java 1.6)
3187
+
3188
+
3189
+ 0 belong 0xcafebabe
3190
+ >4 belong 1 Mach-O fat file with 1 architecture
3191
+ >4 belong >1
3192
+ >>4 belong <20 Mach-O fat file with %ld architectures
3193
+
3194
+ 0 belong 0xcafed00d JAR compressed with pack200,
3195
+ >>5 byte x version %d.
3196
+ >>4 byte x \b%d
3197
+ !:mime application/x-java-pack200
3198
+ #------------------------------------------------------------------------------
3199
+ # CDDB: file(1) magic for CDDB(tm) format CD text data files
3200
+ #
3201
+ # From <steve@gracenote.com>
3202
+ #
3203
+ # This is the /etc/magic entry to decode datafiles as used by
3204
+ # CDDB-enabled CD player applications.
3205
+ #
3206
+
3207
+ 0 search/1/b #\040xmcd CDDB(tm) format CD text data
3208
+
3209
+ #------------------------------------------------------------------------------
3210
+ # chord: file(1) magic for Chord music sheet typesetting utility input files
3211
+ #
3212
+ # From Philippe De Muyter <phdm@macqel.be>
3213
+ # File format is actually free, but many distributed files begin with `{title'
3214
+ #
3215
+ 0 string {title Chord text file
3216
+
3217
+ # Type: PowerTab file format
3218
+ # URL: http://www.power-tab.net/
3219
+ # From: Jelmer Vernooij <jelmer@samba.org>
3220
+ 0 string ptab\003\000 Power-Tab v3 Tablature File
3221
+ 0 string ptab\004\000 Power-Tab v4 Tablature File
3222
+ #------------------------------------------------------------------------------
3223
+ # cisco: file(1) magic for cisco Systems routers
3224
+ #
3225
+ # Most cisco file-formats are covered by the generic elf code
3226
+ #
3227
+ # Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha.
3228
+ 0 belong&0xffffff00 0x85011400 cisco IOS microcode
3229
+ >7 string >\0 for '%s'
3230
+ 0 belong&0xffffff00 0x8501cb00 cisco IOS experimental microcode
3231
+ >7 string >\0 for '%s'
3232
+ #------------------------------------------------------------------------------
3233
+ # citrus locale declaration
3234
+ #
3235
+
3236
+ 0 string RuneCT Citrus locale declaration for LC_CTYPE
3237
+
3238
+
3239
+ #------------------------------------------------------------------------------
3240
+ # clarion: file(1) magic for # Clarion Personal/Professional Developer
3241
+ # (v2 and above)
3242
+ # From: Julien Blache <jb@jblache.org>
3243
+
3244
+ # Database files
3245
+ # signature
3246
+ 0 leshort 0x3343 Clarion Developer (v2 and above) data file
3247
+ # attributes
3248
+ >2 leshort &0x0001 \b, locked
3249
+ >2 leshort &0x0004 \b, encrypted
3250
+ >2 leshort &0x0008 \b, memo file exists
3251
+ >2 leshort &0x0010 \b, compressed
3252
+ >2 leshort &0x0040 \b, read only
3253
+ # number of records
3254
+ >5 lelong x \b, %ld records
3255
+
3256
+ # Memo files
3257
+ 0 leshort 0x334d Clarion Developer (v2 and above) memo data
3258
+
3259
+ # Key/Index files
3260
+ # No magic? :(
3261
+
3262
+ # Help files
3263
+ 0 leshort 0x49e0 Clarion Developer (v2 and above) help data
3264
+
3265
+ #------------------------------------------------------------------------------
3266
+ # claris: file(1) magic for claris
3267
+ # "H. Nanosecond" <aldomel@ix.netcom.com>
3268
+ # Claris Works a word processor, etc.
3269
+ # Version 3.0
3270
+
3271
+ # .pct claris works clip art files
3272
+ #0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
3273
+ #*
3274
+ #0001000 #010 250 377 377 377 377 000 213 000 230 000 021 002 377 014 000
3275
+ #null to byte 1000 octal
3276
+ 514 string \377\377\377\377\000 Claris clip art?
3277
+ >0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes.
3278
+ 514 string \377\377\377\377\001 Claris clip art?
3279
+ >0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes.
3280
+
3281
+ # Claris works files
3282
+ # .cwk
3283
+ 0 string \002\000\210\003\102\117\102\117\000\001\206 Claris works document
3284
+ # .plt
3285
+ 0 string \020\341\000\000\010\010 Claris Works pallete files .plt
3286
+
3287
+ # .msp a dictionary file I am not sure about this I have only one .msp file
3288
+ 0 string \002\271\262\000\040\002\000\164 Claris works dictionary
3289
+
3290
+ # .usp are user dictionary bits
3291
+ # I am not sure about a magic header:
3292
+ #0000000 001 123 160 146 070 125 104 040 136 123 015 012 160 157 144 151
3293
+ # soh S p f 8 U D sp ^ S cr nl p o d i
3294
+ #0000020 141 164 162 151 163 164 040 136 123 015 012 144 151 166 040 043
3295
+ # a t r i s t sp ^ S cr nl d i v sp #
3296
+
3297
+ # .mth Thesaurus
3298
+ # starts with \0 but no magic header
3299
+
3300
+ # .chy Hyphenation file
3301
+ # I am not sure: 000 210 034 000 000
3302
+
3303
+ # other claris files
3304
+ #./windows/claris/useng.ndx: data
3305
+ #./windows/claris/xtndtran.l32: data
3306
+ #./windows/claris/xtndtran.lst: data
3307
+ #./windows/claris/clworks.lbl: data
3308
+ #./windows/claris/clworks.prf: data
3309
+ #./windows/claris/userd.spl: data
3310
+
3311
+ #------------------------------------------------------------------------------
3312
+ # clipper: file(1) magic for Intergraph (formerly Fairchild) Clipper.
3313
+ #
3314
+ # XXX - what byte order does the Clipper use?
3315
+ #
3316
+ # XXX - what's the "!" stuff:
3317
+ #
3318
+ # >18 short !074000,000000 C1 R1
3319
+ # >18 short !074000,004000 C2 R1
3320
+ # >18 short !074000,010000 C3 R1
3321
+ # >18 short !074000,074000 TEST
3322
+ #
3323
+ # I shall assume it's ANDing the field with the first value and
3324
+ # comparing it with the second, and rewrite it as:
3325
+ #
3326
+ # >18 short&074000 000000 C1 R1
3327
+ # >18 short&074000 004000 C2 R1
3328
+ # >18 short&074000 010000 C3 R1
3329
+ # >18 short&074000 074000 TEST
3330
+ #
3331
+ # as SVR3.1's "file" doesn't support anything of the "!074000,000000"
3332
+ # sort, nor does SunOS 4.x, so either it's something Intergraph added
3333
+ # in CLIX, or something AT&T added in SVR3.2 or later, or something
3334
+ # somebody else thought was a good idea; it's not documented in the
3335
+ # man page for this version of "magic", nor does it appear to be
3336
+ # implemented (at least not after I blew off the bogus code to turn
3337
+ # old-style "&"s into new-style "&"s, which just didn't work at all).
3338
+ #
3339
+ 0 short 0575 CLIPPER COFF executable (VAX #)
3340
+ >20 short 0407 (impure)
3341
+ >20 short 0410 (5.2 compatible)
3342
+ >20 short 0411 (pure)
3343
+ >20 short 0413 (demand paged)
3344
+ >20 short 0443 (target shared library)
3345
+ >12 long >0 not stripped
3346
+ >22 short >0 - version %ld
3347
+ 0 short 0577 CLIPPER COFF executable
3348
+ >18 short&074000 000000 C1 R1
3349
+ >18 short&074000 004000 C2 R1
3350
+ >18 short&074000 010000 C3 R1
3351
+ >18 short&074000 074000 TEST
3352
+ >20 short 0407 (impure)
3353
+ >20 short 0410 (pure)
3354
+ >20 short 0411 (separate I&D)
3355
+ >20 short 0413 (paged)
3356
+ >20 short 0443 (target shared library)
3357
+ >12 long >0 not stripped
3358
+ >22 short >0 - version %ld
3359
+ >48 long&01 01 alignment trap enabled
3360
+ >52 byte 1 -Ctnc
3361
+ >52 byte 2 -Ctsw
3362
+ >52 byte 3 -Ctpw
3363
+ >52 byte 4 -Ctcb
3364
+ >53 byte 1 -Cdnc
3365
+ >53 byte 2 -Cdsw
3366
+ >53 byte 3 -Cdpw
3367
+ >53 byte 4 -Cdcb
3368
+ >54 byte 1 -Csnc
3369
+ >54 byte 2 -Cssw
3370
+ >54 byte 3 -Cspw
3371
+ >54 byte 4 -Cscb
3372
+ 4 string pipe CLIPPER instruction trace
3373
+ 4 string prof CLIPPER instruction profile
3374
+
3375
+ #------------------------------------------------------------------------------
3376
+ # commands: file(1) magic for various shells and interpreters
3377
+ #
3378
+ #0 string : shell archive or script for antique kernel text
3379
+ 0 string/b #!\ /bin/sh POSIX shell script text executable
3380
+ !:mime text/x-shellscript
3381
+ 0 string/b #!\ /bin/csh C shell script text executable
3382
+ !:mime text/x-shellscript
3383
+ # korn shell magic, sent by George Wu, gwu@clyde.att.com
3384
+ 0 string/b #!\ /bin/ksh Korn shell script text executable
3385
+ !:mime text/x-shellscript
3386
+ 0 string/b #!\ /bin/tcsh Tenex C shell script text executable
3387
+ !:mime text/x-shellscript
3388
+ 0 string/b #!\ /usr/bin/tcsh Tenex C shell script text executable
3389
+ !:mime text/x-shellscript
3390
+ 0 string/b #!\ /usr/local/tcsh Tenex C shell script text executable
3391
+ !:mime text/x-shellscript
3392
+ 0 string/b #!\ /usr/local/bin/tcsh Tenex C shell script text executable
3393
+ !:mime text/x-shellscript
3394
+
3395
+ #
3396
+ # zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson)
3397
+ 0 string/b #!\ /bin/zsh Paul Falstad's zsh script text executable
3398
+ !:mime text/x-shellscript
3399
+ 0 string/b #!\ /usr/bin/zsh Paul Falstad's zsh script text executable
3400
+ !:mime text/x-shellscript
3401
+ 0 string/b #!\ /usr/local/bin/zsh Paul Falstad's zsh script text executable
3402
+ !:mime text/x-shellscript
3403
+ 0 string/b #!\ /usr/local/bin/ash Neil Brown's ash script text executable
3404
+ !:mime text/x-shellscript
3405
+ 0 string/b #!\ /usr/local/bin/ae Neil Brown's ae script text executable
3406
+ !:mime text/x-shellscript
3407
+ 0 string/b #!\ /bin/nawk new awk script text executable
3408
+ !:mime text/x-nawk
3409
+ 0 string/b #!\ /usr/bin/nawk new awk script text executable
3410
+ !:mime text/x-nawk
3411
+ 0 string/b #!\ /usr/local/bin/nawk new awk script text executable
3412
+ !:mime text/x-nawk
3413
+ 0 string/b #!\ /bin/gawk GNU awk script text executable
3414
+ !:mime text/x-gawk
3415
+ 0 string/b #!\ /usr/bin/gawk GNU awk script text executable
3416
+ !:mime text/x-gawk
3417
+ 0 string/b #!\ /usr/local/bin/gawk GNU awk script text executable
3418
+ !:mime text/x-gawk
3419
+ #
3420
+ 0 string/b #!\ /bin/awk awk script text executable
3421
+ !:mime text/x-awk
3422
+ 0 string/b #!\ /usr/bin/awk awk script text executable
3423
+ !:mime text/x-awk
3424
+ # update to distinguish from *.vcf files
3425
+ # this is broken because postscript has /EBEGIN{ for example.
3426
+ #0 search/Bb BEGIN { awk script text
3427
+ 0 regex =^\\s*BEGIN\\s*[{] awk script text
3428
+
3429
+ # AT&T Bell Labs' Plan 9 shell
3430
+ 0 string/b #!\ /bin/rc Plan 9 rc shell script text executable
3431
+
3432
+ # bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de)
3433
+ 0 string/b #!\ /bin/bash Bourne-Again shell script text executable
3434
+ !:mime text/x-shellscript
3435
+ 0 string/b #!\ /usr/bin/bash Bourne-Again shell script text executable
3436
+ !:mime text/x-shellscript
3437
+ 0 string/b #!\ /usr/local/bash Bourne-Again shell script text executable
3438
+ !:mime text/x-shellscript
3439
+ 0 string/b #!\ /usr/local/bin/bash Bourne-Again shell script text executable
3440
+ !:mime text/x-shellscript
3441
+
3442
+ # using env
3443
+ 0 string #!/usr/bin/env a
3444
+ >15 string >\0 %s script text executable
3445
+ 0 string #!\ /usr/bin/env a
3446
+ >16 string >\0 %s script text executable
3447
+
3448
+ # PHP scripts
3449
+ # Ulf Harnhammar <ulfh@update.uu.se>
3450
+ 0 search/1/c =<?php PHP script text
3451
+ !:mime text/x-php
3452
+ 0 search/1 =<?\n PHP script text
3453
+ !:mime text/x-php
3454
+ 0 search/1 =<?\r PHP script text
3455
+ !:mime text/x-php
3456
+ 0 search/1/b #!\ /usr/local/bin/php PHP script text executable
3457
+ !:mime text/x-php
3458
+ 0 search/1/b #!\ /usr/bin/php PHP script text executable
3459
+ !:mime text/x-php
3460
+
3461
+ 0 string Zend\x00 PHP script Zend Optimizer data
3462
+
3463
+ 0 string $! DCL command file
3464
+
3465
+ # Type: Pdmenu
3466
+ # URL: http://packages.debian.org/pdmenu
3467
+ # From: Edward Betts <edward@debian.org>
3468
+ 0 string #!/usr/bin/pdmenu Pdmenu configuration file text
3469
+
3470
+ #----------------------------------------------------------------------------
3471
+ # communication
3472
+
3473
+ # TTCN is the Tree and Tabular Combined Notation described in ISO 9646-3.
3474
+ # It is used for conformance testing of communication protocols.
3475
+ # Added by W. Borgert <debacle@debian.org>.
3476
+ 0 string $Suite TTCN Abstract Test Suite
3477
+ >&1 string $SuiteId
3478
+ >>&1 string >\n %s
3479
+ >&2 string $SuiteId
3480
+ >>&1 string >\n %s
3481
+ >&3 string $SuiteId
3482
+ >>&1 string >\n %s
3483
+
3484
+ # MSC (message sequence charts) are a formal description technique,
3485
+ # described in ITU-T Z.120, mainly used for communication protocols.
3486
+ # Added by W. Borgert <debacle@debian.org>.
3487
+ 0 string mscdocument Message Sequence Chart (document)
3488
+ 0 string msc Message Sequence Chart (chart)
3489
+ 0 string submsc Message Sequence Chart (subchart)
3490
+
3491
+ #------------------------------------------------------------------------------
3492
+ # compress: file(1) magic for pure-compression formats (no archives)
3493
+ #
3494
+ # compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc.
3495
+ #
3496
+ # Formats for various forms of compressed data
3497
+ # Formats for "compress" proper have been moved into "compress.c",
3498
+ # because it tries to uncompress it to figure out what's inside.
3499
+
3500
+ # standard unix compress
3501
+ 0 string \037\235 compress'd data
3502
+ !:mime application/x-compress
3503
+ !:apple LZIVZIVU
3504
+ >2 byte&0x80 >0 block compressed
3505
+ >2 byte&0x1f x %d bits
3506
+
3507
+ # gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver)
3508
+ # Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002
3509
+ # * Original filename is only at offset 10 if "extra field" absent
3510
+ # * Produce shorter output - notably, only report compression methods
3511
+ # other than 8 ("deflate", the only method defined in RFC 1952).
3512
+ 0 string \037\213 gzip compressed data
3513
+ !:mime application/x-gzip
3514
+ >2 byte <8 \b, reserved method
3515
+ >2 byte >8 \b, unknown method
3516
+ >3 byte &0x01 \b, ASCII
3517
+ >3 byte &0x02 \b, has CRC
3518
+ >3 byte &0x04 \b, extra field
3519
+ >3 byte&0xC =0x08
3520
+ >>10 string x \b, was "%s"
3521
+ >3 byte &0x10 \b, has comment
3522
+ >9 byte =0x00 \b, from FAT filesystem (MS-DOS, OS/2, NT)
3523
+ >9 byte =0x01 \b, from Amiga
3524
+ >9 byte =0x02 \b, from VMS
3525
+ >9 byte =0x03 \b, from Unix
3526
+ >9 byte =0x04 \b, from VM/CMS
3527
+ >9 byte =0x05 \b, from Atari
3528
+ >9 byte =0x06 \b, from HPFS filesystem (OS/2, NT)
3529
+ >9 byte =0x07 \b, from MacOS
3530
+ >9 byte =0x08 \b, from Z-System
3531
+ >9 byte =0x09 \b, from CP/M
3532
+ >9 byte =0x0A \b, from TOPS/20
3533
+ >9 byte =0x0B \b, from NTFS filesystem (NT)
3534
+ >9 byte =0x0C \b, from QDOS
3535
+ >9 byte =0x0D \b, from Acorn RISCOS
3536
+ >3 byte &0x10 \b, comment
3537
+ >3 byte &0x20 \b, encrypted
3538
+ >4 ledate >0 \b, last modified: %s
3539
+ >8 byte 2 \b, max compression
3540
+ >8 byte 4 \b, max speed
3541
+
3542
+ # packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis
3543
+ 0 string \037\036 packed data
3544
+ !:mime application/octet-stream
3545
+ >2 belong >1 \b, %d characters originally
3546
+ >2 belong =1 \b, %d character originally
3547
+ #
3548
+ # This magic number is byte-order-independent.
3549
+ 0 short 0x1f1f old packed data
3550
+ !:mime application/octet-stream
3551
+
3552
+ # XXX - why *two* entries for "compacted data", one of which is
3553
+ # byte-order independent, and one of which is byte-order dependent?
3554
+ #
3555
+ 0 short 0x1fff compacted data
3556
+ !:mime application/octet-stream
3557
+ # This string is valid for SunOS (BE) and a matching "short" is listed
3558
+ # in the Ultrix (LE) magic file.
3559
+ 0 string \377\037 compacted data
3560
+ !:mime application/octet-stream
3561
+ 0 short 0145405 huf output
3562
+ !:mime application/octet-stream
3563
+
3564
+ # bzip2
3565
+ 0 string BZh bzip2 compressed data
3566
+ !:mime application/x-bzip2
3567
+ >3 byte >47 \b, block size = %c00k
3568
+
3569
+ # lzip
3570
+ 0 string LZIP lzip compressed data
3571
+ !:mime application/x-lzip
3572
+ >4 byte x \b, version: %d
3573
+
3574
+ # squeeze and crunch
3575
+ # Michael Haardt <michael@cantor.informatik.rwth-aachen.de>
3576
+ 0 beshort 0x76FF squeezed data,
3577
+ >4 string x original name %s
3578
+ 0 beshort 0x76FE crunched data,
3579
+ >2 string x original name %s
3580
+ 0 beshort 0x76FD LZH compressed data,
3581
+ >2 string x original name %s
3582
+
3583
+ # Freeze
3584
+ 0 string \037\237 frozen file 2.1
3585
+ 0 string \037\236 frozen file 1.0 (or gzip 0.5)
3586
+
3587
+ # SCO compress -H (LZH)
3588
+ 0 string \037\240 SCO compress -H (LZH) data
3589
+
3590
+ # European GSM 06.10 is a provisional standard for full-rate speech
3591
+ # transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse
3592
+ # excitation/long term prediction) coding at 13 kbit/s.
3593
+ #
3594
+ # There's only a magic nibble (4 bits); that nibble repeats every 33
3595
+ # bytes. This isn't suited for use, but maybe we can use it someday.
3596
+ #
3597
+ # This will cause very short GSM files to be declared as data and
3598
+ # mismatches to be declared as data too!
3599
+ #0 byte&0xF0 0xd0 data
3600
+ #>33 byte&0xF0 0xd0
3601
+ #>66 byte&0xF0 0xd0
3602
+ #>99 byte&0xF0 0xd0
3603
+ #>132 byte&0xF0 0xd0 GSM 06.10 compressed audio
3604
+
3605
+ # bzip a block-sorting file compressor
3606
+ # by Julian Seward <sewardj@cs.man.ac.uk> and others
3607
+ #
3608
+ #0 string BZ bzip compressed data
3609
+ #>2 byte x \b, version: %c
3610
+ #>3 string =1 \b, compression block size 100k
3611
+ #>3 string =2 \b, compression block size 200k
3612
+ #>3 string =3 \b, compression block size 300k
3613
+ #>3 string =4 \b, compression block size 400k
3614
+ #>3 string =5 \b, compression block size 500k
3615
+ #>3 string =6 \b, compression block size 600k
3616
+ #>3 string =7 \b, compression block size 700k
3617
+ #>3 string =8 \b, compression block size 800k
3618
+ #>3 string =9 \b, compression block size 900k
3619
+
3620
+ # lzop from <markus.oberhumer@jk.uni-linz.ac.at>
3621
+ 0 string \x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a lzop compressed data
3622
+ >9 beshort <0x0940
3623
+ >>9 byte&0xf0 =0x00 - version 0.
3624
+ >>9 beshort&0x0fff x \b%03x,
3625
+ >>13 byte 1 LZO1X-1,
3626
+ >>13 byte 2 LZO1X-1(15),
3627
+ >>13 byte 3 LZO1X-999,
3628
+ ## >>22 bedate >0 last modified: %s,
3629
+ >>14 byte =0x00 os: MS-DOS
3630
+ >>14 byte =0x01 os: Amiga
3631
+ >>14 byte =0x02 os: VMS
3632
+ >>14 byte =0x03 os: Unix
3633
+ >>14 byte =0x05 os: Atari
3634
+ >>14 byte =0x06 os: OS/2
3635
+ >>14 byte =0x07 os: MacOS
3636
+ >>14 byte =0x0A os: Tops/20
3637
+ >>14 byte =0x0B os: WinNT
3638
+ >>14 byte =0x0E os: Win32
3639
+ >9 beshort >0x0939
3640
+ >>9 byte&0xf0 =0x00 - version 0.
3641
+ >>9 byte&0xf0 =0x10 - version 1.
3642
+ >>9 byte&0xf0 =0x20 - version 2.
3643
+ >>9 beshort&0x0fff x \b%03x,
3644
+ >>15 byte 1 LZO1X-1,
3645
+ >>15 byte 2 LZO1X-1(15),
3646
+ >>15 byte 3 LZO1X-999,
3647
+ ## >>25 bedate >0 last modified: %s,
3648
+ >>17 byte =0x00 os: MS-DOS
3649
+ >>17 byte =0x01 os: Amiga
3650
+ >>17 byte =0x02 os: VMS
3651
+ >>17 byte =0x03 os: Unix
3652
+ >>17 byte =0x05 os: Atari
3653
+ >>17 byte =0x06 os: OS/2
3654
+ >>17 byte =0x07 os: MacOS
3655
+ >>17 byte =0x0A os: Tops/20
3656
+ >>17 byte =0x0B os: WinNT
3657
+ >>17 byte =0x0E os: Win32
3658
+
3659
+ # 4.3BSD-Quasijarus Strong Compression
3660
+ # http://minnie.tuhs.org/Quasijarus/compress.html
3661
+ 0 string \037\241 Quasijarus strong compressed data
3662
+
3663
+ # From: Cory Dikkers <cdikkers@swbell.net>
3664
+ 0 string XPKF Amiga xpkf.library compressed data
3665
+ 0 string PP11 Power Packer 1.1 compressed data
3666
+ 0 string PP20 Power Packer 2.0 compressed data,
3667
+ >4 belong 0x09090909 fast compression
3668
+ >4 belong 0x090A0A0A mediocre compression
3669
+ >4 belong 0x090A0B0B good compression
3670
+ >4 belong 0x090A0C0C very good compression
3671
+ >4 belong 0x090A0C0D best compression
3672
+
3673
+ # 7-zip archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at)
3674
+ # http://www.7-zip.org or DOC/7zFormat.txt
3675
+ #
3676
+ 0 string 7z\274\257\047\034 7-zip archive data,
3677
+ >6 byte x version %d
3678
+ >7 byte x \b.%d
3679
+
3680
+ # Type: LZMA
3681
+ # URL: http://www.7-zip.org/sdk.html
3682
+ # From: Robert Millan <rmh@aybabtu.com> and Reuben Thomas <rrt@sc3d.org>
3683
+ # Commented out because apparently not reliable (according to Debian
3684
+ # bug #364260)
3685
+ #0 string ]\000\000\200\000 LZMA compressed data
3686
+
3687
+ # http://tukaani.org/xz/xz-file-format.txt
3688
+ 0 ustring \xFD7zXZ\x00 xz compressed data
3689
+ !:mime application/x-xz
3690
+
3691
+ # AFX compressed files (Wolfram Kleff)
3692
+ 2 string -afx- AFX compressed file data
3693
+
3694
+ # Supplementary magic data for the file(1) command to support
3695
+ # rzip(1). The format is described in magic(5).
3696
+ #
3697
+ # Copyright (C) 2003 by Andrew Tridgell. You may do whatever you want with
3698
+ # this file.
3699
+ #
3700
+ 0 string RZIP rzip compressed data
3701
+ >4 byte x - version %d
3702
+ >5 byte x \b.%d
3703
+ >6 belong x (%d bytes)
3704
+
3705
+ # Type: XZ
3706
+ # URL: http://tukaani.org/xz/
3707
+ 0 string \xfd\x37\x7a\x58\x5a\x00 XZ compressed data
3708
+ !:mime application/x-xz
3709
+ #------------------------------------------------------------------------------
3710
+ # Console game magic
3711
+ # Toby Deshane <hac@shoelace.digivill.net>
3712
+ # ines: file(1) magic for Marat's iNES Nintendo Entertainment System
3713
+ # ROM dump format
3714
+
3715
+ 0 string NES\032 iNES ROM dump,
3716
+ >4 byte x %dx16k PRG
3717
+ >5 byte x \b, %dx8k CHR
3718
+ >6 byte&0x01 =0x1 \b, [Vert.]
3719
+ >6 byte&0x01 =0x0 \b, [Horiz.]
3720
+ >6 byte&0x02 =0x2 \b, [SRAM]
3721
+ >6 byte&0x04 =0x4 \b, [Trainer]
3722
+ >6 byte&0x04 =0x8 \b, [4-Scr]
3723
+
3724
+ #------------------------------------------------------------------------------
3725
+ # gameboy: file(1) magic for the Nintendo (Color) Gameboy raw ROM format
3726
+ #
3727
+ 0x104 belong 0xCEED6666 Gameboy ROM:
3728
+ >0x134 string >\0 "%.16s"
3729
+ >0x146 byte 0x03 \b,[SGB]
3730
+ >0x147 byte 0x00 \b, [ROM ONLY]
3731
+ >0x147 byte 0x01 \b, [ROM+MBC1]
3732
+ >0x147 byte 0x02 \b, [ROM+MBC1+RAM]
3733
+ >0x147 byte 0x03 \b, [ROM+MBC1+RAM+BATT]
3734
+ >0x147 byte 0x05 \b, [ROM+MBC2]
3735
+ >0x147 byte 0x06 \b, [ROM+MBC2+BATTERY]
3736
+ >0x147 byte 0x08 \b, [ROM+RAM]
3737
+ >0x147 byte 0x09 \b, [ROM+RAM+BATTERY]
3738
+ >0x147 byte 0x0B \b, [ROM+MMM01]
3739
+ >0x147 byte 0x0C \b, [ROM+MMM01+SRAM]
3740
+ >0x147 byte 0x0D \b, [ROM+MMM01+SRAM+BATT]
3741
+ >0x147 byte 0x0F \b, [ROM+MBC3+TIMER+BATT]
3742
+ >0x147 byte 0x10 \b, [ROM+MBC3+TIMER+RAM+BATT]
3743
+ >0x147 byte 0x11 \b, [ROM+MBC3]
3744
+ >0x147 byte 0x12 \b, [ROM+MBC3+RAM]
3745
+ >0x147 byte 0x13 \b, [ROM+MBC3+RAM+BATT]
3746
+ >0x147 byte 0x19 \b, [ROM+MBC5]
3747
+ >0x147 byte 0x1A \b, [ROM+MBC5+RAM]
3748
+ >0x147 byte 0x1B \b, [ROM+MBC5+RAM+BATT]
3749
+ >0x147 byte 0x1C \b, [ROM+MBC5+RUMBLE]
3750
+ >0x147 byte 0x1D \b, [ROM+MBC5+RUMBLE+SRAM]
3751
+ >0x147 byte 0x1E \b, [ROM+MBC5+RUMBLE+SRAM+BATT]
3752
+ >0x147 byte 0x1F \b, [Pocket Camera]
3753
+ >0x147 byte 0xFD \b, [Bandai TAMA5]
3754
+ >0x147 byte 0xFE \b, [Hudson HuC-3]
3755
+ >0x147 byte 0xFF \b, [Hudson HuC-1]
3756
+
3757
+ >0x148 byte 0 \b, ROM: 256Kbit
3758
+ >0x148 byte 1 \b, ROM: 512Kbit
3759
+ >0x148 byte 2 \b, ROM: 1Mbit
3760
+ >0x148 byte 3 \b, ROM: 2Mbit
3761
+ >0x148 byte 4 \b, ROM: 4Mbit
3762
+ >0x148 byte 5 \b, ROM: 8Mbit
3763
+ >0x148 byte 6 \b, ROM: 16Mbit
3764
+ >0x148 byte 0x52 \b, ROM: 9Mbit
3765
+ >0x148 byte 0x53 \b, ROM: 10Mbit
3766
+ >0x148 byte 0x54 \b, ROM: 12Mbit
3767
+
3768
+ >0x149 byte 1 \b, RAM: 16Kbit
3769
+ >0x149 byte 2 \b, RAM: 64Kbit
3770
+ >0x149 byte 3 \b, RAM: 128Kbit
3771
+ >0x149 byte 4 \b, RAM: 1Mbit
3772
+
3773
+ #>0x14e long x \b, CRC: %x
3774
+
3775
+ #------------------------------------------------------------------------------
3776
+ # genesis: file(1) magic for the Sega MegaDrive/Genesis raw ROM format
3777
+ #
3778
+ 0x100 string SEGA Sega MegaDrive/Genesis raw ROM dump
3779
+ >0x120 string >\0 Name: "%.16s"
3780
+ >0x110 string >\0 %.16s
3781
+ >0x1B0 string RA with SRAM
3782
+
3783
+ #------------------------------------------------------------------------------
3784
+ # genesis: file(1) magic for the Super MegaDrive ROM dump format
3785
+ #
3786
+ 0x280 string EAGN Super MagicDrive ROM dump
3787
+ >0 byte x %dx16k blocks
3788
+ >2 byte 0 \b, last in series or standalone
3789
+ >2 byte >0 \b, split ROM
3790
+ >8 byte 0xAA
3791
+ >9 byte 0xBB
3792
+
3793
+ #------------------------------------------------------------------------------
3794
+ # genesis: file(1) alternate magic for the Super MegaDrive ROM dump format
3795
+ #
3796
+ 0x280 string EAMG Super MagicDrive ROM dump
3797
+ >0 byte x %dx16k blocks
3798
+ >2 byte x \b, last in series or standalone
3799
+ >8 byte 0xAA
3800
+ >9 byte 0xBB
3801
+
3802
+ #------------------------------------------------------------------------------
3803
+ # smsgg: file(1) magic for Sega Master System and Game Gear ROM dumps
3804
+ #
3805
+ # Does not detect all images. Very preliminary guesswork. Need more data
3806
+ # on format.
3807
+ #
3808
+ # FIXME: need a little more info...;P
3809
+ #
3810
+ #0 byte 0xF3
3811
+ #>1 byte 0xED Sega Master System/Game Gear ROM dump
3812
+ #>1 byte 0x31 Sega Master System/Game Gear ROM dump
3813
+ #>1 byte 0xDB Sega Master System/Game Gear ROM dump
3814
+ #>1 byte 0xAF Sega Master System/Game Gear ROM dump
3815
+ #>1 byte 0xC3 Sega Master System/Game Gear ROM dump
3816
+
3817
+ #------------------------------------------------------------------------------
3818
+ # dreamcast: file(1) uncertain magic for the Sega Dreamcast VMU image format
3819
+ #
3820
+ 0 belong 0x21068028 Sega Dreamcast VMU game image
3821
+ 0 string LCDi Dream Animator file
3822
+
3823
+ #------------------------------------------------------------------------------
3824
+ # v64: file(1) uncertain magic for the V64 format N64 ROM dumps
3825
+ #
3826
+ 0 belong 0x37804012 V64 Nintendo 64 ROM dump
3827
+
3828
+ # From: "Nelson A. de Oliveira" <naoliv@gmail.com>
3829
+ # Nintendo .nds
3830
+ 192 string \044\377\256Qi\232 Nintendo DS Game ROM Image
3831
+ # Nintendo .gba
3832
+ 0 string \056\000\000\352$\377\256Qi Nintendo Game Boy Advance ROM Image
3833
+
3834
+ #------------------------------------------------------------------------------
3835
+ # msx: file(1) magic for MSX game cartridge dumps
3836
+ # Too simple - MPi
3837
+ #0 beshort 0x4142 MSX game cartridge dump
3838
+
3839
+ #------------------------------------------------------------------------------
3840
+ # Sony Playstation executables (Adam Sjoegren <asjo@diku.dk>) :
3841
+ 0 string PS-X\ EXE Sony Playstation executable
3842
+ # Area:
3843
+ >113 string x (%s)
3844
+
3845
+ #------------------------------------------------------------------------------
3846
+ # Microsoft Xbox executables .xbe (Esa Hyytiä <ehyytia@cc.hut.fi>)
3847
+ 0 string XBEH XBE, Microsoft Xbox executable
3848
+ # probabilistic checks whether signed or not
3849
+ >0x0004 ulelong =0x0
3850
+ >>&2 ulelong =0x0
3851
+ >>>&2 ulelong =0x0 \b, not signed
3852
+ >0x0004 ulelong >0
3853
+ >>&2 ulelong >0
3854
+ >>>&2 ulelong >0 \b, signed
3855
+ # expect base address of 0x10000
3856
+ >0x0104 ulelong =0x10000
3857
+ >>(0x0118-0x0FF60) ulelong&0x80000007 0x80000007 \b, all regions
3858
+ >>(0x0118-0x0FF60) ulelong&0x80000007 !0x80000007
3859
+ >>>(0x0118-0x0FF60) ulelong >0 (regions:
3860
+ >>>>(0x0118-0x0FF60) ulelong &0x00000001 NA
3861
+ >>>>(0x0118-0x0FF60) ulelong &0x00000002 Japan
3862
+ >>>>(0x0118-0x0FF60) ulelong &0x00000004 Rest_of_World
3863
+ >>>>(0x0118-0x0FF60) ulelong &0x80000000 Manufacturer
3864
+ >>>(0x0118-0x0FF60) ulelong >0 \b)
3865
+
3866
+ # --------------------------------
3867
+ # Microsoft Xbox data file formats
3868
+ 0 string XIP0 XIP, Microsoft Xbox data
3869
+ 0 string XTF0 XTF, Microsoft Xbox data
3870
+
3871
+ # Atari Lynx cartridge dump (EXE/BLL header)
3872
+ # From: "Stefan A. Haubenthal" <polluks@web.de>
3873
+
3874
+ 0 beshort 0x8008 Lynx cartridge,
3875
+ >2 beshort x RAM start $%04x
3876
+ >6 string BS93
3877
+
3878
+ # Opera file system that is used on the 3DO console
3879
+ # From: Serge van den Boom <svdb@stack.nl>
3880
+ 0 string \x01ZZZZZ\x01 3DO "Opera" file system
3881
+
3882
+ # From Gürkan Sengün <gurkan@linuks.mine.nu>, www.linuks.mine.nu
3883
+ 0 string GBS Nintendo Gameboy Music/Audio Data
3884
+ 12 string GameBoy\ Music\ Module Nintendo Gameboy Music Module
3885
+
3886
+ # Playstations Patch Files from: From: Thomas Klausner <tk@giga.or.at>
3887
+ 0 string PPF30 Playstation Patch File version 3.0
3888
+ >5 byte 0 \b, PPF 1.0 patch
3889
+ >5 byte 1 \b, PPF 2.0 patch
3890
+ >5 byte 2 \b, PPF 3.0 patch
3891
+ >>56 byte 0 \b, Imagetype BIN (any)
3892
+ >>56 byte 1 \b, Imagetype GI (PrimoDVD)
3893
+ >>57 byte 0 \b, Blockcheck disabled
3894
+ >>57 byte 1 \b, Blockcheck enabled
3895
+ >>58 byte 0 \b, Undo data not available
3896
+ >>58 byte 1 \b, Undo data available
3897
+ >6 string x \b, description: %s
3898
+
3899
+ 0 string PPF20 Playstation Patch File version 2.0
3900
+ >5 byte 0 \b, PPF 1.0 patch
3901
+ >5 byte 1 \b, PPF 2.0 patch
3902
+ >>56 lelong >0 \b, size of file to patch %d
3903
+ >6 string x \b, description: %s
3904
+
3905
+ 0 string PPF10 Playstation Patch File version 1.0
3906
+ >5 byte 0 \b, Simple Encoding
3907
+ >6 string x \b, description: %s
3908
+
3909
+ # From: Daniel Dawson <ddawson@icehouse.net>
3910
+ # SNES9x .smv "movie" file format.
3911
+ 0 string SMV\x1A SNES9x input recording
3912
+ >0x4 lelong x \b, version %d
3913
+ # version 4 is latest so far
3914
+ >0x4 lelong <5
3915
+ >>0x8 ledate x \b, recorded at %s
3916
+ >>0xc lelong >0 \b, rerecorded %d times
3917
+ >>0x10 lelong x \b, %d frames long
3918
+ >>0x14 byte >0 \b, data for controller(s):
3919
+ >>>0x14 byte &0x1 #1
3920
+ >>>0x14 byte &0x2 #2
3921
+ >>>0x14 byte &0x4 #3
3922
+ >>>0x14 byte &0x8 #4
3923
+ >>>0x14 byte &0x10 #5
3924
+ >>0x15 byte ^0x1 \b, begins from snapshot
3925
+ >>0x15 byte &0x1 \b, begins from reset
3926
+ >>0x15 byte ^0x2 \b, NTSC standard
3927
+ >>0x15 byte &0x2 \b, PAL standard
3928
+ >>0x17 byte &0x1 \b, settings:
3929
+ # WIP1Timing not used as of version 4
3930
+ >>>0x4 lelong <4
3931
+ >>>>0x17 byte &0x2 WIP1Timing
3932
+ >>>0x17 byte &0x4 Left+Right
3933
+ >>>0x17 byte &0x8 VolumeEnvX
3934
+ >>>0x17 byte &0x10 FakeMute
3935
+ >>>0x17 byte &0x20 SyncSound
3936
+ # New flag as of version 4
3937
+ >>>0x4 lelong >3
3938
+ >>>>0x17 byte &0x80 NoCPUShutdown
3939
+ >>0x4 lelong <4
3940
+ >>>0x18 lelong >0x23
3941
+ >>>>0x20 leshort !0
3942
+ >>>>>0x20 lestring16 x \b, metadata: "%s"
3943
+ >>0x4 lelong >3
3944
+ >>>0x24 byte >0 \b, port 1:
3945
+ >>>>0x24 byte 1 joypad
3946
+ >>>>0x24 byte 2 mouse
3947
+ >>>>0x24 byte 3 SuperScope
3948
+ >>>>0x24 byte 4 Justifier
3949
+ >>>>0x24 byte 5 multitap
3950
+ >>>0x24 byte >0 \b, port 2:
3951
+ >>>>0x25 byte 1 joypad
3952
+ >>>>0x25 byte 2 mouse
3953
+ >>>>0x25 byte 3 SuperScope
3954
+ >>>>0x25 byte 4 Justifier
3955
+ >>>>0x25 byte 5 multitap
3956
+ >>>0x18 lelong >0x43
3957
+ >>>>0x40 leshort !0
3958
+ >>>>>0x40 lestring16 x \b, metadata: "%s"
3959
+ >>0x17 byte &0x40 \b, ROM:
3960
+ >>>(0x18.l-26) lelong x CRC32 0x%08x
3961
+ >>>(0x18.l-23) string x "%s"
3962
+
3963
+ # Type: scummVM savegame files
3964
+ # From: Sven Hartge <debian@ds9.argh.org>
3965
+ 0 string SCVM ScummVM savegame
3966
+ >12 string >\0 "%s"
3967
+ #------------------------------------------------------------------------------
3968
+ # convex: file(1) magic for Convex boxes
3969
+ #
3970
+ # Convexes are big-endian.
3971
+ #
3972
+ # /*\
3973
+ # * Below are the magic numbers and tests added for Convex.
3974
+ # * Added at beginning, because they are expected to be used most.
3975
+ # \*/
3976
+ 0 belong 0507 Convex old-style object
3977
+ >16 belong >0 not stripped
3978
+ 0 belong 0513 Convex old-style demand paged executable
3979
+ >16 belong >0 not stripped
3980
+ 0 belong 0515 Convex old-style pre-paged executable
3981
+ >16 belong >0 not stripped
3982
+ 0 belong 0517 Convex old-style pre-paged, non-swapped executable
3983
+ >16 belong >0 not stripped
3984
+ 0 belong 0x011257 Core file
3985
+ #
3986
+ # The following are a series of dump format magic numbers. Each one
3987
+ # corresponds to a drastically different dump format. The first on is
3988
+ # the original dump format on a 4.1 BSD or earlier file system. The
3989
+ # second marks the change between the 4.1 file system and the 4.2 file
3990
+ # system. The Third marks the changing of the block size from 1K
3991
+ # to 2K to be compatible with an IDC file system. The fourth indicates
3992
+ # a dump that is dependent on Convex Storage Manager, because data in
3993
+ # secondary storage is not physically contained within the dump.
3994
+ # The restore program uses these number to determine how the data is
3995
+ # to be extracted.
3996
+ #
3997
+ 24 belong =60011 dump format, 4.1 BSD or earlier
3998
+ 24 belong =60012 dump format, 4.2 or 4.3 BSD without IDC
3999
+ 24 belong =60013 dump format, 4.2 or 4.3 BSD (IDC compatible)
4000
+ 24 belong =60014 dump format, Convex Storage Manager by-reference dump
4001
+ #
4002
+ # what follows is a bunch of bit-mask checks on the flags field of the opthdr.
4003
+ # If there is no `=' sign, assume just checking for whether the bit is set?
4004
+ #
4005
+ 0 belong 0601 Convex SOFF
4006
+ >88 belong&0x000f0000 =0x00000000 c1
4007
+ >88 belong &0x00010000 c2
4008
+ >88 belong &0x00020000 c2mp
4009
+ >88 belong &0x00040000 parallel
4010
+ >88 belong &0x00080000 intrinsic
4011
+ >88 belong &0x00000001 demand paged
4012
+ >88 belong &0x00000002 pre-paged
4013
+ >88 belong &0x00000004 non-swapped
4014
+ >88 belong &0x00000008 POSIX
4015
+ #
4016
+ >84 belong &0x80000000 executable
4017
+ >84 belong &0x40000000 object
4018
+ >84 belong&0x20000000 =0 not stripped
4019
+ >84 belong&0x18000000 =0x00000000 native fpmode
4020
+ >84 belong&0x18000000 =0x10000000 ieee fpmode
4021
+ >84 belong&0x18000000 =0x18000000 undefined fpmode
4022
+ #
4023
+ 0 belong 0605 Convex SOFF core
4024
+ #
4025
+ 0 belong 0607 Convex SOFF checkpoint
4026
+ >88 belong&0x000f0000 =0x00000000 c1
4027
+ >88 belong &0x00010000 c2
4028
+ >88 belong &0x00020000 c2mp
4029
+ >88 belong &0x00040000 parallel
4030
+ >88 belong &0x00080000 intrinsic
4031
+ >88 belong &0x00000008 POSIX
4032
+ #
4033
+ >84 belong&0x18000000 =0x00000000 native fpmode
4034
+ >84 belong&0x18000000 =0x10000000 ieee fpmode
4035
+ >84 belong&0x18000000 =0x18000000 undefined fpmode
4036
+
4037
+ #------------------------------------------------------------------------------
4038
+ # cracklib: file (1) magic for cracklib v2.7
4039
+
4040
+ 0 lelong 0x70775631 Cracklib password index, little endian
4041
+ >4 long >0 (%i words)
4042
+ >4 long 0 ("64-bit")
4043
+ >>8 long >-1 (%i words)
4044
+ 0 belong 0x70775631 Cracklib password index, big endian
4045
+ >4 belong >-1 (%i words)
4046
+ # really bellong 0x0000000070775631
4047
+ 0 search/1 \0\0\0\0pwV1 Cracklib password index, big endian ("64-bit")
4048
+ >12 belong >0 (%i words)
4049
+ # ----------------------------------------------------------------------------
4050
+ # ctags: file (1) magic for Exuberant Ctags files
4051
+ # From: Alexander Mai <mai@migdal.ikp.physik.tu-darmstadt.de>
4052
+ 0 search/1 =!_TAG Exuberant Ctags tag file text
4053
+
4054
+ #------------------------------------------------------------------------------
4055
+ # dact: file(1) magic for DACT compressed files
4056
+ #
4057
+ 0 long 0x444354C3 DACT compressed data
4058
+ >4 byte >-1 (version %i.
4059
+ >5 byte >-1 $BS%i.
4060
+ >6 byte >-1 $BS%i)
4061
+ >7 long >0 $BS, original size: %i bytes
4062
+ >15 long >30 $BS, block size: %i bytes
4063
+
4064
+ #------------------------------------------------------------------------------
4065
+ # database: file(1) magic for various databases
4066
+ #
4067
+ # extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk)
4068
+ #
4069
+ #
4070
+ # GDBM magic numbers
4071
+ # Will be maintained as part of the GDBM distribution in the future.
4072
+ # <downsj@teeny.org>
4073
+ 0 belong 0x13579ace GNU dbm 1.x or ndbm database, big endian
4074
+ !:mime application/x-gdbm
4075
+ 0 lelong 0x13579ace GNU dbm 1.x or ndbm database, little endian
4076
+ !:mime application/x-gdbm
4077
+ 0 string GDBM GNU dbm 2.x database
4078
+ !:mime application/x-gdbm
4079
+ #
4080
+ # Berkeley DB
4081
+ #
4082
+ # Ian Darwin's file /etc/magic files: big/little-endian version.
4083
+ #
4084
+ # Hash 1.85/1.86 databases store metadata in network byte order.
4085
+ # Btree 1.85/1.86 databases store the metadata in host byte order.
4086
+ # Hash and Btree 2.X and later databases store the metadata in host byte order.
4087
+
4088
+ 0 long 0x00061561 Berkeley DB
4089
+ !:mime application/x-dbm
4090
+ >8 belong 4321
4091
+ >>4 belong >2 1.86
4092
+ >>4 belong <3 1.85
4093
+ >>4 belong >0 (Hash, version %d, native byte-order)
4094
+ >8 belong 1234
4095
+ >>4 belong >2 1.86
4096
+ >>4 belong <3 1.85
4097
+ >>4 belong >0 (Hash, version %d, little-endian)
4098
+
4099
+ 0 belong 0x00061561 Berkeley DB
4100
+ >8 belong 4321
4101
+ >>4 belong >2 1.86
4102
+ >>4 belong <3 1.85
4103
+ >>4 belong >0 (Hash, version %d, big-endian)
4104
+ >8 belong 1234
4105
+ >>4 belong >2 1.86
4106
+ >>4 belong <3 1.85
4107
+ >>4 belong >0 (Hash, version %d, native byte-order)
4108
+
4109
+ 0 long 0x00053162 Berkeley DB 1.85/1.86
4110
+ >4 long >0 (Btree, version %d, native byte-order)
4111
+ 0 belong 0x00053162 Berkeley DB 1.85/1.86
4112
+ >4 belong >0 (Btree, version %d, big-endian)
4113
+ 0 lelong 0x00053162 Berkeley DB 1.85/1.86
4114
+ >4 lelong >0 (Btree, version %d, little-endian)
4115
+
4116
+ 12 long 0x00061561 Berkeley DB
4117
+ >16 long >0 (Hash, version %d, native byte-order)
4118
+ 12 belong 0x00061561 Berkeley DB
4119
+ >16 belong >0 (Hash, version %d, big-endian)
4120
+ 12 lelong 0x00061561 Berkeley DB
4121
+ >16 lelong >0 (Hash, version %d, little-endian)
4122
+
4123
+ 12 long 0x00053162 Berkeley DB
4124
+ >16 long >0 (Btree, version %d, native byte-order)
4125
+ 12 belong 0x00053162 Berkeley DB
4126
+ >16 belong >0 (Btree, version %d, big-endian)
4127
+ 12 lelong 0x00053162 Berkeley DB
4128
+ >16 lelong >0 (Btree, version %d, little-endian)
4129
+
4130
+ 12 long 0x00042253 Berkeley DB
4131
+ >16 long >0 (Queue, version %d, native byte-order)
4132
+ 12 belong 0x00042253 Berkeley DB
4133
+ >16 belong >0 (Queue, version %d, big-endian)
4134
+ 12 lelong 0x00042253 Berkeley DB
4135
+ >16 lelong >0 (Queue, version %d, little-endian)
4136
+
4137
+ # From Max Bowsher.
4138
+ 12 long 0x00040988 Berkeley DB
4139
+ >16 long >0 (Log, version %d, native byte-order)
4140
+ 12 belong 0x00040988 Berkeley DB
4141
+ >16 belong >0 (Log, version %d, big-endian)
4142
+ 12 lelong 0x00040988 Berkeley DB
4143
+ >16 lelong >0 (Log, version %d, little-endian)
4144
+
4145
+ #
4146
+ #
4147
+ # Round Robin Database Tool by Tobias Oetiker <oetiker@ee.ethz.ch>
4148
+ 0 string RRD RRDTool DB
4149
+ >4 string x version %s
4150
+ #----------------------------------------------------------------------
4151
+ # ROOT: file(1) magic for ROOT databases
4152
+ #
4153
+ 0 string root\0 ROOT file
4154
+ >4 belong x Version %d
4155
+ >33 belong x (Compression: %d)
4156
+
4157
+ # XXX: Weak magic.
4158
+ # Alex Ott <ott@jet.msk.su>
4159
+ ## Paradox file formats
4160
+ #2 leshort 0x0800 Paradox
4161
+ #>0x39 byte 3 v. 3.0
4162
+ #>0x39 byte 4 v. 3.5
4163
+ #>0x39 byte 9 v. 4.x
4164
+ #>0x39 byte 10 v. 5.x
4165
+ #>0x39 byte 11 v. 5.x
4166
+ #>0x39 byte 12 v. 7.x
4167
+ #>>0x04 byte 0 indexed .DB data file
4168
+ #>>0x04 byte 1 primary index .PX file
4169
+ #>>0x04 byte 2 non-indexed .DB data file
4170
+ #>>0x04 byte 3 non-incrementing secondary index .Xnn file
4171
+ #>>0x04 byte 4 secondary index .Ynn file
4172
+ #>>0x04 byte 5 incrementing secondary index .Xnn file
4173
+ #>>0x04 byte 6 non-incrementing secondary index .XGn file
4174
+ #>>0x04 byte 7 secondary index .YGn file
4175
+ #>>>0x04 byte 8 incrementing secondary index .XGn file
4176
+
4177
+ ## XBase database files
4178
+ #0 byte 0x02
4179
+ #>8 leshort >0
4180
+ #>>12 leshort 0 FoxBase
4181
+ #!:mime application/x-dbf
4182
+ #>>>0x04 lelong 0 (no records)
4183
+ #>>>0x04 lelong >0 (%ld records)
4184
+ #
4185
+ #0 byte 0x03
4186
+ #!:mime application/x-dbf
4187
+ #>8 leshort >0
4188
+ #>>12 leshort 0 FoxBase+, FoxPro, dBaseIII+, dBaseIV, no memo
4189
+ #>>>0x04 lelong 0 (no records)
4190
+ #>>>0x04 lelong >0 (%ld records)
4191
+ #
4192
+ #0 byte 0x04
4193
+ #!:mime application/x-dbf
4194
+ #>8 leshort >0
4195
+ #>>12 leshort 0 dBASE IV no memo file
4196
+ #>>>0x04 lelong 0 (no records)
4197
+ #>>>0x04 lelong >0 (%ld records)
4198
+ #
4199
+ #0 byte 0x05
4200
+ #!:mime application/x-dbf
4201
+ #>8 leshort >0
4202
+ #>>12 leshort 0 dBASE V no memo file
4203
+ #>>>0x04 lelong 0 (no records)
4204
+ #>>>0x04 lelong >0 (%ld records)
4205
+ #
4206
+ #0 byte 0x30
4207
+ #!:mime application/x-dbf
4208
+ #>8 leshort >0
4209
+ #>>12 leshort 0 Visual FoxPro
4210
+ #>>>0x04 lelong 0 (no records)
4211
+ #>>>0x04 lelong >0 (%ld records)
4212
+ #
4213
+ #0 byte 0x43
4214
+ #!:mime application/x-dbf
4215
+ #>8 leshort >0
4216
+ #>>12 leshort 0 FlagShip with memo var size
4217
+ #>>>0x04 lelong 0 (no records)
4218
+ #>>>0x04 lelong >0 (%ld records)
4219
+ #
4220
+ #0 byte 0x7b
4221
+ #!:mime application/x-dbf
4222
+ #>8 leshort >0
4223
+ #>>12 leshort 0 dBASEIV with memo
4224
+ #>>>0x04 lelong 0 (no records)
4225
+ #>>>0x04 lelong >0 (%ld records)
4226
+ #
4227
+ #0 byte 0x83
4228
+ #!:mime application/x-dbf
4229
+ #>8 leshort >0
4230
+ #>>12 leshort 0 FoxBase+, dBaseIII+ with memo
4231
+ #>>>0x04 lelong 0 (no records)
4232
+ #>>>0x04 lelong >0 (%ld records)
4233
+ #
4234
+ #0 byte 0x8b
4235
+ #!:mime application/x-dbf
4236
+ #>8 leshort >0
4237
+ #>>12 leshort 0 dBaseIV with memo
4238
+ #>>>0x04 lelong 0 (no records)
4239
+ #>>>0x04 lelong >0 (%ld records)
4240
+ #
4241
+ #0 byte 0x8e
4242
+ #!:mime application/x-dbf
4243
+ #>8 leshort >0
4244
+ #>>12 leshort 0 dBaseIV with SQL Table
4245
+ #>>>0x04 lelong 0 (no records)
4246
+ #>>>0x04 lelong >0 (%ld records)
4247
+ #
4248
+ #0 byte 0xb3
4249
+ #!:mime application/x-dbf
4250
+ #>8 leshort >0
4251
+ #>>12 leshort 0 FlagShip with .dbt memo
4252
+ #>>>0x04 lelong 0 (no records)
4253
+ #>>>0x04 lelong >0 (%ld records)
4254
+ #
4255
+ #0 byte 0xf5
4256
+ #!:mime application/x-dbf
4257
+ #>8 leshort >0
4258
+ #>>12 leshort 0 FoxPro with memo
4259
+ #>>>0x04 lelong 0 (no records)
4260
+ #>>>0x04 lelong >0 (%ld records)
4261
+ #
4262
+ #0 leshort 0x0006 DBase 3 index file
4263
+
4264
+ # MS Access database
4265
+ 4 string Standard\ Jet\ DB Microsoft Access Database
4266
+ !:mime application/x-msaccess
4267
+
4268
+ # TDB database from Samba et al - Martin Pool <mbp@samba.org>
4269
+ 0 string TDB\ file TDB database
4270
+ >32 lelong 0x2601196D version 6, little-endian
4271
+ >>36 lelong x hash size %d bytes
4272
+
4273
+ # SE Linux policy database
4274
+ 0 lelong 0xf97cff8c SE Linux policy
4275
+ >16 lelong x v%d
4276
+ >20 lelong 1 MLS
4277
+ >24 lelong x %d symbols
4278
+ >28 lelong x %d ocons
4279
+
4280
+ # ICE authority file data (Wolfram Kleff)
4281
+ 2 string ICE ICE authority data
4282
+
4283
+ # X11 Xauthority file (Wolfram Kleff)
4284
+ 10 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
4285
+ 11 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
4286
+ 12 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
4287
+ 13 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
4288
+ 14 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
4289
+ 15 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
4290
+ 16 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
4291
+ 17 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
4292
+ 18 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
4293
+
4294
+ # From: Maxime Henrion <mux@FreeBSD.org>
4295
+ # PostgreSQL's custom dump format, Maxime Henrion <mux@FreeBSD.org>
4296
+ 0 string PGDMP PostgreSQL custom database dump
4297
+ >5 byte x - v%d
4298
+ >6 byte x \b.%d
4299
+ >5 beshort <0x101 \b-0
4300
+ >5 beshort >0x100
4301
+ >>7 byte x \b-%d
4302
+
4303
+ # Type: Advanced Data Format (ADF) database
4304
+ # URL: http://www.grc.nasa.gov/WWW/cgns/adf/
4305
+ # From: Nicolas Chauvat <nicolas.chauvat@logilab.fr>
4306
+ 0 string @(#)ADF\ Database CGNS Advanced Data Format
4307
+
4308
+ # Tokyo Cabinet magic data
4309
+ # http://tokyocabinet.sourceforge.net/index.html
4310
+ 0 string ToKyO\ CaBiNeT\n Tokyo Cabinet
4311
+ >14 string x \b (%s)
4312
+ >32 byte 0 \b, Hash
4313
+ !:mime application/x-tokyocabinet-hash
4314
+ >32 byte 1 \b, B+ tree
4315
+ !:mime application/x-tokyocabinet-btree
4316
+ >32 byte 2 \b, Fixed-length
4317
+ !:mime application/x-tokyocabinet-fixed
4318
+ >32 byte 3 \b, Table
4319
+ !:mime application/x-tokyocabinet-table
4320
+ >33 byte &1 \b, [open]
4321
+ >33 byte &2 \b, [fatal]
4322
+ >34 byte x \b, apow=%d
4323
+ >35 byte x \b, fpow=%d
4324
+ >36 byte &0x01 \b, [large]
4325
+ >36 byte &0x02 \b, [deflate]
4326
+ >36 byte &0x04 \b, [bzip]
4327
+ >36 byte &0x08 \b, [tcbs]
4328
+ >36 byte &0x10 \b, [excodec]
4329
+ >40 lequad x \b, bnum=%lld
4330
+ >48 lequad x \b, rnum=%lld
4331
+ >56 lequad x \b, fsiz=%lld
4332
+
4333
+ # Type: QDBM Quick Database Manager
4334
+ # From: Benoit Sibaud <bsibaud@april.org>
4335
+ 0 string \\[depot\\]\n\f Quick Database Manager, little endian
4336
+ 0 string \\[DEPOT\\]\n\f Quick Database Manager, big endian
4337
+
4338
+ # Type: TokyoCabinet database
4339
+ # URL: http://tokyocabinet.sourceforge.net/
4340
+ # From: Benoit Sibaud <bsibaud@april.org>
4341
+ 0 string ToKyO\ CaBiNeT\n TokyoCabinet database
4342
+ >14 string x (version %s)
4343
+
4344
+ #------------------------------------------------------------------------------
4345
+ # diamond: file(1) magic for Diamond system
4346
+ #
4347
+ # ... diamond is a multi-media mail and electronic conferencing system....
4348
+ #
4349
+ # XXX - I think it was either renamed Slate, or replaced by Slate....
4350
+ #
4351
+ # The full deal is too long...
4352
+ #0 string <list>\n<protocol\ bbn-multimedia-format> Diamond Multimedia Document
4353
+ 0 string =<list>\n<protocol\ bbn-m Diamond Multimedia Document
4354
+ #------------------------------------------------------------------------------
4355
+ # diff: file(1) magic for diff(1) output
4356
+ #
4357
+ 0 search/1 diff\ diff output text
4358
+ !:mime text/x-diff
4359
+ 0 search/1 ***\ diff output text
4360
+ !:mime text/x-diff
4361
+ 0 search/1 Only\ in\ diff output text
4362
+ !:mime text/x-diff
4363
+ 0 search/1 Common\ subdirectories:\ diff output text
4364
+ !:mime text/x-diff
4365
+
4366
+ 0 search/1 Index: RCS/CVS diff output text
4367
+ !:mime text/x-diff
4368
+ # Digital UNIX - Info
4369
+ #
4370
+ 0 string =!<arch>\n________64E Alpha archive
4371
+ >22 string X -- out of date
4372
+ #
4373
+ # Alpha COFF Based Executables
4374
+ # The stripped stuff really needs to be an 8 byte (64 bit) compare,
4375
+ # but this works
4376
+ 0 leshort 0x183 COFF format alpha
4377
+ >22 leshort&020000 &010000 sharable library,
4378
+ >22 leshort&020000 ^010000 dynamically linked,
4379
+ >24 leshort 0410 pure
4380
+ >24 leshort 0413 demand paged
4381
+ >8 lelong >0 executable or object module, not stripped
4382
+ >8 lelong 0
4383
+ >>12 lelong 0 executable or object module, stripped
4384
+ >>12 lelong >0 executable or object module, not stripped
4385
+ >27 byte >0 - version %d.
4386
+ >26 byte >0 %d-
4387
+ >28 leshort >0 %d
4388
+ #
4389
+ # The next is incomplete, we could tell more about this format,
4390
+ # but its not worth it.
4391
+ 0 leshort 0x188 Alpha compressed COFF
4392
+ 0 leshort 0x18f Alpha u-code object
4393
+ #
4394
+ #
4395
+ # Some other interesting Digital formats,
4396
+ 0 string \377\377\177 ddis/ddif
4397
+ 0 string \377\377\174 ddis/dots archive
4398
+ 0 string \377\377\176 ddis/dtif table data
4399
+ 0 string \033c\033 LN03 output
4400
+ 0 long 04553207 X image
4401
+ #
4402
+ 0 string =!<PDF>!\n profiling data file
4403
+ #
4404
+ # Locale data tables (MIPS and Alpha).
4405
+ #
4406
+ 0 short 0x0501 locale data table
4407
+ >6 short 0x24 for MIPS
4408
+ >6 short 0x40 for Alpha
4409
+ # ATSC A/53 aka AC-3 aka Dolby Digital <ashitaka@gmx.at>
4410
+ # from http://www.atsc.org/standards/a_52a.pdf
4411
+ # corrections, additions, etc. are always welcome!
4412
+ #
4413
+ # syncword
4414
+ 0 beshort 0x0b77 ATSC A/52 aka AC-3 aka Dolby Digital stream,
4415
+ # fscod
4416
+ >4 byte&0xc0 0x00 48 kHz,
4417
+ >4 byte&0xc0 0x40 44.1 kHz,
4418
+ >4 byte&0xc0 0x80 32 kHz,
4419
+ # is this one used for 96 kHz?
4420
+ >4 byte&0xc0 0xc0 reserved frequency,
4421
+ #
4422
+ >5 byte&7 = 0 \b, complete main (CM)
4423
+ >5 byte&7 = 1 \b, music and effects (ME)
4424
+ >5 byte&7 = 2 \b, visually impaired (VI)
4425
+ >5 byte&7 = 3 \b, hearing impaired (HI)
4426
+ >5 byte&7 = 4 \b, dialogue (D)
4427
+ >5 byte&7 = 5 \b, commentary (C)
4428
+ >5 byte&7 = 6 \b, emergency (E)
4429
+ # acmod
4430
+ >6 byte&0xe0 0x00 1+1 front,
4431
+ >6 byte&0xe0 0x20 1 front/0 rear,
4432
+ >6 byte&0xe0 0x40 2 front/0 rear,
4433
+ >6 byte&0xe0 0x60 3 front/0 rear,
4434
+ >6 byte&0xe0 0x80 2 front/1 rear,
4435
+ >6 byte&0xe0 0xa0 3 front/1 rear,
4436
+ >6 byte&0xe0 0xc0 2 front/2 rear,
4437
+ >6 byte&0xe0 0xe0 3 front/2 rear,
4438
+ # lfeon (these may be incorrect)
4439
+ >7 byte&0x40 0x00 LFE off,
4440
+ >7 byte&0x40 0x40 LFE on,
4441
+ #
4442
+ >4 byte&0x3e = 0x00 \b, 32 kbit/s
4443
+ >4 byte&0x3e = 0x02 \b, 40 kbit/s
4444
+ >4 byte&0x3e = 0x04 \b, 48 kbit/s
4445
+ >4 byte&0x3e = 0x06 \b, 56 kbit/s
4446
+ >4 byte&0x3e = 0x08 \b, 64 kbit/s
4447
+ >4 byte&0x3e = 0x0a \b, 80 kbit/s
4448
+ >4 byte&0x3e = 0x0c \b, 96 kbit/s
4449
+ >4 byte&0x3e = 0x0e \b, 112 kbit/s
4450
+ >4 byte&0x3e = 0x10 \b, 128 kbit/s
4451
+ >4 byte&0x3e = 0x12 \b, 160 kbit/s
4452
+ >4 byte&0x3e = 0x14 \b, 192 kbit/s
4453
+ >4 byte&0x3e = 0x16 \b, 224 kbit/s
4454
+ >4 byte&0x3e = 0x18 \b, 256 kbit/s
4455
+ >4 byte&0x3e = 0x1a \b, 320 kbit/s
4456
+ >4 byte&0x3e = 0x1c \b, 384 kbit/s
4457
+ >4 byte&0x3e = 0x1e \b, 448 kbit/s
4458
+ >4 byte&0x3e = 0x20 \b, 512 kbit/s
4459
+ >4 byte&0x3e = 0x22 \b, 576 kbit/s
4460
+ >4 byte&0x3e = 0x24 \b, 640 kbit/s
4461
+ # dsurmod (these may be incorrect)
4462
+ >6 beshort&0x0180 0x0000 Dolby Surround not indicated
4463
+ >6 beshort&0x0180 0x0080 not Dolby Surround encoded
4464
+ >6 beshort&0x0180 0x0100 Dolby Surround encoded
4465
+ >6 beshort&0x0180 0x0180 reserved Dolby Surround mode
4466
+
4467
+ #------------------------------------------------------------------------------
4468
+ # dump: file(1) magic for dump file format--for new and old dump filesystems
4469
+ #
4470
+ # We specify both byte orders in order to recognize byte-swapped dumps.
4471
+ #
4472
+ 24 belong 60012 new-fs dump file (big endian),
4473
+ >4 bedate x Previous dump %s,
4474
+ >8 bedate x This dump %s,
4475
+ >12 belong >0 Volume %ld,
4476
+ >692 belong 0 Level zero, type:
4477
+ >692 belong >0 Level %d, type:
4478
+ >0 belong 1 tape header,
4479
+ >0 belong 2 beginning of file record,
4480
+ >0 belong 3 map of inodes on tape,
4481
+ >0 belong 4 continuation of file record,
4482
+ >0 belong 5 end of volume,
4483
+ >0 belong 6 map of inodes deleted,
4484
+ >0 belong 7 end of medium (for floppy),
4485
+ >676 string >\0 Label %s,
4486
+ >696 string >\0 Filesystem %s,
4487
+ >760 string >\0 Device %s,
4488
+ >824 string >\0 Host %s,
4489
+ >888 belong >0 Flags %x
4490
+
4491
+ 24 belong 60011 old-fs dump file (big endian),
4492
+ #>4 bedate x Previous dump %s,
4493
+ #>8 bedate x This dump %s,
4494
+ >12 belong >0 Volume %ld,
4495
+ >692 belong 0 Level zero, type:
4496
+ >692 belong >0 Level %d, type:
4497
+ >0 belong 1 tape header,
4498
+ >0 belong 2 beginning of file record,
4499
+ >0 belong 3 map of inodes on tape,
4500
+ >0 belong 4 continuation of file record,
4501
+ >0 belong 5 end of volume,
4502
+ >0 belong 6 map of inodes deleted,
4503
+ >0 belong 7 end of medium (for floppy),
4504
+ >676 string >\0 Label %s,
4505
+ >696 string >\0 Filesystem %s,
4506
+ >760 string >\0 Device %s,
4507
+ >824 string >\0 Host %s,
4508
+ >888 belong >0 Flags %x
4509
+
4510
+ 24 lelong 60012 new-fs dump file (little endian),
4511
+ >4 ledate x This dump %s,
4512
+ >8 ledate x Previous dump %s,
4513
+ >12 lelong >0 Volume %ld,
4514
+ >692 lelong 0 Level zero, type:
4515
+ >692 lelong >0 Level %d, type:
4516
+ >0 lelong 1 tape header,
4517
+ >0 lelong 2 beginning of file record,
4518
+ >0 lelong 3 map of inodes on tape,
4519
+ >0 lelong 4 continuation of file record,
4520
+ >0 lelong 5 end of volume,
4521
+ >0 lelong 6 map of inodes deleted,
4522
+ >0 lelong 7 end of medium (for floppy),
4523
+ >676 string >\0 Label %s,
4524
+ >696 string >\0 Filesystem %s,
4525
+ >760 string >\0 Device %s,
4526
+ >824 string >\0 Host %s,
4527
+ >888 lelong >0 Flags %x
4528
+
4529
+ 24 lelong 60011 old-fs dump file (little endian),
4530
+ #>4 ledate x Previous dump %s,
4531
+ #>8 ledate x This dump %s,
4532
+ >12 lelong >0 Volume %ld,
4533
+ >692 lelong 0 Level zero, type:
4534
+ >692 lelong >0 Level %d, type:
4535
+ >0 lelong 1 tape header,
4536
+ >0 lelong 2 beginning of file record,
4537
+ >0 lelong 3 map of inodes on tape,
4538
+ >0 lelong 4 continuation of file record,
4539
+ >0 lelong 5 end of volume,
4540
+ >0 lelong 6 map of inodes deleted,
4541
+ >0 lelong 7 end of medium (for floppy),
4542
+ >676 string >\0 Label %s,
4543
+ >696 string >\0 Filesystem %s,
4544
+ >760 string >\0 Device %s,
4545
+ >824 string >\0 Host %s,
4546
+ >888 lelong >0 Flags %x
4547
+
4548
+ 18 leshort 60011 old-fs dump file (16-bit, assuming PDP-11 endianness),
4549
+ >2 medate x Previous dump %s,
4550
+ >6 medate x This dump %s,
4551
+ >10 leshort >0 Volume %ld,
4552
+ >0 leshort 1 tape header.
4553
+ >0 leshort 2 beginning of file record.
4554
+ >0 leshort 3 map of inodes on tape.
4555
+ >0 leshort 4 continuation of file record.
4556
+ >0 leshort 5 end of volume.
4557
+ >0 leshort 6 map of inodes deleted.
4558
+ >0 leshort 7 end of medium (for floppy).
4559
+
4560
+ 24 belong 0x19540119 new-fs dump file (ufs2, big endian),
4561
+ >896 beqdate x Previous dump %s,
4562
+ >904 beqdate x This dump %s,
4563
+ >12 belong >0 Volume %ld,
4564
+ >692 belong 0 Level zero, type:
4565
+ >692 belong >0 Level %d, type:
4566
+ >0 belong 1 tape header,
4567
+ >0 belong 2 beginning of file record,
4568
+ >0 belong 3 map of inodes on tape,
4569
+ >0 belong 4 continuation of file record,
4570
+ >0 belong 5 end of volume,
4571
+ >0 belong 6 map of inodes deleted,
4572
+ >0 belong 7 end of medium (for floppy),
4573
+ >676 string >\0 Label %s,
4574
+ >696 string >\0 Filesystem %s,
4575
+ >760 string >\0 Device %s,
4576
+ >824 string >\0 Host %s,
4577
+ >888 belong >0 Flags %x
4578
+
4579
+ 24 lelong 0x19540119 new-fs dump file (ufs2, little endian),
4580
+ >896 leqdate x This dump %s,
4581
+ >904 leqdate x Previous dump %s,
4582
+ >12 lelong >0 Volume %ld,
4583
+ >692 lelong 0 Level zero, type:
4584
+ >692 lelong >0 Level %d, type:
4585
+ >0 lelong 1 tape header,
4586
+ >0 lelong 2 beginning of file record,
4587
+ >0 lelong 3 map of inodes on tape,
4588
+ >0 lelong 4 continuation of file record,
4589
+ >0 lelong 5 end of volume,
4590
+ >0 lelong 6 map of inodes deleted,
4591
+ >0 lelong 7 end of medium (for floppy),
4592
+ >676 string >\0 Label %s,
4593
+ >696 string >\0 Filesystem %s,
4594
+ >760 string >\0 Device %s,
4595
+ >824 string >\0 Host %s,
4596
+ >888 lelong >0 Flags %x
4597
+
4598
+ #------------------------------------------------------------------------------
4599
+ # Dyadic: file(1) magic for Dyalog APL.
4600
+ #
4601
+ 0 byte 0xaa
4602
+ >1 byte <4 Dyalog APL
4603
+ >>1 byte 0x00 incomplete workspace
4604
+ >>1 byte 0x01 component file
4605
+ >>1 byte 0x02 external variable
4606
+ >>1 byte 0x03 workspace
4607
+ >>2 byte x version %d
4608
+ >>3 byte x .%d
4609
+
4610
+ #------------------------------------------------------------------------------
4611
+ # T602 editor documents
4612
+ # by David Necas <yeti@physics.muni.cz>
4613
+ 0 string @CT\ T602 document data,
4614
+ >4 string 0 Kamenicky
4615
+ >4 string 1 CP 852
4616
+ >4 string 2 KOI8-CS
4617
+ >4 string >2 unknown encoding
4618
+
4619
+ # Vi IMproved Encrypted file
4620
+ # by David Necas <yeti@physics.muni.cz>
4621
+ 0 string VimCrypt~ Vim encrypted file data
4622
+ # Vi IMproved Swap file
4623
+ # by Sven Wegener <swegener@gentoo.org>
4624
+ 0 string b0VIM\ Vim swap file
4625
+ >&0 string >\0 \b, version %s
4626
+
4627
+ #------------------------------------------------------------------------------
4628
+ # efi: file(1) magic for Universal EFI binaries
4629
+
4630
+ 0 lelong 0x0ef1fab9
4631
+ >4 lelong 1 Universal EFI binary with 1 architecture
4632
+ >>&0 lelong 7 \b, i386
4633
+ >>&0 lelong 0x01000007 \b, x86_64
4634
+ >4 lelong 2 Universal EFI binary with 2 architectures
4635
+ >>&0 lelong 7 \b, i386
4636
+ >>&0 lelong 0x01000007 \b, x86_64
4637
+ >>&20 lelong 7 \b, i386
4638
+ >>&20 lelong 0x01000007 \b, x86_64
4639
+ >4 lelong >2 Universal EFI binary with %ld architectures
4640
+
4641
+ #------------------------------------------------------------------------------
4642
+ # elf: file(1) magic for ELF executables
4643
+ #
4644
+ # We have to check the byte order flag to see what byte order all the
4645
+ # other stuff in the header is in.
4646
+ #
4647
+ # What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
4648
+ #
4649
+ # Created by: unknown
4650
+ # Modified by (1): Daniel Quinlan <quinlan@yggdrasil.com>
4651
+ # Modified by (2): Peter Tobias <tobias@server.et-inf.fho-emden.de> (core support)
4652
+ # Modified by (3): Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de> (fix of core support)
4653
+ # Modified by (4): <gerardo.cacciari@gmail.com> (VMS Itanium)
4654
+ # Modified by (5): Matthias Urlichs <smurf@debian.org> (Listing of many architectures)
4655
+ 0 string \177ELF ELF
4656
+ >4 byte 0 invalid class
4657
+ >4 byte 1 32-bit
4658
+ >4 byte 2 64-bit
4659
+ >5 byte 0 invalid byte order
4660
+ >5 byte 1 LSB
4661
+ >>16 leshort 0 no file type,
4662
+ !:strength *2
4663
+ !:mime application/octet-stream
4664
+ >>16 leshort 1 relocatable,
4665
+ !:mime application/x-object
4666
+ >>16 leshort 2 executable,
4667
+ !:mime application/x-executable
4668
+ >>16 leshort 3 shared object,
4669
+ !:mime application/x-sharedlib
4670
+ >>16 leshort 4 core file
4671
+ !:mime application/x-coredump
4672
+ # Core file detection is not reliable.
4673
+ #>>>(0x38+0xcc) string >\0 of '%s'
4674
+ #>>>(0x38+0x10) lelong >0 (signal %d),
4675
+ >>16 leshort &0xff00 processor-specific,
4676
+ >>18 leshort 0 no machine,
4677
+ >>18 leshort 1 AT&T WE32100 - invalid byte order,
4678
+ >>18 leshort 2 SPARC - invalid byte order,
4679
+ >>18 leshort 3 Intel 80386,
4680
+ >>18 leshort 4 Motorola
4681
+ >>>36 lelong &0x01000000 68000 - invalid byte order,
4682
+ >>>36 lelong &0x00810000 CPU32 - invalid byte order,
4683
+ >>>36 lelong 0 68020 - invalid byte order,
4684
+ >>18 leshort 5 Motorola 88000 - invalid byte order,
4685
+ >>18 leshort 6 Intel 80486,
4686
+ >>18 leshort 7 Intel 80860,
4687
+ # The official e_machine number for MIPS is now #8, regardless of endianness.
4688
+ # The second number (#10) will be deprecated later. For now, we still
4689
+ # say something if #10 is encountered, but only gory details for #8.
4690
+ >>18 leshort 8 MIPS,
4691
+ >>>36 lelong &0x20 N32
4692
+ >>18 leshort 10 MIPS,
4693
+ >>>36 lelong &0x20 N32
4694
+ >>18 leshort 8
4695
+ # only for 32-bit
4696
+ >>>4 byte 1
4697
+ >>>>36 lelong&0xf0000000 0x00000000 MIPS-I
4698
+ >>>>36 lelong&0xf0000000 0x10000000 MIPS-II
4699
+ >>>>36 lelong&0xf0000000 0x20000000 MIPS-III
4700
+ >>>>36 lelong&0xf0000000 0x30000000 MIPS-IV
4701
+ >>>>36 lelong&0xf0000000 0x40000000 MIPS-V
4702
+ >>>>36 lelong&0xf0000000 0x50000000 MIPS32
4703
+ >>>>36 lelong&0xf0000000 0x60000000 MIPS64
4704
+ >>>>36 lelong&0xf0000000 0x70000000 MIPS32 rel2
4705
+ >>>>36 lelong&0xf0000000 0x80000000 MIPS64 rel2
4706
+ # only for 64-bit
4707
+ >>>4 byte 2
4708
+ >>>>48 lelong&0xf0000000 0x00000000 MIPS-I
4709
+ >>>>48 lelong&0xf0000000 0x10000000 MIPS-II
4710
+ >>>>48 lelong&0xf0000000 0x20000000 MIPS-III
4711
+ >>>>48 lelong&0xf0000000 0x30000000 MIPS-IV
4712
+ >>>>48 lelong&0xf0000000 0x40000000 MIPS-V
4713
+ >>>>48 lelong&0xf0000000 0x50000000 MIPS32
4714
+ >>>>48 lelong&0xf0000000 0x60000000 MIPS64
4715
+ >>>>48 lelong&0xf0000000 0x70000000 MIPS32 rel2
4716
+ >>>>48 lelong&0xf0000000 0x80000000 MIPS64 rel2
4717
+ >>18 leshort 9 Amdahl - invalid byte order,
4718
+ >>18 leshort 10 MIPS (deprecated),
4719
+ >>18 leshort 11 RS6000 - invalid byte order,
4720
+ >>18 leshort 15 PA-RISC - invalid byte order,
4721
+ >>>50 leshort 0x0214 2.0
4722
+ >>>48 leshort &0x0008 (LP64),
4723
+ >>18 leshort 16 nCUBE,
4724
+ >>18 leshort 17 Fujitsu VPP500,
4725
+ >>18 leshort 18 SPARC32PLUS - invalid byte order,
4726
+ >>18 leshort 20 PowerPC,
4727
+ >>18 leshort 22 IBM S/390,
4728
+ >>18 leshort 36 NEC V800,
4729
+ >>18 leshort 37 Fujitsu FR20,
4730
+ >>18 leshort 38 TRW RH-32,
4731
+ >>18 leshort 39 Motorola RCE,
4732
+ >>18 leshort 40 ARM,
4733
+ >>18 leshort 41 Alpha,
4734
+ >>18 leshort 0xa390 IBM S/390 (obsolete),
4735
+ >>18 leshort 42 Renesas SH,
4736
+ >>18 leshort 43 SPARC V9 - invalid byte order,
4737
+ >>18 leshort 44 Siemens Tricore Embedded Processor,
4738
+ >>18 leshort 45 Argonaut RISC Core, Argonaut Technologies Inc.,
4739
+ >>18 leshort 46 Renesas H8/300,
4740
+ >>18 leshort 47 Renesas H8/300H,
4741
+ >>18 leshort 48 Renesas H8S,
4742
+ >>18 leshort 49 Renesas H8/500,
4743
+ >>18 leshort 50 IA-64,
4744
+ >>18 leshort 51 Stanford MIPS-X,
4745
+ >>18 leshort 52 Motorola Coldfire,
4746
+ >>18 leshort 53 Motorola M68HC12,
4747
+ >>18 leshort 54 Fujitsu MMA,
4748
+ >>18 leshort 55 Siemens PCP,
4749
+ >>18 leshort 56 Sony nCPU,
4750
+ >>18 leshort 57 Denso NDR1,
4751
+ >>18 leshort 58 Start*Core,
4752
+ >>18 leshort 59 Toyota ME16,
4753
+ >>18 leshort 60 ST100,
4754
+ >>18 leshort 61 Tinyj emb.,
4755
+ >>18 leshort 62 x86-64,
4756
+ >>18 leshort 63 Sony DSP,
4757
+ >>18 leshort 66 FX66,
4758
+ >>18 leshort 67 ST9+ 8/16 bit,
4759
+ >>18 leshort 68 ST7 8 bit,
4760
+ >>18 leshort 69 MC68HC16,
4761
+ >>18 leshort 70 MC68HC11,
4762
+ >>18 leshort 71 MC68HC08,
4763
+ >>18 leshort 72 MC68HC05,
4764
+ >>18 leshort 73 SGI SVx,
4765
+ >>18 leshort 74 ST19 8 bit,
4766
+ >>18 leshort 75 Digital VAX,
4767
+ >>18 leshort 76 Axis cris,
4768
+ >>18 leshort 77 Infineon 32-bit embedded,
4769
+ >>18 leshort 78 Element 14 64-bit DSP,
4770
+ >>18 leshort 79 LSI Logic 16-bit DSP,
4771
+ >>18 leshort 80 MMIX,
4772
+ >>18 leshort 81 Harvard machine-independent,
4773
+ >>18 leshort 82 SiTera Prism,
4774
+ >>18 leshort 83 Atmel AVR 8-bit,
4775
+ >>18 leshort 84 Fujitsu FR30,
4776
+ >>18 leshort 85 Mitsubishi D10V,
4777
+ >>18 leshort 86 Mitsubishi D30V,
4778
+ >>18 leshort 87 NEC v850,
4779
+ >>18 leshort 88 Renesas M32R,
4780
+ >>18 leshort 89 Matsushita MN10300,
4781
+ >>18 leshort 90 Matsushita MN10200,
4782
+ >>18 leshort 91 picoJava,
4783
+ >>18 leshort 92 OpenRISC,
4784
+ >>18 leshort 93 ARC Cores Tangent-A5,
4785
+ >>18 leshort 94 Tensilica Xtensa,
4786
+ >>18 leshort 97 NatSemi 32k,
4787
+ >>18 leshort 106 Analog Devices Blackfin,
4788
+ >>18 leshort 113 Altera Nios II,
4789
+ >>18 leshort 0xae META,
4790
+ >>18 leshort 0x3426 OpenRISC (obsolete),
4791
+ >>18 leshort 0x8472 OpenRISC (obsolete),
4792
+ >>18 leshort 0x9026 Alpha (unofficial),
4793
+ >>20 lelong 0 invalid version
4794
+ >>20 lelong 1 version 1
4795
+ >>36 lelong 1 MathCoPro/FPU/MAU Required
4796
+ >5 byte 2 MSB
4797
+ >>16 beshort 0 no file type,
4798
+ !:mime application/octet-stream
4799
+ >>16 beshort 1 relocatable,
4800
+ !:mime application/x-object
4801
+ >>16 beshort 2 executable,
4802
+ !:mime application/x-executable
4803
+ >>16 beshort 3 shared object,
4804
+ !:mime application/x-sharedlib
4805
+ >>16 beshort 4 core file,
4806
+ !:mime application/x-coredump
4807
+ #>>>(0x38+0xcc) string >\0 of '%s'
4808
+ #>>>(0x38+0x10) belong >0 (signal %d),
4809
+ >>16 beshort &0xff00 processor-specific,
4810
+ >>18 beshort 0 no machine,
4811
+ >>18 beshort 1 AT&T WE32100,
4812
+ >>18 beshort 2 SPARC,
4813
+ >>18 beshort 3 Intel 80386 - invalid byte order,
4814
+ >>18 beshort 4 Motorola
4815
+ >>>36 belong &0x01000000 68000,
4816
+ >>>36 belong &0x00810000 CPU32,
4817
+ >>>36 belong 0 68020,
4818
+ >>18 beshort 5 Motorola 88000,
4819
+ >>18 beshort 6 Intel 80486 - invalid byte order,
4820
+ >>18 beshort 7 Intel 80860,
4821
+ # only for MIPS - see comment in little-endian section above.
4822
+ >>18 beshort 8 MIPS,
4823
+ >>>36 belong &0x20 N32
4824
+ >>18 beshort 10 MIPS,
4825
+ >>>36 belong &0x20 N32
4826
+ >>18 beshort 8
4827
+ # only for 32-bit
4828
+ >>>4 byte 1
4829
+ >>>>36 belong&0xf0000000 0x00000000 MIPS-I
4830
+ >>>>36 belong&0xf0000000 0x10000000 MIPS-II
4831
+ >>>>36 belong&0xf0000000 0x20000000 MIPS-III
4832
+ >>>>36 belong&0xf0000000 0x30000000 MIPS-IV
4833
+ >>>>36 belong&0xf0000000 0x40000000 MIPS-V
4834
+ >>>>36 belong&0xf0000000 0x50000000 MIPS32
4835
+ >>>>36 belong&0xf0000000 0x60000000 MIPS64
4836
+ >>>>36 belong&0xf0000000 0x70000000 MIPS32 rel2
4837
+ >>>>36 belong&0xf0000000 0x80000000 MIPS64 rel2
4838
+ # only for 64-bit
4839
+ >>>4 byte 2
4840
+ >>>>48 belong&0xf0000000 0x00000000 MIPS-I
4841
+ >>>>48 belong&0xf0000000 0x10000000 MIPS-II
4842
+ >>>>48 belong&0xf0000000 0x20000000 MIPS-III
4843
+ >>>>48 belong&0xf0000000 0x30000000 MIPS-IV
4844
+ >>>>48 belong&0xf0000000 0x40000000 MIPS-V
4845
+ >>>>48 belong&0xf0000000 0x50000000 MIPS32
4846
+ >>>>48 belong&0xf0000000 0x60000000 MIPS64
4847
+ >>>>48 belong&0xf0000000 0x70000000 MIPS32 rel2
4848
+ >>>>48 belong&0xf0000000 0x80000000 MIPS64 rel2
4849
+ >>18 beshort 9 Amdahl,
4850
+ >>18 beshort 10 MIPS (deprecated),
4851
+ >>18 beshort 11 RS6000,
4852
+ >>18 beshort 15 PA-RISC
4853
+ >>>50 beshort 0x0214 2.0
4854
+ >>>48 beshort &0x0008 (LP64)
4855
+ >>18 beshort 16 nCUBE,
4856
+ >>18 beshort 17 Fujitsu VPP500,
4857
+ >>18 beshort 18 SPARC32PLUS,
4858
+ >>>36 belong&0xffff00 0x000100 V8+ Required,
4859
+ >>>36 belong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required,
4860
+ >>>36 belong&0xffff00 0x000400 HaL R1 Extensions Required,
4861
+ >>>36 belong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required,
4862
+ >>18 beshort 20 PowerPC or cisco 4500,
4863
+ >>18 beshort 21 64-bit PowerPC or cisco 7500,
4864
+ >>18 beshort 22 IBM S/390,
4865
+ >>18 beshort 23 Cell SPU,
4866
+ >>18 beshort 24 cisco SVIP,
4867
+ >>18 beshort 25 cisco 7200,
4868
+ >>18 beshort 36 NEC V800 or cisco 12000,
4869
+ >>18 beshort 37 Fujitsu FR20,
4870
+ >>18 beshort 38 TRW RH-32,
4871
+ >>18 beshort 39 Motorola RCE,
4872
+ >>18 beshort 40 ARM,
4873
+ >>18 beshort 41 Alpha,
4874
+ >>18 beshort 42 Renesas SH,
4875
+ >>18 beshort 43 SPARC V9,
4876
+ >>>48 belong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required,
4877
+ >>>48 belong&0xffff00 0x000400 HaL R1 Extensions Required,
4878
+ >>>48 belong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required,
4879
+ >>>48 belong&0x3 0 total store ordering,
4880
+ >>>48 belong&0x3 1 partial store ordering,
4881
+ >>>48 belong&0x3 2 relaxed memory ordering,
4882
+ >>18 beshort 44 Siemens Tricore Embedded Processor,
4883
+ >>18 beshort 45 Argonaut RISC Core, Argonaut Technologies Inc.,
4884
+ >>18 beshort 46 Renesas H8/300,
4885
+ >>18 beshort 47 Renesas H8/300H,
4886
+ >>18 beshort 48 Renesas H8S,
4887
+ >>18 beshort 49 Renesas H8/500,
4888
+ >>18 beshort 50 IA-64,
4889
+ >>18 beshort 51 Stanford MIPS-X,
4890
+ >>18 beshort 52 Motorola Coldfire,
4891
+ >>18 beshort 53 Motorola M68HC12,
4892
+ >>18 beshort 73 Cray NV1,
4893
+ >>18 beshort 75 Digital VAX,
4894
+ >>18 beshort 88 Renesas M32R,
4895
+ >>18 leshort 92 OpenRISC,
4896
+ >>18 leshort 0x3426 OpenRISC (obsolete),
4897
+ >>18 leshort 0x8472 OpenRISC (obsolete),
4898
+ >>18 beshort 94 Tensilica Xtensa,
4899
+ >>18 beshort 97 NatSemi 32k,
4900
+ >>18 beshort 0x18ad AVR32 (unofficial),
4901
+ >>18 beshort 0x9026 Alpha (unofficial),
4902
+ >>18 beshort 0xa390 IBM S/390 (obsolete),
4903
+ >>20 belong 0 invalid version
4904
+ >>20 belong 1 version 1
4905
+ >>36 belong 1 MathCoPro/FPU/MAU Required
4906
+ # Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed
4907
+ # like proper ELF, but extracting the string had bad results.
4908
+ >4 byte <0x80
4909
+ >>8 string >\0 (%s)
4910
+ >8 string \0
4911
+ >>7 byte 0 (SYSV)
4912
+ >>7 byte 1 (HP-UX)
4913
+ >>7 byte 2 (NetBSD)
4914
+ >>7 byte 3 (GNU/Linux)
4915
+ >>7 byte 4 (GNU/Hurd)
4916
+ >>7 byte 5 (86Open)
4917
+ >>7 byte 6 (Solaris)
4918
+ >>7 byte 7 (Monterey)
4919
+ >>7 byte 8 (IRIX)
4920
+ >>7 byte 9 (FreeBSD)
4921
+ >>7 byte 10 (Tru64)
4922
+ >>7 byte 11 (Novell Modesto)
4923
+ >>7 byte 12 (OpenBSD)
4924
+ >8 string \2
4925
+ >>7 byte 13 (OpenVMS)
4926
+ >>7 byte 97 (ARM)
4927
+ >>7 byte 255 (embedded)
4928
+
4929
+ #------------------------------------------------------------------------------
4930
+ # encore: file(1) magic for Encore machines
4931
+ #
4932
+ # XXX - needs to have the byte order specified (NS32K was little-endian,
4933
+ # dunno whether they run the 88K in little-endian mode or not).
4934
+ #
4935
+ 0 short 0x154 Encore
4936
+ >20 short 0x107 executable
4937
+ >20 short 0x108 pure executable
4938
+ >20 short 0x10b demand-paged executable
4939
+ >20 short 0x10f unsupported executable
4940
+ >12 long >0 not stripped
4941
+ >22 short >0 - version %ld
4942
+ >22 short 0 -
4943
+ #>4 date x stamp %s
4944
+ 0 short 0x155 Encore unsupported executable
4945
+ >12 long >0 not stripped
4946
+ >22 short >0 - version %ld
4947
+ >22 short 0 -
4948
+ #>4 date x stamp %s
4949
+ #------------------------------------------------------------------------------
4950
+ # EPOC : file(1) magic for EPOC documents [Psion Series 5/Osaris/Geofox 1]
4951
+ # Stefan Praszalowicz (hpicollo@worldnet.fr)
4952
+ # Useful information for improving this file can be found at:
4953
+ # http://software.frodo.looijaard.name/psiconv/formats/Index.html
4954
+ 0 lelong 0x10000037
4955
+ >4 lelong 0x1000006D
4956
+ >>8 lelong 0x1000007F Psion Word
4957
+ >>8 lelong 0x10000088 Psion Sheet
4958
+ >>8 lelong 0x1000007D Psion Sketch
4959
+ >>8 lelong 0x10000085 Psion TextEd
4960
+
4961
+ #------------------------------------------------------------------------------
4962
+ # erlang: file(1) magic for Erlang JAM and BEAM files
4963
+ # URL: http://www.erlang.org/faq/x779.html#AEN812
4964
+
4965
+ # OTP R3-R4
4966
+ 0 string \0177BEAM! Old Erlang BEAM file
4967
+ >6 short >0 - version %d
4968
+
4969
+ # OTP R5 and onwards
4970
+ 0 string FOR1
4971
+ >8 string BEAM Erlang BEAM file
4972
+
4973
+ # 4.2 version may have a copyright notice!
4974
+ 4 string Tue\ Jan\ 22\ 14:32:44\ MET\ 1991 Erlang JAM file - version 4.2
4975
+ 79 string Tue\ Jan\ 22\ 14:32:44\ MET\ 1991 Erlang JAM file - version 4.2
4976
+
4977
+ 4 string 1.0\ Fri\ Feb\ 3\ 09:55:56\ MET\ 1995 Erlang JAM file - version 4.3
4978
+
4979
+ #------------------------------------------------------------------------------
4980
+ # ESRI Shapefile format (.shp .shx .dbf=DBaseIII)
4981
+ # Based on info from
4982
+ # <URL:http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf>
4983
+ 0 belong 9994 ESRI Shapefile
4984
+ >4 belong =0
4985
+ >8 belong =0
4986
+ >12 belong =0
4987
+ >16 belong =0
4988
+ >20 belong =0
4989
+ >28 lelong x version %d
4990
+ >24 belong x length %d
4991
+ >32 lelong =0 type Null Shape
4992
+ >32 lelong =1 type Point
4993
+ >32 lelong =3 type PolyLine
4994
+ >32 lelong =5 type Polygon
4995
+ >32 lelong =8 type MultiPoint
4996
+ >32 lelong =11 type PointZ
4997
+ >32 lelong =13 type PolyLineZ
4998
+ >32 lelong =15 type PolygonZ
4999
+ >32 lelong =18 type MultiPointZ
5000
+ >32 lelong =21 type PointM
5001
+ >32 lelong =23 type PolyLineM
5002
+ >32 lelong =25 type PolygonM
5003
+ >32 lelong =28 type MultiPointM
5004
+ >32 lelong =31 type MultiPatch
5005
+
5006
+ #------------------------------------------------------------------------------
5007
+ # fcs: file(1) magic for FCS (Flow Cytometry Standard) data files
5008
+ # From Roger Leigh <roger@whinlatter.uklinux.net>
5009
+ 0 string FCS1.0 Flow Cytometry Standard (FCS) data, version 1.0
5010
+ 0 string FCS2.0 Flow Cytometry Standard (FCS) data, version 2.0
5011
+ 0 string FCS3.0 Flow Cytometry Standard (FCS) data, version 3.0
5012
+
5013
+
5014
+ #------------------------------------------------------------------------------
5015
+ # filesystems: file(1) magic for different filesystems
5016
+ #
5017
+ 0 string \366\366\366\366 PC formatted floppy with no filesystem
5018
+ # Sun disk labels
5019
+ # From /usr/include/sun/dklabel.h:
5020
+ 0774 beshort 0xdabe
5021
+ # modified by Joerg Jenderek, because original test
5022
+ # succeeds for Cabinet archive dao360.dl_ with negative blocks
5023
+ >0770 long >0 Sun disk label
5024
+ >>0 string x '%s
5025
+ >>>31 string >\0 \b%s
5026
+ >>>>63 string >\0 \b%s
5027
+ >>>>>95 string >\0 \b%s
5028
+ >>0 string x \b'
5029
+ >>0734 short >0 %d rpm,
5030
+ >>0736 short >0 %d phys cys,
5031
+ >>0740 short >0 %d alts/cyl,
5032
+ >>0746 short >0 %d interleave,
5033
+ >>0750 short >0 %d data cyls,
5034
+ >>0752 short >0 %d alt cyls,
5035
+ >>0754 short >0 %d heads/partition,
5036
+ >>0756 short >0 %d sectors/track,
5037
+ >>0764 long >0 start cyl %ld,
5038
+ >>0770 long x %ld blocks
5039
+ # Is there a boot block written 1 sector in?
5040
+ >512 belong&077777777 0600407 \b, boot block present
5041
+ # Joerg Jenderek: Smart Boot Manager backup file is 41 byte header + first sectors of disc
5042
+ # (http://btmgr.sourceforge.net/docs/user-guide-3.html)
5043
+ 0 string SBMBAKUP_ Smart Boot Manager backup file
5044
+ >9 string x \b, version %-5.5s
5045
+ >>14 string =_
5046
+ >>>15 string x %-.1s
5047
+ >>>>16 string =_ \b.
5048
+ >>>>>17 string x \b%-.1s
5049
+ >>>>>>18 string =_ \b.
5050
+ >>>>>>>19 string x \b%-.1s
5051
+ >>>22 ubyte 0
5052
+ >>>>21 ubyte x \b, from drive 0x%x
5053
+ >>>22 ubyte >0
5054
+ >>>>21 string x \b, from drive %s
5055
+
5056
+ # Joerg Jenderek
5057
+ # DOS Emulator image is 128 byte, null right padded header + harddisc image
5058
+ 0 string DOSEMU\0
5059
+ >0x27E leshort 0xAA55
5060
+ #offset is 128
5061
+ >>19 ubyte 128
5062
+ >>>(19.b-1) ubyte 0x0 DOS Emulator image
5063
+ >>>>7 ulelong >0 \b, %u heads
5064
+ >>>>11 ulelong >0 \b, %d sectors/track
5065
+ >>>>15 ulelong >0 \b, %d cylinders
5066
+
5067
+ # updated by Joerg Jenderek at Sep 2007
5068
+ # only for sector sizes with 512 or more Bytes
5069
+ 0x1FE leshort 0xAA55 x86 boot sector
5070
+ # to do also for sectors < than 512 Bytes and some other files, GRR
5071
+ #30 search/481 \x55\xAA x86 boot sector
5072
+ # not for BeOS floppy 1440k, MBRs
5073
+ #(11.s-2) uleshort 0xAA55 x86 boot sector
5074
+ >2 string OSBS \b, OS/BS MBR
5075
+ # J\xf6rg Jenderek <joerg dot jenderek at web dot de>
5076
+ >0x8C string Invalid\ partition\ table \b, MS-DOS MBR
5077
+ # dr-dos with some upper-, lowercase variants
5078
+ >0x9D string Invalid\ partition\ table$
5079
+ >>181 string No\ Operating\ System$
5080
+ >>>201 string Operating\ System\ load\ error$ \b, DR-DOS MBR, Version 7.01 to 7.03
5081
+ >0x9D string Invalid\ partition\ table$
5082
+ >>181 string No\ operating\ system$
5083
+ >>>201 string Operating\ system\ load\ error$ \b, DR-DOS MBR, Version 7.01 to 7.03
5084
+ >342 string Invalid\ partition\ table$
5085
+ >>366 string No\ operating\ system$
5086
+ >>>386 string Operating\ system\ load\ error$ \b, DR-DOS MBR, version 7.01 to 7.03
5087
+ >295 string NEWLDR\0
5088
+ >>302 string Bad\ PT\ $
5089
+ >>>310 string No\ OS\ $
5090
+ >>>>317 string OS\ load\ err$
5091
+ >>>>>329 string Moved\ or\ missing\ IBMBIO.LDR\n\r
5092
+ >>>>>>358 string Press\ any\ key\ to\ continue.\n\r$
5093
+ >>>>>>>387 string Copyright\ (c)\ 1984,1998
5094
+ >>>>>>>>411 string Caldera\ Inc.\0 \b, DR-DOS MBR (IBMBIO.LDR)
5095
+ >0x10F string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 4.10.1998, 4.10.2222
5096
+ >>0x1B8 ubelong >0 \b, Serial 0x%-.4x
5097
+ >0x8B string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 5.00 to 4.00.950
5098
+ >271 string Invalid\ partition\ table\0
5099
+ >>295 string Error\ loading\ operating\ system\0
5100
+ >>>326 string Missing\ operating\ system\0 \b, mbr
5101
+ #
5102
+ >139 string Invalid\ partition\ table\0
5103
+ >>163 string Error\ loading\ operating\ system\0
5104
+ >>>194 string Missing\ operating\ system\0 \b, Microsoft Windows XP mbr
5105
+ # http://www.heise.de/ct/05/09/006/ page 184
5106
+ #HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\DosDevices\?:=Serial4Bytes+8Bytes
5107
+ >>>>0x1B8 ulelong >0 \b,Serial 0x%-.4x
5108
+ >300 string Invalid\ partition\ table\0
5109
+ >>324 string Error\ loading\ operating\ system\0
5110
+ >>>355 string Missing\ operating\ system\0 \b, Microsoft Windows XP MBR
5111
+ #??>>>389 string Invalid\ system\ disk
5112
+ >>>>0x1B8 ulelong >0 \b, Serial 0x%-.4x
5113
+ >300 string Ung\201ltige\ Partitionstabelle
5114
+ #split string to avoid error: String too long
5115
+ >>328 string Fehler\ beim\ Laden\
5116
+ >>>346 string des\ Betriebssystems
5117
+ >>>>366 string Betriebssystem\ nicht\ vorhanden \b, Microsoft Windows XP MBR (german)
5118
+ >>>>>0x1B8 ulelong >0 \b, Serial 0x%-.4x
5119
+ #>0x145 string Default:\ F \b, FREE-DOS MBR
5120
+ #>0x14B string Default:\ F \b, FREE-DOS 1.0 MBR
5121
+ >0x145 search/7 Default:\ F \b, FREE-DOS MBR
5122
+ #>>313 string F0\ .\ .\ .
5123
+ #>>>322 string disk\ 1
5124
+ #>>>>382 string FAT3
5125
+ >64 string no\ active\ partition\ found
5126
+ >>96 string read\ error\ while\ reading\ drive \b, FREE-DOS Beta 0.9 MBR
5127
+ # Ranish Partition Manager http://www.ranish.com/part/
5128
+ >387 search/4 \0\ Error!\r
5129
+ >>378 search/7 Virus!
5130
+ >>>397 search/4 Booting\
5131
+ >>>>408 search/4 HD1/\0 \b, Ranish MBR (
5132
+ >>>>>416 string Writing\ changes... \b2.37
5133
+ >>>>>>438 ubyte x \b,0x%x dots
5134
+ >>>>>>440 ubyte >0 \b,virus check
5135
+ >>>>>>441 ubyte >0 \b,partition %c
5136
+ #2.38,2.42,2.44
5137
+ >>>>>416 string !Writing\ changes... \b
5138
+ >>>>>>418 ubyte 1 \bvirus check,
5139
+ >>>>>>419 ubyte x \b0x%x seconds
5140
+ >>>>>>420 ubyte&0x0F >0 \b,partition
5141
+ >>>>>>>420 ubyte&0x0F <5 \b %x
5142
+ >>>>>>>420 ubyte&0x0F 0Xf \b ask
5143
+ >>>>>420 ubyte x \b)
5144
+ #
5145
+ >271 string Operating\ system\ loading
5146
+ >>296 string error\r \b, SYSLINUX MBR (2.10)
5147
+ # http://www.acronis.de/
5148
+ >362 string MBR\ Error\ \0\r
5149
+ >>376 string ress\ any\ key\ to\
5150
+ >>>392 string boot\ from\ floppy...\0 \b, Acronis MBR
5151
+ # added by Joerg Jenderek
5152
+ # http://www.visopsys.org/
5153
+ # http://partitionlogic.org.uk/
5154
+ >309 string No\ bootable\ partition\ found\r
5155
+ >>339 string I/O\ Error\ reading\ boot\ sector\r \b, Visopsys MBR
5156
+ >349 string No\ bootable\ partition\ found\r
5157
+ >>379 string I/O\ Error\ reading\ boot\ sector\r \b, simple Visopsys MBR
5158
+ # bootloader, bootmanager
5159
+ >0x40 string SBML
5160
+ # label with 11 characters of FAT 12 bit filesystem
5161
+ >>43 string SMART\ BTMGR
5162
+ >>>430 string SBMK\ Bad!\r \b, Smart Boot Manager
5163
+ # OEM-ID not always "SBM"
5164
+ #>>>>3 strings SBM
5165
+ >>>>6 string >\0 \b, version %s
5166
+ >382 string XOSLLOADXCF \b, eXtended Operating System Loader
5167
+ >6 string LILO \b, LInux i386 boot LOader
5168
+ >>120 string LILO \b, version 22.3.4 SuSe
5169
+ >>172 string LILO \b, version 22.5.8 Debian
5170
+ # updated by Joerg Jenderek at Oct 2008
5171
+ # variables according to grub-0.97/stage1/stage1.S or
5172
+ # http://www.gnu.org/software/grub/manual/grub.html#Embedded-data
5173
+ # usual values are marked with comments to get only informations of strange GRUB loaders
5174
+ >342 search/60 \0Geom\0
5175
+ #>0 ulelong x %x=0x009048EB , 0x2a9048EB 0
5176
+ >>0x41 ubyte <2
5177
+ >>>0x3E ubyte >2 \b; GRand Unified Bootloader
5178
+ # 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90
5179
+ >>>>0x3E ubyte x \b, stage1 version 0x%x
5180
+ #If it is 0xFF, use a drive passed by BIOS
5181
+ >>>>0x40 ubyte <0xFF \b, boot drive 0x%x
5182
+ # in most case 0,1,0x2e for GRUB 0.5.95
5183
+ >>>>0x41 ubyte >0 \b, LBA flag 0x%x
5184
+ >>>>0x42 uleshort <0x8000 \b, stage2 address 0x%x
5185
+ #>>>>0x42 uleshort =0x8000 \b, stage2 address 0x%x (usual)
5186
+ >>>>0x42 uleshort >0x8000 \b, stage2 address 0x%x
5187
+ #>>>>0x44 ulelong =1 \b, 1st sector stage2 0x%x (default)
5188
+ >>>>0x44 ulelong >1 \b, 1st sector stage2 0x%x
5189
+ >>>>0x48 uleshort <0x800 \b, stage2 segment 0x%x
5190
+ #>>>>0x48 uleshort =0x800 \b, stage2 segment 0x%x (usual)
5191
+ >>>>0x48 uleshort >0x800 \b, stage2 segment 0x%x
5192
+ >>>>402 string Geom\0Hard\ Disk\0Read\0\ Error\0
5193
+ >>>>>394 string stage1 \b, GRUB version 0.5.95
5194
+ >>>>382 string Geom\0Hard\ Disk\0Read\0\ Error\0
5195
+ >>>>>376 string GRUB\ \0 \b, GRUB version 0.93 or 1.94
5196
+ >>>>383 string Geom\0Hard\ Disk\0Read\0\ Error\0
5197
+ >>>>>377 string GRUB\ \0 \b, GRUB version 0.94
5198
+ >>>>385 string Geom\0Hard\ Disk\0Read\0\ Error\0
5199
+ >>>>>379 string GRUB\ \0 \b, GRUB version 0.95 or 0.96
5200
+ >>>>391 string Geom\0Hard\ Disk\0Read\0\ Error\0
5201
+ >>>>>385 string GRUB\ \0 \b, GRUB version 0.97
5202
+ #unkown version
5203
+ >>>343 string Geom\0Read\0\ Error\0
5204
+ >>>>321 string Loading\ stage1.5 \b, GRUB version x.y
5205
+ >>>380 string Geom\0Hard\ Disk\0Read\0\ Error\0
5206
+ >>>>374 string GRUB\ \0 \b, GRUB version n.m
5207
+ # http://syslinux.zytor.com/
5208
+ >478 string Boot\ failed\r
5209
+ >>495 string LDLINUX\ SYS \b, SYSLINUX bootloader (1.62)
5210
+ >480 string Boot\ failed\r
5211
+ >>495 string LDLINUX\ SYS \b, SYSLINUX bootloader (2.06 or 2.11)
5212
+ >484 string Boot\ error\r \b, SYSLINUX bootloader (3.11)
5213
+ >395 string chksum\0\ ERROR!\0 \b, Gujin bootloader
5214
+ # http://www.bcdwb.de/bcdw/index_e.htm
5215
+ >3 string BCDL
5216
+ >>498 string BCDL\ \ \ \ BIN \b, Bootable CD Loader (1.50Z)
5217
+ # mbr partion table entries
5218
+ # OEM-ID does not contain MicroSoft,NEWLDR,DOS,SYSLINUX,or MTOOLs
5219
+ >3 string !MS
5220
+ >>3 string !SYSLINUX
5221
+ >>>3 string !MTOOL
5222
+ >>>>3 string !NEWLDR
5223
+ >>>>>5 string !DOS
5224
+ # not FAT (32 bit)
5225
+ >>>>>>82 string !FAT32
5226
+ #not Linux kernel
5227
+ >>>>>>>514 string !HdrS
5228
+ #not BeOS
5229
+ >>>>>>>>422 string !Be\ Boot\ Loader
5230
+ # active flag 0 or 0x80 and type > 0
5231
+ >>>>>>>>>446 ubyte <0x81
5232
+ >>>>>>>>>>446 ubyte&0x7F 0
5233
+ >>>>>>>>>>>450 ubyte >0 \b; partition 1: ID=0x%x
5234
+ >>>>>>>>>>>>446 ubyte 0x80 \b, active
5235
+ >>>>>>>>>>>>447 ubyte x \b, starthead %u
5236
+ #>>>>>>>>>>>>448 ubyte x \b, start C_S: 0x%x
5237
+ #>>>>>>>>>>>>448 ubeshort&1023 x \b, startcylinder? %d
5238
+ >>>>>>>>>>>>454 ulelong x \b, startsector %u
5239
+ >>>>>>>>>>>>458 ulelong x \b, %u sectors
5240
+ #
5241
+ >>>>>>>>>462 ubyte <0x81
5242
+ >>>>>>>>>>462 ubyte&0x7F 0
5243
+ >>>>>>>>>>>466 ubyte >0 \b; partition 2: ID=0x%x
5244
+ >>>>>>>>>>>>462 ubyte 0x80 \b, active
5245
+ >>>>>>>>>>>>463 ubyte x \b, starthead %u
5246
+ #>>>>>>>>>>>>464 ubyte x \b, start C_S: 0x%x
5247
+ #>>>>>>>>>>>>464 ubeshort&1023 x \b, startcylinder? %d
5248
+ >>>>>>>>>>>>470 ulelong x \b, startsector %u
5249
+ >>>>>>>>>>>>474 ulelong x \b, %u sectors
5250
+ #
5251
+ >>>>>>>>>478 ubyte <0x81
5252
+ >>>>>>>>>>478 ubyte&0x7F 0
5253
+ >>>>>>>>>>>482 ubyte >0 \b; partition 3: ID=0x%x
5254
+ >>>>>>>>>>>>478 ubyte 0x80 \b, active
5255
+ >>>>>>>>>>>>479 ubyte x \b, starthead %u
5256
+ #>>>>>>>>>>>>480 ubyte x \b, start C_S: 0x%x
5257
+ #>>>>>>>>>>>>481 ubyte x \b, start C2S: 0x%x
5258
+ #>>>>>>>>>>>>480 ubeshort&1023 x \b, startcylinder? %d
5259
+ >>>>>>>>>>>>486 ulelong x \b, startsector %u
5260
+ >>>>>>>>>>>>490 ulelong x \b, %u sectors
5261
+ #
5262
+ >>>>>>>>>494 ubyte <0x81
5263
+ >>>>>>>>>>494 ubyte&0x7F 0
5264
+ >>>>>>>>>>>498 ubyte >0 \b; partition 4: ID=0x%x
5265
+ >>>>>>>>>>>>494 ubyte 0x80 \b, active
5266
+ >>>>>>>>>>>>495 ubyte x \b, starthead %u
5267
+ #>>>>>>>>>>>>496 ubyte x \b, start C_S: 0x%x
5268
+ #>>>>>>>>>>>>496 ubeshort&1023 x \b, startcylinder? %d
5269
+ >>>>>>>>>>>>502 ulelong x \b, startsector %u
5270
+ >>>>>>>>>>>>506 ulelong x \b, %u sectors
5271
+ # mbr partion table entries end
5272
+ # http://www.acronis.de/
5273
+ #FAT label=ACRONIS\ SZ
5274
+ #OEM-ID=BOOTWIZ0
5275
+ >442 string Non-system\ disk,\
5276
+ >>459 string press\ any\ key...\x7\0 \b, Acronis Startup Recovery Loader
5277
+ # DOS names like F11.SYS are 8 right space padded bytes+3 bytes
5278
+ >>>477 ubyte&0xDF >0
5279
+ >>>>477 string x \b %-.3s
5280
+ >>>>>480 ubyte&0xDF >0
5281
+ >>>>>>480 string x \b%-.5s
5282
+ >>>>485 ubyte&0xDF >0
5283
+ >>>>>485 string x \b.%-.3s
5284
+ #
5285
+ >185 string FDBOOT\ Version\
5286
+ >>204 string \rNo\ Systemdisk.\
5287
+ >>>220 string Booting\ from\ harddisk.\n\r
5288
+ >>>245 string Cannot\ load\ from\ harddisk.\n\r
5289
+ >>>>273 string Insert\ Systemdisk\
5290
+ >>>>>291 string and\ press\ any\ key.\n\r \b, FDBOOT harddisk Bootloader
5291
+ >>>>>>200 string >\0 \b, version %-3s
5292
+ >242 string Bootsector\ from\ C.H.\ Hochst\204
5293
+ >>278 string No\ Systemdisk.\
5294
+ >>>293 string Booting\ from\ harddisk.\n\r
5295
+ >>>441 string Cannot\ load\ from\ harddisk.\n\r
5296
+ >>>>469 string Insert\ Systemdisk\
5297
+ >>>>>487 string and\ press\ any\ key.\n\r \b, WinImage harddisk Bootloader
5298
+ >>>>>>209 string >\0 \b, version %-4.4s
5299
+ >(1.b+2) ubyte 0xe
5300
+ >>(1.b+3) ubyte 0x1f
5301
+ >>>(1.b+4) ubyte 0xbe
5302
+ >>>>(1.b+5) ubyte 0x77
5303
+ >>>>(1.b+6) ubyte 0x7c
5304
+ >>>>>(1.b+7) ubyte 0xac
5305
+ >>>>>>(1.b+8) ubyte 0x22
5306
+ >>>>>>>(1.b+9) ubyte 0xc0
5307
+ >>>>>>>>(1.b+10) ubyte 0x74
5308
+ >>>>>>>>>(1.b+11) ubyte 0xb
5309
+ >>>>>>>>>>(1.b+12) ubyte 0x56
5310
+ >>>>>>>>>>(1.b+13) ubyte 0xb4 \b, mkdosfs boot message display
5311
+ >214 string Please\ try\ to\ install\ FreeDOS\ \b, DOS Emulator boot message display
5312
+ #>>244 string from\ dosemu-freedos-*-bin.tgz\r
5313
+ #>>>170 string Sorry,\ could\ not\ load\ an\
5314
+ #>>>>195 string operating\ system.\r\n
5315
+ #
5316
+ >103 string This\ is\ not\ a\ bootable\ disk.\
5317
+ >>132 string Please\ insert\ a\ bootable\
5318
+ >>>157 string floppy\ and\r\n
5319
+ >>>>169 string press\ any\ key\ to\ try\ again...\r \b, FREE-DOS message display
5320
+ #
5321
+ >66 string Solaris\ Boot\ Sector
5322
+ >>99 string Incomplete\ MDBoot\ load.
5323
+ >>>89 string Version \b, Sun Solaris Bootloader
5324
+ >>>>97 byte x version %c
5325
+ #
5326
+ >408 string OS/2\ !!\ SYS01475\r\0
5327
+ >>429 string OS/2\ !!\ SYS02025\r\0
5328
+ >>>450 string OS/2\ !!\ SYS02027\r\0
5329
+ >>>469 string OS2BOOT\ \ \ \ \b, IBM OS/2 Warp bootloader
5330
+ #
5331
+ >409 string OS/2\ !!\ SYS01475\r\0
5332
+ >>430 string OS/2\ !!\ SYS02025\r\0
5333
+ >>>451 string OS/2\ !!\ SYS02027\r\0
5334
+ >>>470 string OS2BOOT\ \ \ \ \b, IBM OS/2 Warp Bootloader
5335
+ >112 string This\ disk\ is\ not\ bootable\r
5336
+ >>142 string If\ you\ wish\ to\ make\ it\ bootable
5337
+ >>>176 string run\ the\ DOS\ program\ SYS\
5338
+ >>>200 string after\ the\r
5339
+ >>>>216 string system\ has\ been\ loaded\r\n
5340
+ >>>>>242 string Please\ insert\ a\ DOS\ diskette\
5341
+ >>>>>271 string into\r\n\ the\ drive\ and\
5342
+ >>>>>>292 string strike\ any\ key...\0 \b, IBM OS/2 Warp message display
5343
+ # XP
5344
+ >430 string NTLDR\ is\ missing\xFF\r\n
5345
+ >>449 string Disk\ error\xFF\r\n
5346
+ >>>462 string Press\ any\ key\ to\ restart\r \b, Microsoft Windows XP Bootloader
5347
+ # DOS names like NTLDR,CMLDR,$LDR$ are 8 right space padded bytes+3 bytes
5348
+ >>>>417 ubyte&0xDF >0
5349
+ >>>>>417 string x %-.5s
5350
+ >>>>>>422 ubyte&0xDF >0
5351
+ >>>>>>>422 string x \b%-.3s
5352
+ >>>>>425 ubyte&0xDF >0
5353
+ >>>>>>425 string >\ \b.%-.3s
5354
+ #
5355
+ >>>>371 ubyte >0x20
5356
+ >>>>>368 ubyte&0xDF >0
5357
+ >>>>>>368 string x %-.5s
5358
+ >>>>>>>373 ubyte&0xDF >0
5359
+ >>>>>>>>373 string x \b%-.3s
5360
+ >>>>>>376 ubyte&0xDF >0
5361
+ >>>>>>>376 string x \b.%-.3s
5362
+ #
5363
+ >430 string NTLDR\ nicht\ gefunden\xFF\r\n
5364
+ >>453 string Datentr\204gerfehler\xFF\r\n
5365
+ >>>473 string Neustart\ mit\ beliebiger\ Taste\r \b, Microsoft Windows XP Bootloader (german)
5366
+ >>>>417 ubyte&0xDF >0
5367
+ >>>>>417 string x %-.5s
5368
+ >>>>>>422 ubyte&0xDF >0
5369
+ >>>>>>>422 string x \b%-.3s
5370
+ >>>>>425 ubyte&0xDF >0
5371
+ >>>>>>425 string >\ \b.%-.3s
5372
+ # offset variant
5373
+ >>>>379 string \0
5374
+ >>>>>368 ubyte&0xDF >0
5375
+ >>>>>>368 string x %-.5s
5376
+ >>>>>>>373 ubyte&0xDF >0
5377
+ >>>>>>>>373 string x \b%-.3s
5378
+ #
5379
+ >430 string NTLDR\ fehlt\xFF\r\n
5380
+ >>444 string Datentr\204gerfehler\xFF\r\n
5381
+ >>>464 string Neustart\ mit\ beliebiger\ Taste\r \b, Microsoft Windows XP Bootloader (2.german)
5382
+ >>>>417 ubyte&0xDF >0
5383
+ >>>>>417 string x %-.5s
5384
+ >>>>>>422 ubyte&0xDF >0
5385
+ >>>>>>>422 string x \b%-.3s
5386
+ >>>>>425 ubyte&0xDF >0
5387
+ >>>>>>425 string >\ \b.%-.3s
5388
+ # variant
5389
+ >>>>371 ubyte >0x20
5390
+ >>>>>368 ubyte&0xDF >0
5391
+ >>>>>>368 string x %-.5s
5392
+ >>>>>>>373 ubyte&0xDF >0
5393
+ >>>>>>>>373 string x \b%-.3s
5394
+ >>>>>>376 ubyte&0xDF >0
5395
+ >>>>>>>376 string x \b.%-.3s
5396
+ #
5397
+ >430 string NTLDR\ fehlt\xFF\r\n
5398
+ >>444 string Medienfehler\xFF\r\n
5399
+ >>>459 string Neustart:\ Taste\ dr\201cken\r \b, Microsoft Windows XP Bootloader (3.german)
5400
+ >>>>371 ubyte >0x20
5401
+ >>>>>368 ubyte&0xDF >0
5402
+ >>>>>>368 string x %-.5s
5403
+ >>>>>>>373 ubyte&0xDF >0
5404
+ >>>>>>>>373 string x \b%-.3s
5405
+ >>>>>>376 ubyte&0xDF >0
5406
+ >>>>>>>376 string x \b.%-.3s
5407
+ # variant
5408
+ >>>>417 ubyte&0xDF >0
5409
+ >>>>>417 string x %-.5s
5410
+ >>>>>>422 ubyte&0xDF >0
5411
+ >>>>>>>422 string x \b%-.3s
5412
+ >>>>>425 ubyte&0xDF >0
5413
+ >>>>>>425 string >\ \b.%-.3s
5414
+ #
5415
+ >430 string Datentr\204ger\ entfernen\xFF\r\n
5416
+ >>454 string Medienfehler\xFF\r\n
5417
+ >>>469 string Neustart:\ Taste\ dr\201cken\r \b, Microsoft Windows XP Bootloader (4.german)
5418
+ >>>>379 string \0
5419
+ >>>>>368 ubyte&0xDF >0
5420
+ >>>>>>368 string x %-.5s
5421
+ >>>>>>>373 ubyte&0xDF >0
5422
+ >>>>>>>>373 string x \b%-.3s
5423
+ >>>>>>376 ubyte&0xDF >0
5424
+ >>>>>>>376 string x \b.%-.3s
5425
+ # variant
5426
+ >>>>417 ubyte&0xDF >0
5427
+ >>>>>417 string x %-.5s
5428
+ >>>>>>422 ubyte&0xDF >0
5429
+ >>>>>>>422 string x \b%-.3s
5430
+ >>>>>425 ubyte&0xDF >0
5431
+ >>>>>>425 string >\ \b.%-.3s
5432
+ #
5433
+
5434
+ #>3 string NTFS\ \ \ \
5435
+ >389 string Fehler\ beim\ Lesen\
5436
+ >>407 string des\ Datentr\204gers
5437
+ >>>426 string NTLDR\ fehlt
5438
+ >>>>440 string NTLDR\ ist\ komprimiert
5439
+ >>>>>464 string Neustart\ mit\ Strg+Alt+Entf\r \b, Microsoft Windows XP Bootloader NTFS (german)
5440
+ #>3 string NTFS\ \ \ \
5441
+ >313 string A\ disk\ read\ error\ occurred.\r
5442
+ >>345 string A\ kernel\ file\ is\ missing\
5443
+ >>>370 string from\ the\ disk.\r
5444
+ >>>>484 string NTLDR\ is\ compressed
5445
+ >>>>>429 string Insert\ a\ system\ diskette\
5446
+ >>>>>>454 string and\ restart\r\nthe\ system.\r \b, Microsoft Windows XP Bootloader NTFS
5447
+ # DOS loader variants different languages,offsets
5448
+ >472 ubyte&0xDF >0
5449
+ >>389 string Invalid\ system\ disk\xFF\r\n
5450
+ >>>411 string Disk\ I/O\ error
5451
+ >>>>428 string Replace\ the\ disk,\ and\
5452
+ >>>>>455 string press\ any\ key \b, Microsoft Windows 98 Bootloader
5453
+ #IO.SYS
5454
+ >>>>>>472 ubyte&0xDF >0
5455
+ >>>>>>>472 string x \b %-.2s
5456
+ >>>>>>>>474 ubyte&0xDF >0
5457
+ >>>>>>>>>474 string x \b%-.5s
5458
+ >>>>>>>>>>479 ubyte&0xDF >0
5459
+ >>>>>>>>>>>479 string x \b%-.1s
5460
+ >>>>>>>480 ubyte&0xDF >0
5461
+ >>>>>>>>480 string x \b.%-.3s
5462
+ #MSDOS.SYS
5463
+ >>>>>>>483 ubyte&0xDF >0 \b+
5464
+ >>>>>>>>483 string x \b%-.5s
5465
+ >>>>>>>>>488 ubyte&0xDF >0
5466
+ >>>>>>>>>>488 string x \b%-.3s
5467
+ >>>>>>>>491 ubyte&0xDF >0
5468
+ >>>>>>>>>491 string x \b.%-.3s
5469
+ #
5470
+ >>390 string Invalid\ system\ disk\xFF\r\n
5471
+ >>>412 string Disk\ I/O\ error\xFF\r\n
5472
+ >>>>429 string Replace\ the\ disk,\ and\
5473
+ >>>>>451 string then\ press\ any\ key\r \b, Microsoft Windows 98 Bootloader
5474
+ >>388 string Ungueltiges\ System\ \xFF\r\n
5475
+ >>>410 string E/A-Fehler\ \ \ \ \xFF\r\n
5476
+ >>>>427 string Datentraeger\ wechseln\ und\
5477
+ >>>>>453 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (german)
5478
+ #WINBOOT.SYS only not spaces (0xDF)
5479
+ >>>>>>497 ubyte&0xDF >0
5480
+ >>>>>>>497 string x %-.5s
5481
+ >>>>>>>>502 ubyte&0xDF >0
5482
+ >>>>>>>>>502 string x \b%-.1s
5483
+ >>>>>>>>>>503 ubyte&0xDF >0
5484
+ >>>>>>>>>>>503 string x \b%-.1s
5485
+ >>>>>>>>>>>>504 ubyte&0xDF >0
5486
+ >>>>>>>>>>>>>504 string x \b%-.1s
5487
+ >>>>>>505 ubyte&0xDF >0
5488
+ >>>>>>>505 string x \b.%-.3s
5489
+ #IO.SYS
5490
+ >>>>>>472 ubyte&0xDF >0 or
5491
+ >>>>>>>472 string x \b %-.2s
5492
+ >>>>>>>>474 ubyte&0xDF >0
5493
+ >>>>>>>>>474 string x \b%-.5s
5494
+ >>>>>>>>>>479 ubyte&0xDF >0
5495
+ >>>>>>>>>>>479 string x \b%-.1s
5496
+ >>>>>>>480 ubyte&0xDF >0
5497
+ >>>>>>>>480 string x \b.%-.3s
5498
+ #MSDOS.SYS
5499
+ >>>>>>>483 ubyte&0xDF >0 \b+
5500
+ >>>>>>>>483 string x \b%-.5s
5501
+ >>>>>>>>>488 ubyte&0xDF >0
5502
+ >>>>>>>>>>488 string x \b%-.3s
5503
+ >>>>>>>>491 ubyte&0xDF >0
5504
+ >>>>>>>>>491 string x \b.%-.3s
5505
+ #
5506
+ >>390 string Ungueltiges\ System\ \xFF\r\n
5507
+ >>>412 string E/A-Fehler\ \ \ \ \xFF\r\n
5508
+ >>>>429 string Datentraeger\ wechseln\ und\
5509
+ >>>>>455 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (German)
5510
+ #WINBOOT.SYS only not spaces (0xDF)
5511
+ >>>>>>497 ubyte&0xDF >0
5512
+ >>>>>>>497 string x %-.7s
5513
+ >>>>>>>>504 ubyte&0xDF >0
5514
+ >>>>>>>>>504 string x \b%-.1s
5515
+ >>>>>>505 ubyte&0xDF >0
5516
+ >>>>>>>505 string x \b.%-.3s
5517
+ #IO.SYS
5518
+ >>>>>>472 ubyte&0xDF >0 or
5519
+ >>>>>>>472 string x \b %-.2s
5520
+ >>>>>>>>474 ubyte&0xDF >0
5521
+ >>>>>>>>>474 string x \b%-.6s
5522
+ >>>>>>>480 ubyte&0xDF >0
5523
+ >>>>>>>>480 string x \b.%-.3s
5524
+ #MSDOS.SYS
5525
+ >>>>>>>483 ubyte&0xDF >0 \b+
5526
+ >>>>>>>>483 string x \b%-.5s
5527
+ >>>>>>>>>488 ubyte&0xDF >0
5528
+ >>>>>>>>>>488 string x \b%-.3s
5529
+ >>>>>>>>491 ubyte&0xDF >0
5530
+ >>>>>>>>>491 string x \b.%-.3s
5531
+ #
5532
+ >>389 string Ungueltiges\ System\ \xFF\r\n
5533
+ >>>411 string E/A-Fehler\ \ \ \ \xFF\r\n
5534
+ >>>>428 string Datentraeger\ wechseln\ und\
5535
+ >>>>>454 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (GERMAN)
5536
+ # DOS names like IO.SYS,WINBOOT.SYS,MSDOS.SYS,WINBOOT.INI are 8 right space padded bytes+3 bytes
5537
+ >>>>>>472 string x %-.2s
5538
+ >>>>>>>474 ubyte&0xDF >0
5539
+ >>>>>>>>474 string x \b%-.5s
5540
+ >>>>>>>>479 ubyte&0xDF >0
5541
+ >>>>>>>>>479 string x \b%-.1s
5542
+ >>>>>>480 ubyte&0xDF >0
5543
+ >>>>>>>480 string x \b.%-.3s
5544
+ >>>>>>483 ubyte&0xDF >0 \b+
5545
+ >>>>>>>483 string x \b%-.5s
5546
+ >>>>>>>488 ubyte&0xDF >0
5547
+ >>>>>>>>488 string x \b%-.2s
5548
+ >>>>>>>>490 ubyte&0xDF >0
5549
+ >>>>>>>>>490 string x \b%-.1s
5550
+ >>>>>>>491 ubyte&0xDF >0
5551
+ >>>>>>>>491 string x \b.%-.3s
5552
+ >479 ubyte&0xDF >0
5553
+ >>416 string Kein\ System\ oder\
5554
+ >>>433 string Laufwerksfehler
5555
+ >>>>450 string Wechseln\ und\ Taste\ dr\201cken \b, Microsoft DOS Bootloader (german)
5556
+ #IO.SYS
5557
+ >>>>>479 string x \b %-.2s
5558
+ >>>>>>481 ubyte&0xDF >0
5559
+ >>>>>>>481 string x \b%-.6s
5560
+ >>>>>487 ubyte&0xDF >0
5561
+ >>>>>>487 string x \b.%-.3s
5562
+ #MSDOS.SYS
5563
+ >>>>>>490 ubyte&0xDF >0 \b+
5564
+ >>>>>>>490 string x \b%-.5s
5565
+ >>>>>>>>495 ubyte&0xDF >0
5566
+ >>>>>>>>>495 string x \b%-.3s
5567
+ >>>>>>>498 ubyte&0xDF >0
5568
+ >>>>>>>>498 string x \b.%-.3s
5569
+ #
5570
+ >376 search/41 Non-System\ disk\ or\
5571
+ >>395 search/41 disk\ error\r
5572
+ >>>407 search/41 Replace\ and\
5573
+ >>>>419 search/41 press\ \b,
5574
+ >>>>419 search/41 strike\ \b, old
5575
+ >>>>426 search/41 any\ key\ when\ ready\r MS or PC-DOS bootloader
5576
+ #449 Disk\ Boot\ failure\r MS 3.21
5577
+ #466 Boot\ Failure\r MS 3.30
5578
+ >>>>>468 search/18 \0
5579
+ #IO.SYS,IBMBIO.COM
5580
+ >>>>>>&0 string x \b %-.2s
5581
+ >>>>>>>&-20 ubyte&0xDF >0
5582
+ >>>>>>>>&-1 string x \b%-.4s
5583
+ >>>>>>>>>&-16 ubyte&0xDF >0
5584
+ >>>>>>>>>>&-1 string x \b%-.2s
5585
+ >>>>>>&8 ubyte&0xDF >0 \b.
5586
+ >>>>>>>&-1 string x \b%-.3s
5587
+ #MSDOS.SYS,IBMDOS.COM
5588
+ >>>>>>&11 ubyte&0xDF >0 \b+
5589
+ >>>>>>>&-1 string x \b%-.5s
5590
+ >>>>>>>>&-6 ubyte&0xDF >0
5591
+ >>>>>>>>>&-1 string x \b%-.1s
5592
+ >>>>>>>>>>&-5 ubyte&0xDF >0
5593
+ >>>>>>>>>>>&-1 string x \b%-.2s
5594
+ >>>>>>>&7 ubyte&0xDF >0 \b.
5595
+ >>>>>>>>&-1 string x \b%-.3s
5596
+ >441 string Cannot\ load\ from\ harddisk.\n\r
5597
+ >>469 string Insert\ Systemdisk\
5598
+ >>>487 string and\ press\ any\ key.\n\r \b, MS (2.11) DOS bootloader
5599
+ #>43 string \224R-LOADER\ \ SYS =label
5600
+ >54 string SYS
5601
+ >>324 string VASKK
5602
+ >>>495 string NEWLDR\0 \b, DR-DOS Bootloader (LOADER.SYS)
5603
+ #
5604
+ >98 string Press\ a\ key\ to\ retry\0\r
5605
+ >>120 string Cannot\ find\ file\ \0\r
5606
+ >>>139 string Disk\ read\ error\0\r
5607
+ >>>>156 string Loading\ ...\0 \b, DR-DOS (3.41) Bootloader
5608
+ #DRBIOS.SYS
5609
+ >>>>>44 ubyte&0xDF >0
5610
+ >>>>>>44 string x \b %-.6s
5611
+ >>>>>>>50 ubyte&0xDF >0
5612
+ >>>>>>>>50 string x \b%-.2s
5613
+ >>>>>>52 ubyte&0xDF >0
5614
+ >>>>>>>52 string x \b.%-.3s
5615
+ #
5616
+ >70 string IBMBIO\ \ COM
5617
+ >>472 string Cannot\ load\ DOS!\
5618
+ >>>489 string Any\ key\ to\ retry \b, DR-DOS Bootloader
5619
+ >>471 string Cannot\ load\ DOS\
5620
+ >>487 string press\ key\ to\ retry \b, Open-DOS Bootloader
5621
+ #??
5622
+ >444 string KERNEL\ \ SYS
5623
+ >>314 string BOOT\ error! \b, FREE-DOS Bootloader
5624
+ >499 string KERNEL\ \ SYS
5625
+ >>305 string BOOT\ err!\0 \b, Free-DOS Bootloader
5626
+ >449 string KERNEL\ \ SYS
5627
+ >>319 string BOOT\ error! \b, FREE-DOS 0.5 Bootloader
5628
+ #
5629
+ >449 string Loading\ FreeDOS
5630
+ >>0x1AF ulelong >0 \b, FREE-DOS 0.95,1.0 Bootloader
5631
+ >>>497 ubyte&0xDF >0
5632
+ >>>>497 string x \b %-.6s
5633
+ >>>>>503 ubyte&0xDF >0
5634
+ >>>>>>503 string x \b%-.1s
5635
+ >>>>>>>504 ubyte&0xDF >0
5636
+ >>>>>>>>504 string x \b%-.1s
5637
+ >>>>505 ubyte&0xDF >0
5638
+ >>>>>505 string x \b.%-.3s
5639
+ #
5640
+ >331 string Error!.0 \b, FREE-DOS 1.0 bootloader
5641
+ #
5642
+ >125 string Loading\ FreeDOS...\r
5643
+ >>311 string BOOT\ error!\r \b, FREE-DOS bootloader
5644
+ >>>441 ubyte&0xDF >0
5645
+ >>>>441 string x \b %-.6s
5646
+ >>>>>447 ubyte&0xDF >0
5647
+ >>>>>>447 string x \b%-.1s
5648
+ >>>>>>>448 ubyte&0xDF >0
5649
+ >>>>>>>>448 string x \b%-.1s
5650
+ >>>>449 ubyte&0xDF >0
5651
+ >>>>>449 string x \b.%-.3s
5652
+ >124 string FreeDOS\0
5653
+ >>331 string \ err\0 \b, FREE-DOS BETa 0.9 Bootloader
5654
+ # DOS names like KERNEL.SYS,KERNEL16.SYS,KERNEL32.SYS,METAKERN.SYS are 8 right space padded bytes+3 bytes
5655
+ >>>497 ubyte&0xDF >0
5656
+ >>>>497 string x \b %-.6s
5657
+ >>>>>503 ubyte&0xDF >0
5658
+ >>>>>>503 string x \b%-.1s
5659
+ >>>>>>>504 ubyte&0xDF >0
5660
+ >>>>>>>>504 string x \b%-.1s
5661
+ >>>>505 ubyte&0xDF >0
5662
+ >>>>>505 string x \b.%-.3s
5663
+ >>333 string \ err\0 \b, FREE-DOS BEta 0.9 Bootloader
5664
+ >>>497 ubyte&0xDF >0
5665
+ >>>>497 string x \b %-.6s
5666
+ >>>>>503 ubyte&0xDF >0
5667
+ >>>>>>503 string x \b%-.1s
5668
+ >>>>>>>504 ubyte&0xDF >0
5669
+ >>>>>>>>504 string x \b%-.1s
5670
+ >>>>505 ubyte&0xDF >0
5671
+ >>>>>505 string x \b.%-.3s
5672
+ >>334 string \ err\0 \b, FREE-DOS Beta 0.9 Bootloader
5673
+ >>>497 ubyte&0xDF >0
5674
+ >>>>497 string x \b %-.6s
5675
+ >>>>>503 ubyte&0xDF >0
5676
+ >>>>>>503 string x \b%-.1s
5677
+ >>>>>>>504 ubyte&0xDF >0
5678
+ >>>>>>>>504 string x \b%-.1s
5679
+ >>>>505 ubyte&0xDF >0
5680
+ >>>>>505 string x \b.%-.3s
5681
+ >336 string Error!\
5682
+ >>343 string Hit\ a\ key\ to\ reboot. \b, FREE-DOS Beta 0.9sr1 Bootloader
5683
+ >>>497 ubyte&0xDF >0
5684
+ >>>>497 string x \b %-.6s
5685
+ >>>>>503 ubyte&0xDF >0
5686
+ >>>>>>503 string x \b%-.1s
5687
+ >>>>>>>504 ubyte&0xDF >0
5688
+ >>>>>>>>504 string x \b%-.1s
5689
+ >>>>505 ubyte&0xDF >0
5690
+ >>>>>505 string x \b.%-.3s
5691
+ # added by Joerg Jenderek
5692
+ # http://www.visopsys.org/
5693
+ # http://partitionlogic.org.uk/
5694
+ # OEM-ID=Visopsys
5695
+ >478 ulelong 0
5696
+ >>(1.b+326) string I/O\ Error\ reading\
5697
+ >>>(1.b+344) string Visopsys\ loader\r
5698
+ >>>>(1.b+361) string Press\ any\ key\ to\ continue.\r \b, Visopsys loader
5699
+ # http://alexfru.chat.ru/epm.html#bootprog
5700
+ >494 ubyte >0x4D
5701
+ >>495 string >E
5702
+ >>>495 string <S
5703
+ #OEM-ID is not reliable
5704
+ >>>>3 string BootProg
5705
+ # It just looks for a program file name at the root directory
5706
+ # and loads corresponding file with following execution.
5707
+ # DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes
5708
+ >>>>499 ubyte&0xDF >0 \b, COM/EXE Bootloader
5709
+ >>>>>499 string x \b %-.1s
5710
+ >>>>>>500 ubyte&0xDF >0
5711
+ >>>>>>>500 string x \b%-.1s
5712
+ >>>>>>>>501 ubyte&0xDF >0
5713
+ >>>>>>>>>501 string x \b%-.1s
5714
+ >>>>>>>>>>502 ubyte&0xDF >0
5715
+ >>>>>>>>>>>502 string x \b%-.1s
5716
+ >>>>>>>>>>>>503 ubyte&0xDF >0
5717
+ >>>>>>>>>>>>>503 string x \b%-.1s
5718
+ >>>>>>>>>>>>>>504 ubyte&0xDF >0
5719
+ >>>>>>>>>>>>>>>504 string x \b%-.1s
5720
+ >>>>>>>>>>>>>>>>505 ubyte&0xDF >0
5721
+ >>>>>>>>>>>>>>>>>505 string x \b%-.1s
5722
+ >>>>>>>>>>>>>>>>>>506 ubyte&0xDF >0
5723
+ >>>>>>>>>>>>>>>>>>>506 string x \b%-.1s
5724
+ #name extension
5725
+ >>>>>507 ubyte&0xDF >0 \b.
5726
+ >>>>>>507 string x \b%-.1s
5727
+ >>>>>>>508 ubyte&0xDF >0
5728
+ >>>>>>>>508 string x \b%-.1s
5729
+ >>>>>>>>>509 ubyte&0xDF >0
5730
+ >>>>>>>>>>509 string x \b%-.1s
5731
+ #If the boot sector fails to read any other sector,
5732
+ #it prints a very short message ("RE") to the screen and hangs the computer.
5733
+ #If the boot sector fails to find needed program in the root directory,
5734
+ #it also hangs with another message ("NF").
5735
+ >>>>>492 string RENF \b, FAT (12 bit)
5736
+ >>>>>495 string RENF \b, FAT (16 bit)
5737
+ # http://alexfru.chat.ru/epm.html#bootprog
5738
+ >494 ubyte >0x4D
5739
+ >>495 string >E
5740
+ >>>495 string <S
5741
+ #OEM-ID is not reliable
5742
+ >>>>3 string BootProg
5743
+ # It just looks for a program file name at the root directory
5744
+ # and loads corresponding file with following execution.
5745
+ # DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes
5746
+ >>>>499 ubyte&0xDF >0 \b, COM/EXE Bootloader
5747
+ >>>>>499 string x \b %-.1s
5748
+ >>>>>>500 ubyte&0xDF >0
5749
+ >>>>>>>500 string x \b%-.1s
5750
+ >>>>>>>>501 ubyte&0xDF >0
5751
+ >>>>>>>>>501 string x \b%-.1s
5752
+ >>>>>>>>>>502 ubyte&0xDF >0
5753
+ >>>>>>>>>>>502 string x \b%-.1s
5754
+ >>>>>>>>>>>>503 ubyte&0xDF >0
5755
+ >>>>>>>>>>>>>503 string x \b%-.1s
5756
+ >>>>>>>>>>>>>>504 ubyte&0xDF >0
5757
+ >>>>>>>>>>>>>>>504 string x \b%-.1s
5758
+ >>>>>>>>>>>>>>>>505 ubyte&0xDF >0
5759
+ >>>>>>>>>>>>>>>>>505 string x \b%-.1s
5760
+ >>>>>>>>>>>>>>>>>>506 ubyte&0xDF >0
5761
+ >>>>>>>>>>>>>>>>>>>506 string x \b%-.1s
5762
+ #name extension
5763
+ >>>>>507 ubyte&0xDF >0 \b.
5764
+ >>>>>>507 string x \b%-.1s
5765
+ >>>>>>>508 ubyte&0xDF >0
5766
+ >>>>>>>>508 string x \b%-.1s
5767
+ >>>>>>>>>509 ubyte&0xDF >0
5768
+ >>>>>>>>>>509 string x \b%-.1s
5769
+ #If the boot sector fails to read any other sector,
5770
+ #it prints a very short message ("RE") to the screen and hangs the computer.
5771
+ #If the boot sector fails to find needed program in the root directory,
5772
+ #it also hangs with another message ("NF").
5773
+ >>>>>492 string RENF \b, FAT (12 bit)
5774
+ >>>>>495 string RENF \b, FAT (16 bit)
5775
+ # x86 bootloader end
5776
+ # updated by Joerg Jenderek at Sep 2007
5777
+ >3 ubyte 0
5778
+ #no active flag
5779
+ >>446 ubyte 0
5780
+ # partition 1 not empty
5781
+ >>>450 ubyte >0
5782
+ # partitions 3,4 empty
5783
+ >>>>482 ubyte 0
5784
+ >>>>>498 ubyte 0
5785
+ # partition 2 ID=0,5,15
5786
+ >>>>>>466 ubyte <0x10
5787
+ >>>>>>>466 ubyte 0x05 \b, extended partition table
5788
+ >>>>>>>466 ubyte 0x0F \b, extended partition table (LBA)
5789
+ >>>>>>>466 ubyte 0x0 \b, extended partition table (last)
5790
+ # JuMP short bootcodeoffset NOP assembler instructions will usually be EB xx 90
5791
+ # http://mirror.href.com/thestarman/asm/2bytejumps.htmm#FWD
5792
+ # older drives may use Near JuMP instruction E9 xx xx
5793
+ >0 lelong&0x009000EB 0x009000EB
5794
+ >0 lelong&0x000000E9 0x000000E9
5795
+ # minimal short forward jump found 03cx??
5796
+ # maximal short forward jump is 07fx
5797
+ >1 ubyte <0xff \b, code offset 0x%x
5798
+ # mtools-3.9.8/msdos.h
5799
+ # usual values are marked with comments to get only informations of strange FAT systems
5800
+ # valid sectorsize must be a power of 2 from 32 to 32768
5801
+ >>11 uleshort&0x000f x
5802
+ >>>11 uleshort <32769
5803
+ >>>>11 uleshort >31
5804
+ >>>>>21 ubyte&0xf0 0xF0
5805
+ >>>>>>3 string >\0 \b, OEM-ID "%8.8s"
5806
+ #http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC
5807
+ >>>>>>>8 string IHC \b cached by Windows 9M
5808
+ >>>>>>11 uleshort >512 \b, Bytes/sector %u
5809
+ #>>>>>>11 uleshort =512 \b, Bytes/sector %u=512 (usual)
5810
+ >>>>>>11 uleshort <512 \b, Bytes/sector %u
5811
+ >>>>>>13 ubyte >1 \b, sectors/cluster %u
5812
+ #>>>>>>13 ubyte =1 \b, sectors/cluster %u (usual on Floppies)
5813
+ >>>>>>14 uleshort >32 \b, reserved sectors %u
5814
+ #>>>>>>14 uleshort =32 \b, reserved sectors %u (usual Fat32)
5815
+ #>>>>>>14 uleshort >1 \b, reserved sectors %u
5816
+ #>>>>>>14 uleshort =1 \b, reserved sectors %u (usual FAT12,FAT16)
5817
+ >>>>>>14 uleshort <1 \b, reserved sectors %u
5818
+ >>>>>>16 ubyte >2 \b, FATs %u
5819
+ #>>>>>>16 ubyte =2 \b, FATs %u (usual)
5820
+ >>>>>>16 ubyte =1 \b, FAT %u
5821
+ >>>>>>16 ubyte >0
5822
+ >>>>>>17 uleshort >0 \b, root entries %u
5823
+ #>>>>>>17 uleshort =0 \b, root entries %u=0 (usual Fat32)
5824
+ >>>>>>19 uleshort >0 \b, sectors %u (volumes <=32 MB)
5825
+ #>>>>>>19 uleshort =0 \b, sectors %u=0 (usual Fat32)
5826
+ >>>>>>21 ubyte >0xF0 \b, Media descriptor 0x%x
5827
+ #>>>>>>21 ubyte =0xF0 \b, Media descriptor 0x%x (usual floppy)
5828
+ >>>>>>21 ubyte <0xF0 \b, Media descriptor 0x%x
5829
+ >>>>>>22 uleshort >0 \b, sectors/FAT %u
5830
+ #>>>>>>22 uleshort =0 \b, sectors/FAT %u=0 (usual Fat32)
5831
+ >>>>>>26 ubyte >2 \b, heads %u
5832
+ #>>>>>>26 ubyte =2 \b, heads %u (usual floppy)
5833
+ >>>>>>26 ubyte =1 \b, heads %u
5834
+ #skip for Digital Research DOS (version 3.41) 1440 kB Bootdisk
5835
+ >>>>>>38 ubyte !0x70
5836
+ >>>>>>>28 ulelong >0 \b, hidden sectors %u
5837
+ #>>>>>>>28 ulelong =0 \b, hidden sectors %u (usual floppy)
5838
+ >>>>>>>32 ulelong >0 \b, sectors %u (volumes > 32 MB)
5839
+ #>>>>>>>32 ulelong =0 \b, sectors %u (volumes > 32 MB)
5840
+ # FAT<32 specific
5841
+ >>>>>>82 string !FAT32
5842
+ #>>>>>>>36 ubyte 0x80 \b, physical drive 0x%x=0x80 (usual harddisk)
5843
+ #>>>>>>>36 ubyte 0 \b, physical drive 0x%x=0 (usual floppy)
5844
+ >>>>>>>36 ubyte !0x80
5845
+ >>>>>>>>36 ubyte !0 \b, physical drive 0x%x
5846
+ >>>>>>>37 ubyte >0 \b, reserved 0x%x
5847
+ #>>>>>>>37 ubyte =0 \b, reserved 0x%x
5848
+ >>>>>>>38 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x)
5849
+ >>>>>>>38 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x)
5850
+ >>>>>>>38 ubyte =0x29
5851
+ >>>>>>>>39 ulelong x \b, serial number 0x%x
5852
+ >>>>>>>>43 string <NO\ NAME \b, label: "%11.11s"
5853
+ >>>>>>>>43 string >NO\ NAME \b, label: "%11.11s"
5854
+ >>>>>>>>43 string =NO\ NAME \b, unlabeled
5855
+ >>>>>>>54 string FAT \b, FAT
5856
+ >>>>>>>>54 string FAT12 \b (12 bit)
5857
+ >>>>>>>>54 string FAT16 \b (16 bit)
5858
+ # FAT32 specific
5859
+ >>>>>>82 string FAT32 \b, FAT (32 bit)
5860
+ >>>>>>>36 ulelong x \b, sectors/FAT %u
5861
+ >>>>>>>40 uleshort >0 \b, extension flags %u
5862
+ #>>>>>>>40 uleshort =0 \b, extension flags %u
5863
+ >>>>>>>42 uleshort >0 \b, fsVersion %u
5864
+ #>>>>>>>42 uleshort =0 \b, fsVersion %u (usual)
5865
+ >>>>>>>44 ulelong >2 \b, rootdir cluster %u
5866
+ #>>>>>>>44 ulelong =2 \b, rootdir cluster %u
5867
+ #>>>>>>>44 ulelong =1 \b, rootdir cluster %u
5868
+ >>>>>>>48 uleshort >1 \b, infoSector %u
5869
+ #>>>>>>>48 uleshort =1 \b, infoSector %u (usual)
5870
+ >>>>>>>48 uleshort <1 \b, infoSector %u
5871
+ >>>>>>>50 uleshort >6 \b, Backup boot sector %u
5872
+ #>>>>>>>50 uleshort =6 \b, Backup boot sector %u (usual)
5873
+ >>>>>>>50 uleshort <6 \b, Backup boot sector %u
5874
+ >>>>>>>54 ulelong >0 \b, reserved1 0x%x
5875
+ >>>>>>>58 ulelong >0 \b, reserved2 0x%x
5876
+ >>>>>>>62 ulelong >0 \b, reserved3 0x%x
5877
+ # same structure as FAT1X
5878
+ >>>>>>>64 ubyte >0x80 \b, physical drive 0x%x
5879
+ #>>>>>>>64 ubyte =0x80 \b, physical drive 0x%x=80 (usual harddisk)
5880
+ >>>>>>>64 ubyte&0x7F >0 \b, physical drive 0x%x
5881
+ #>>>>>>>64 ubyte =0 \b, physical drive 0x%x=0 (usual floppy)
5882
+ >>>>>>>65 ubyte >0 \b, reserved 0x%x
5883
+ >>>>>>>66 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x)
5884
+ >>>>>>>66 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x)
5885
+ >>>>>>>66 ubyte =0x29
5886
+ >>>>>>>>67 ulelong x \b, serial number 0x%x
5887
+ >>>>>>>>71 string <NO\ NAME \b, label: "%11.11s"
5888
+ >>>>>>>71 string >NO\ NAME \b, label: "%11.11s"
5889
+ >>>>>>>71 string =NO\ NAME \b, unlabeled
5890
+ ### FATs end
5891
+ >0x200 lelong 0x82564557 \b, BSD disklabel
5892
+ # FATX
5893
+ 0 string FATX FATX filesystem data
5894
+
5895
+
5896
+ # Minix filesystems - Juan Cespedes <cespedes@debian.org>
5897
+ 0x410 leshort 0x137f Minix filesystem
5898
+ 0x410 beshort 0x137f Minix filesystem (big endian)
5899
+ >0x402 beshort !0 \b, %d zones
5900
+ >0x1e string minix \b, bootable
5901
+ 0x410 leshort 0x138f Minix filesystem, 30 char names
5902
+ 0x410 leshort 0x2468 Minix filesystem, version 2
5903
+ 0x410 leshort 0x2478 Minix filesystem, version 2, 30 char names
5904
+
5905
+ # romfs filesystems - Juan Cespedes <cespedes@debian.org>
5906
+ 0 string -rom1fs- romfs filesystem, version 1
5907
+ >8 belong x %d bytes,
5908
+ >16 string x named %s.
5909
+
5910
+ # netboot image - Juan Cespedes <cespedes@debian.org>
5911
+ 0 lelong 0x1b031336L Netboot image,
5912
+ >4 lelong&0xFFFFFF00 0
5913
+ >>4 lelong&0x100 0x000 mode 2
5914
+ >>4 lelong&0x100 0x100 mode 3
5915
+ >4 lelong&0xFFFFFF00 !0 unknown mode
5916
+
5917
+ 0x18b string OS/2 OS/2 Boot Manager
5918
+
5919
+ # updated by Joerg Jenderek at Oct 2008!!
5920
+ # http://syslinux.zytor.com/iso.php
5921
+ 0 ulelong 0x7c40eafa isolinux Loader
5922
+ # http://syslinux.zytor.com/pxe.php
5923
+ 0 ulelong 0x007c05ea pxelinux Loader
5924
+ 0 ulelong 0x60669c66 pxelinux Loader
5925
+
5926
+ # added by Joerg Jenderek
5927
+ # In the second sector (+0x200) are variables according to grub-0.97/stage2/asm.S or
5928
+ # grub-1.94/kern/i386/pc/startup.S
5929
+ # http://www.gnu.org/software/grub/manual/grub.html#Embedded-data
5930
+ # usual values are marked with comments to get only informations of strange GRUB loaders
5931
+ 0x200 uleshort 0x70EA
5932
+ # found only version 3.{1,2}
5933
+ >0x206 ubeshort >0x0300
5934
+ # GRUB version (0.5.)95,0.93,0.94,0.96,0.97 > "00"
5935
+ >>0x212 ubyte >0x29
5936
+ >>>0x213 ubyte >0x29
5937
+ # not iso9660_stage1_5
5938
+ #>>>0 ulelong&0x00BE5652 0x00BE5652
5939
+ >>>>0x213 ubyte >0x29 GRand Unified Bootloader
5940
+ # config_file for stage1_5 is 0xffffffff + default "/boot/grub/stage2"
5941
+ >>>>0x217 ubyte 0xFF stage1_5
5942
+ >>>>0x217 ubyte <0xFF stage2
5943
+ >>>>0x206 ubyte x \b version %u
5944
+ >>>>0x207 ubyte x \b.%u
5945
+ # module_size for 1.94
5946
+ >>>>0x208 ulelong <0xffffff \b, installed partition %u
5947
+ #>>>>0x208 ulelong =0xffffff \b, %u (default)
5948
+ >>>>0x208 ulelong >0xffffff \b, installed partition %u
5949
+ # GRUB 0.5.95 unofficial
5950
+ >>>>0x20C ulelong&0x2E300000 0x2E300000
5951
+ # 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs
5952
+ >>>>>0x20C ubyte x \b, identifier 0x%x
5953
+ #>>>>>0x20D ubyte =0 \b, LBA flag 0x%x (default)
5954
+ >>>>>0x20D ubyte >0 \b, LBA flag 0x%x
5955
+ # GRUB version as string
5956
+ >>>>>0x20E string >\0 \b, GRUB version %-s
5957
+ # for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
5958
+ >>>>>>0x215 ulong 0xffffffff
5959
+ >>>>>>>0x219 string >\0 \b, configuration file %-s
5960
+ >>>>>>0x215 ulong !0xffffffff
5961
+ >>>>>>>0x215 string >\0 \b, configuration file %-s
5962
+ # newer GRUB versions
5963
+ >>>>0x20C ulelong&0x2E300000 !0x2E300000
5964
+ ##>>>>>0x20C ulelong =0 \b, saved entry %d (usual)
5965
+ >>>>>0x20C ulelong >0 \b, saved entry %d
5966
+ # for 1.94 contains kernel image size
5967
+ # for 0.93,0.94,0.96,0.97
5968
+ # 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs 6=vstafs 7=jfs 8=xfs 9=iso9660 a=ufs2
5969
+ >>>>>0x210 ubyte x \b, identifier 0x%x
5970
+ # The flag for LBA forcing is in most cases 0
5971
+ #>>>>>0x211 ubyte =0 \b, LBA flag 0x%x (default)
5972
+ >>>>>0x211 ubyte >0 \b, LBA flag 0x%x
5973
+ # GRUB version as string
5974
+ >>>>>0x212 string >\0 \b, GRUB version %-s
5975
+ # for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
5976
+ >>>>>0x217 ulong 0xffffffff
5977
+ >>>>>>0x21b string >\0 \b, configuration file %-s
5978
+ >>>>>0x217 ulong !0xffffffff
5979
+ >>>>>>0x217 string >\0 \b, configuration file %-s
5980
+
5981
+ 9564 lelong 0x00011954 Unix Fast File system [v1] (little-endian),
5982
+ >8404 string x last mounted on %s,
5983
+ #>9504 ledate x last checked at %s,
5984
+ >8224 ledate x last written at %s,
5985
+ >8401 byte x clean flag %d,
5986
+ >8228 lelong x number of blocks %d,
5987
+ >8232 lelong x number of data blocks %d,
5988
+ >8236 lelong x number of cylinder groups %d,
5989
+ >8240 lelong x block size %d,
5990
+ >8244 lelong x fragment size %d,
5991
+ >8252 lelong x minimum percentage of free blocks %d,
5992
+ >8256 lelong x rotational delay %dms,
5993
+ >8260 lelong x disk rotational speed %drps,
5994
+ >8320 lelong 0 TIME optimization
5995
+ >8320 lelong 1 SPACE optimization
5996
+
5997
+ 42332 lelong 0x19540119 Unix Fast File system [v2] (little-endian)
5998
+ >&-1164 string x last mounted on %s,
5999
+ >&-696 string >\0 volume name %s,
6000
+ >&-304 leqldate x last written at %s,
6001
+ >&-1167 byte x clean flag %d,
6002
+ >&-1168 byte x readonly flag %d,
6003
+ >&-296 lequad x number of blocks %lld,
6004
+ >&-288 lequad x number of data blocks %lld,
6005
+ >&-1332 lelong x number of cylinder groups %d,
6006
+ >&-1328 lelong x block size %d,
6007
+ >&-1324 lelong x fragment size %d,
6008
+ >&-180 lelong x average file size %d,
6009
+ >&-176 lelong x average number of files in dir %d,
6010
+ >&-272 lequad x pending blocks to free %lld,
6011
+ >&-264 lelong x pending inodes to free %ld,
6012
+ >&-664 lequad x system-wide uuid %0llx,
6013
+ >&-1316 lelong x minimum percentage of free blocks %d,
6014
+ >&-1248 lelong 0 TIME optimization
6015
+ >&-1248 lelong 1 SPACE optimization
6016
+
6017
+ 66908 lelong 0x19540119 Unix Fast File system [v2] (little-endian)
6018
+ >&-1164 string x last mounted on %s,
6019
+ >&-696 string >\0 volume name %s,
6020
+ >&-304 leqldate x last written at %s,
6021
+ >&-1167 byte x clean flag %d,
6022
+ >&-1168 byte x readonly flag %d,
6023
+ >&-296 lequad x number of blocks %lld,
6024
+ >&-288 lequad x number of data blocks %lld,
6025
+ >&-1332 lelong x number of cylinder groups %d,
6026
+ >&-1328 lelong x block size %d,
6027
+ >&-1324 lelong x fragment size %d,
6028
+ >&-180 lelong x average file size %d,
6029
+ >&-176 lelong x average number of files in dir %d,
6030
+ >&-272 lequad x pending blocks to free %lld,
6031
+ >&-264 lelong x pending inodes to free %ld,
6032
+ >&-664 lequad x system-wide uuid %0llx,
6033
+ >&-1316 lelong x minimum percentage of free blocks %d,
6034
+ >&-1248 lelong 0 TIME optimization
6035
+ >&-1248 lelong 1 SPACE optimization
6036
+
6037
+ 9564 belong 0x00011954 Unix Fast File system [v1] (big-endian),
6038
+ >7168 belong 0x4c41424c Apple UFS Volume
6039
+ >>7186 string x named %s,
6040
+ >>7176 belong x volume label version %d,
6041
+ >>7180 bedate x created on %s,
6042
+ >8404 string x last mounted on %s,
6043
+ #>9504 bedate x last checked at %s,
6044
+ >8224 bedate x last written at %s,
6045
+ >8401 byte x clean flag %d,
6046
+ >8228 belong x number of blocks %d,
6047
+ >8232 belong x number of data blocks %d,
6048
+ >8236 belong x number of cylinder groups %d,
6049
+ >8240 belong x block size %d,
6050
+ >8244 belong x fragment size %d,
6051
+ >8252 belong x minimum percentage of free blocks %d,
6052
+ >8256 belong x rotational delay %dms,
6053
+ >8260 belong x disk rotational speed %drps,
6054
+ >8320 belong 0 TIME optimization
6055
+ >8320 belong 1 SPACE optimization
6056
+
6057
+ 42332 belong 0x19540119 Unix Fast File system [v2] (big-endian)
6058
+ >&-1164 string x last mounted on %s,
6059
+ >&-696 string >\0 volume name %s,
6060
+ >&-304 beqldate x last written at %s,
6061
+ >&-1167 byte x clean flag %d,
6062
+ >&-1168 byte x readonly flag %d,
6063
+ >&-296 bequad x number of blocks %lld,
6064
+ >&-288 bequad x number of data blocks %lld,
6065
+ >&-1332 belong x number of cylinder groups %d,
6066
+ >&-1328 belong x block size %d,
6067
+ >&-1324 belong x fragment size %d,
6068
+ >&-180 belong x average file size %d,
6069
+ >&-176 belong x average number of files in dir %d,
6070
+ >&-272 bequad x pending blocks to free %lld,
6071
+ >&-264 belong x pending inodes to free %ld,
6072
+ >&-664 bequad x system-wide uuid %0llx,
6073
+ >&-1316 belong x minimum percentage of free blocks %d,
6074
+ >&-1248 belong 0 TIME optimization
6075
+ >&-1248 belong 1 SPACE optimization
6076
+
6077
+ 66908 belong 0x19540119 Unix Fast File system [v2] (big-endian)
6078
+ >&-1164 string x last mounted on %s,
6079
+ >&-696 string >\0 volume name %s,
6080
+ >&-304 beqldate x last written at %s,
6081
+ >&-1167 byte x clean flag %d,
6082
+ >&-1168 byte x readonly flag %d,
6083
+ >&-296 bequad x number of blocks %lld,
6084
+ >&-288 bequad x number of data blocks %lld,
6085
+ >&-1332 belong x number of cylinder groups %d,
6086
+ >&-1328 belong x block size %d,
6087
+ >&-1324 belong x fragment size %d,
6088
+ >&-180 belong x average file size %d,
6089
+ >&-176 belong x average number of files in dir %d,
6090
+ >&-272 bequad x pending blocks to free %lld,
6091
+ >&-264 belong x pending inodes to free %ld,
6092
+ >&-664 bequad x system-wide uuid %0llx,
6093
+ >&-1316 belong x minimum percentage of free blocks %d,
6094
+ >&-1248 belong 0 TIME optimization
6095
+ >&-1248 belong 1 SPACE optimization
6096
+
6097
+ # ext2/ext3 filesystems - Andreas Dilger <adilger@dilger.ca>
6098
+ # ext4 filesystem - Eric Sandeen <sandeen@sandeen.net>
6099
+ # volume label and UUID Russell Coker
6100
+ # http://etbe.coker.com.au/2008/07/08/label-vs-uuid-vs-device/
6101
+ 0x438 leshort 0xEF53 Linux
6102
+ >0x44c lelong x rev %d
6103
+ >0x43e leshort x \b.%d
6104
+ # No journal? ext2
6105
+ >0x45c lelong ^0x0000004 ext2 filesystem data
6106
+ >>0x43a leshort ^0x0000001 (mounted or unclean)
6107
+ # Has a journal? ext3 or ext4
6108
+ >0x45c lelong &0x0000004
6109
+ # and small INCOMPAT?
6110
+ >>0x460 lelong <0x0000040
6111
+ # and small RO_COMPAT?
6112
+ >>>0x464 lelong <0x0000008 ext3 filesystem data
6113
+ # else large RO_COMPAT?
6114
+ >>>0x464 lelong >0x0000007 ext4 filesystem data
6115
+ # else large INCOMPAT?
6116
+ >>0x460 lelong >0x000003f ext4 filesystem data
6117
+ >0x468 belong x \b, UUID=%08x
6118
+ >0x46c beshort x \b-%04x
6119
+ >0x46e beshort x \b-%04x
6120
+ >0x470 beshort x \b-%04x
6121
+ >0x472 belong x \b-%08x
6122
+ >0x476 beshort x \b%04x
6123
+ >0x478 string >0 \b, volume name "%s"
6124
+ # General flags for any ext* fs
6125
+ >0x460 lelong &0x0000004 (needs journal recovery)
6126
+ >0x43a leshort &0x0000002 (errors)
6127
+ # INCOMPAT flags
6128
+ >0x460 lelong &0x0000001 (compressed)
6129
+ #>0x460 lelong &0x0000002 (filetype)
6130
+ #>0x460 lelong &0x0000010 (meta bg)
6131
+ >0x460 lelong &0x0000040 (extents)
6132
+ >0x460 lelong &0x0000080 (64bit)
6133
+ #>0x460 lelong &0x0000100 (mmp)
6134
+ #>0x460 lelong &0x0000200 (flex bg)
6135
+ # RO_INCOMPAT flags
6136
+ #>0x464 lelong &0x0000001 (sparse super)
6137
+ >0x464 lelong &0x0000002 (large files)
6138
+ >0x464 lelong &0x0000008 (huge files)
6139
+ #>0x464 lelong &0x0000010 (gdt checksum)
6140
+ #>0x464 lelong &0x0000020 (many subdirs)
6141
+ #>0x463 lelong &0x0000040 (extra isize)
6142
+
6143
+ # SGI disk labels - Nathan Scott <nathans@debian.org>
6144
+ 0 belong 0x0BE5A941 SGI disk label (volume header)
6145
+
6146
+ # SGI XFS filesystem - Nathan Scott <nathans@debian.org>
6147
+ 0 belong 0x58465342 SGI XFS filesystem data
6148
+ >0x4 belong x (blksz %d,
6149
+ >0x68 beshort x inosz %d,
6150
+ >0x64 beshort ^0x2004 v1 dirs)
6151
+ >0x64 beshort &0x2004 v2 dirs)
6152
+
6153
+ ############################################################################
6154
+ # Minix-ST kernel floppy
6155
+ 0x800 belong 0x46fc2700 Atari-ST Minix kernel image
6156
+ >19 string \240\5\371\5\0\011\0\2\0 \b, 720k floppy
6157
+ >19 string \320\2\370\5\0\011\0\1\0 \b, 360k floppy
6158
+
6159
+ ############################################################################
6160
+ # Hmmm, is this a better way of detecting _standard_ floppy images ?
6161
+ 19 string \320\2\360\3\0\011\0\1\0 DOS floppy 360k
6162
+ >0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
6163
+ 19 string \240\5\371\3\0\011\0\2\0 DOS floppy 720k
6164
+ >0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
6165
+ 19 string \100\013\360\011\0\022\0\2\0 DOS floppy 1440k
6166
+ >0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
6167
+
6168
+ 19 string \240\5\371\5\0\011\0\2\0 DOS floppy 720k, IBM
6169
+ >0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
6170
+ 19 string \100\013\371\5\0\011\0\2\0 DOS floppy 1440k, mkdosfs
6171
+ >0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
6172
+
6173
+ 19 string \320\2\370\5\0\011\0\1\0 Atari-ST floppy 360k
6174
+ 19 string \240\5\371\5\0\011\0\2\0 Atari-ST floppy 720k
6175
+
6176
+ # Valid media descriptor bytes for MS-DOS:
6177
+ #
6178
+ # Byte Capacity Media Size and Type
6179
+ # -------------------------------------------------
6180
+ #
6181
+ # F0 2.88 MB 3.5-inch, 2-sided, 36-sector
6182
+ # F0 1.44 MB 3.5-inch, 2-sided, 18-sector
6183
+ # F9 720K 3.5-inch, 2-sided, 9-sector
6184
+ # F9 1.2 MB 5.25-inch, 2-sided, 15-sector
6185
+ # FD 360K 5.25-inch, 2-sided, 9-sector
6186
+ # FF 320K 5.25-inch, 2-sided, 8-sector
6187
+ # FC 180K 5.25-inch, 1-sided, 9-sector
6188
+ # FE 160K 5.25-inch, 1-sided, 8-sector
6189
+ # FE 250K 8-inch, 1-sided, single-density
6190
+ # FD 500K 8-inch, 2-sided, single-density
6191
+ # FE 1.2 MB 8-inch, 2-sided, double-density
6192
+ # F8 ----- Fixed disk
6193
+ #
6194
+ # FC xxxK Apricot 70x1x9 boot disk.
6195
+ #
6196
+ # Originally a bitmap:
6197
+ # xxxxxxx0 Not two sided
6198
+ # xxxxxxx1 Double sided
6199
+ # xxxxxx0x Not 8 SPT
6200
+ # xxxxxx1x 8 SPT
6201
+ # xxxxx0xx Not Removable drive
6202
+ # xxxxx1xx Removable drive
6203
+ # 11111xxx Must be one.
6204
+ #
6205
+ # But now it's rather random:
6206
+ # 111111xx Low density disk
6207
+ # 00 SS, Not 8 SPT
6208
+ # 01 DS, Not 8 SPT
6209
+ # 10 SS, 8 SPT
6210
+ # 11 DS, 8 SPT
6211
+ #
6212
+ # 11111001 Double density 3� floppy disk, high density 5�
6213
+ # 11110000 High density 3� floppy disk
6214
+ # 11111000 Hard disk any format
6215
+ #
6216
+
6217
+ # CDROM Filesystems
6218
+ # Modified for UDF by gerardo.cacciari@gmail.com
6219
+ 32769 string CD001
6220
+ !:mime application/x-iso9660-image
6221
+ >38913 string !NSR0 ISO 9660 CD-ROM filesystem data
6222
+ >38913 string NSR0 UDF filesystem data
6223
+ >>38917 string 1 (version 1.0)
6224
+ >>38917 string 2 (version 1.5)
6225
+ >>38917 string 3 (version 2.0)
6226
+ >>38917 byte >0x33 (unknown version, ID 0x%X)
6227
+ >>38917 byte <0x31 (unknown version, ID 0x%X)
6228
+ # "application id" which appears to be used as a volume label
6229
+ >32808 string >\0 '%s'
6230
+ >34816 string \000CD001\001EL\ TORITO\ SPECIFICATION (bootable)
6231
+ 37633 string CD001 ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors)
6232
+ !:mime application/x-iso9660-image
6233
+ 32776 string CDROM High Sierra CD-ROM filesystem data
6234
+
6235
+ # cramfs filesystem - russell@coker.com.au
6236
+ 0 lelong 0x28cd3d45 Linux Compressed ROM File System data, little endian
6237
+ >4 lelong x size %lu
6238
+ >8 lelong &1 version #2
6239
+ >8 lelong &2 sorted_dirs
6240
+ >8 lelong &4 hole_support
6241
+ >32 lelong x CRC 0x%x,
6242
+ >36 lelong x edition %lu,
6243
+ >40 lelong x %lu blocks,
6244
+ >44 lelong x %lu files
6245
+
6246
+ 0 belong 0x28cd3d45 Linux Compressed ROM File System data, big endian
6247
+ >4 belong x size %lu
6248
+ >8 belong &1 version #2
6249
+ >8 belong &2 sorted_dirs
6250
+ >8 belong &4 hole_support
6251
+ >32 belong x CRC 0x%x,
6252
+ >36 belong x edition %lu,
6253
+ >40 belong x %lu blocks,
6254
+ >44 belong x %lu files
6255
+
6256
+ # reiserfs - russell@coker.com.au
6257
+ 0x10034 string ReIsErFs ReiserFS V3.5
6258
+ 0x10034 string ReIsEr2Fs ReiserFS V3.6
6259
+ 0x10034 string ReIsEr3Fs ReiserFS V3.6.19
6260
+ >0x1002c leshort x block size %d
6261
+ >0x10032 leshort &2 (mounted or unclean)
6262
+ >0x10000 lelong x num blocks %d
6263
+ >0x10040 lelong 1 tea hash
6264
+ >0x10040 lelong 2 yura hash
6265
+ >0x10040 lelong 3 r5 hash
6266
+
6267
+ # JFFS - russell@coker.com.au
6268
+ 0 lelong 0x34383931 Linux Journalled Flash File system, little endian
6269
+ 0 belong 0x34383931 Linux Journalled Flash File system, big endian
6270
+
6271
+ # EST flat binary format (which isn't, but anyway)
6272
+ # From: Mark Brown <broonie@sirena.org.uk>
6273
+ 0 string ESTFBINR EST flat binary
6274
+
6275
+ # Aculab VoIP firmware
6276
+ # From: Mark Brown <broonie@sirena.org.uk>
6277
+ 0 string VoIP\ Startup\ and Aculab VoIP firmware
6278
+ >35 string x format %s
6279
+
6280
+ # u-boot/PPCBoot image file
6281
+ # From: Mark Brown <broonie@sirena.org.uk>
6282
+ 0 belong 0x27051956 u-boot/PPCBoot image
6283
+ >4 string PPCBoot
6284
+ >>12 string x version %s
6285
+
6286
+ # JFFS2 file system
6287
+ 0 leshort 0x1984 Linux old jffs2 filesystem data little endian
6288
+ 0 leshort 0x1985 Linux jffs2 filesystem data little endian
6289
+
6290
+ # Squashfs
6291
+ 0 string sqsh Squashfs filesystem, big endian,
6292
+ >28 beshort x version %d.
6293
+ >30 beshort x \b%d,
6294
+ >28 beshort <3
6295
+ >>8 belong x %d bytes,
6296
+ >28 beshort >2
6297
+ >>63 bequad x %lld bytes,
6298
+ #>>67 belong x %d bytes,
6299
+ >4 belong x %d inodes,
6300
+ >28 beshort <2
6301
+ >>32 beshort x blocksize: %d bytes,
6302
+ >28 beshort >1
6303
+ >>51 belong x blocksize: %d bytes,
6304
+ >39 bedate x created: %s
6305
+ 0 string hsqs Squashfs filesystem, little endian,
6306
+ >28 leshort x version %d.
6307
+ >30 leshort x \b%d,
6308
+ >28 leshort <3
6309
+ >>8 lelong x %d bytes,
6310
+ >28 leshort >2
6311
+ >>63 lequad x %lld bytes,
6312
+ #>>63 lelong x %d bytes,
6313
+ >4 lelong x %d inodes,
6314
+ >28 leshort <2
6315
+ >>32 leshort x blocksize: %d bytes,
6316
+ >28 leshort >1
6317
+ >>51 lelong x blocksize: %d bytes,
6318
+ >39 ledate x created: %s
6319
+
6320
+ 0 string td\000 floppy image data (TeleDisk)
6321
+
6322
+ # AFS Dump Magic
6323
+ # From: Ty Sarna <tsarna@sarna.org>
6324
+ 0 string \x01\xb3\xa1\x13\x22 AFS Dump
6325
+ >&0 belong x (v%d)
6326
+ >>&0 byte 0x76
6327
+ >>>&0 belong x Vol %d,
6328
+ >>>>&0 byte 0x6e
6329
+ >>>>>&0 string x %s
6330
+ >>>>>>&1 byte 0x74
6331
+ >>>>>>>&0 beshort 2
6332
+ >>>>>>>>&4 bedate x on: %s
6333
+ >>>>>>>>&0 bedate =0 full dump
6334
+ >>>>>>>>&0 bedate !0 incremental since: %s
6335
+
6336
+ #----------------------------------------------------------
6337
+ # VMS backup savesets - gerardo.cacciari@gmail.com
6338
+ #
6339
+ 4 string \x01\x00\x01\x00\x01\x00
6340
+ >(0.s+16) string \x01\x01
6341
+ >>&(&0.b+8) byte 0x42 OpenVMS backup saveset data
6342
+ >>>40 lelong x (block size %d,
6343
+ >>>49 string >\0 original name '%s',
6344
+ >>>2 short 1024 VAX generated)
6345
+ >>>2 short 2048 AXP generated)
6346
+ >>>2 short 4096 I64 generated)
6347
+
6348
+ # Summary: Oracle Clustered Filesystem
6349
+ # Created by: Aaron Botsis <redhat@digitalmafia.org>
6350
+ 8 string OracleCFS Oracle Clustered Filesystem,
6351
+ >4 long x rev %d
6352
+ >0 long x \b.%d,
6353
+ >560 string x label: %.64s,
6354
+ >136 string x mountpoint: %.128s
6355
+
6356
+ # Summary: Oracle ASM tagged volume
6357
+ # Created by: Aaron Botsis <redhat@digitalmafia.org>
6358
+ 32 string ORCLDISK Oracle ASM Volume,
6359
+ >40 string x Disk Name: %0.12s
6360
+ 32 string ORCLCLRD Oracle ASM Volume (cleared),
6361
+ >40 string x Disk Name: %0.12s
6362
+
6363
+ # Oracle Clustered Filesystem - Aaron Botsis <redhat@digitalmafia.org>
6364
+ 8 string OracleCFS Oracle Clustered Filesystem,
6365
+ >4 long x rev %d
6366
+ >0 long x \b.%d,
6367
+ >560 string x label: %.64s,
6368
+ >136 string x mountpoint: %.128s
6369
+
6370
+ # Oracle ASM tagged volume - Aaron Botsis <redhat@digitalmafia.org>
6371
+ 32 string ORCLDISK Oracle ASM Volume,
6372
+ >40 string x Disk Name: %0.12s
6373
+ 32 string ORCLCLRD Oracle ASM Volume (cleared),
6374
+ >40 string x Disk Name: %0.12s
6375
+
6376
+ # Compaq/HP RILOE floppy image
6377
+ # From: Dirk Jagdmann <doj@cubic.org>
6378
+ 0 string CPQRFBLO Compaq/HP RILOE floppy image
6379
+
6380
+ #------------------------------------------------------------------------------
6381
+ # Files-11 On-Disk Structure (OpenVMS file system) - gerardo.cacciari@gmail.com
6382
+ # These bits come from LBN 1 (home block) of ODS-2 and ODS-5 volumes, which is
6383
+ # mapped to VBN 2 of [000000]INDEXF.SYS;1
6384
+ #
6385
+ 1008 string DECFILE11B Files-11 On-Disk Structure
6386
+ >525 byte x Level %d
6387
+ >525 byte x (ODS-%d OpenVMS file system),
6388
+ >984 string x volume label is '%-12.12s'
6389
+
6390
+ # From: Thomas Klausner <wiz@NetBSD.org>
6391
+ # http://filext.com/file-extension/DAA
6392
+ # describes the daa file format. The magic would be:
6393
+ 0 string DAA\x0\x0\x0\x0\x0 PowerISO Direct-Access-Archive
6394
+
6395
+ # From Albert Cahalan <acahalan@gmail.com>
6396
+ # really le32 operation,destination,payloadsize (but quite predictable)
6397
+ # 01 00 00 00 00 00 00 c0 00 02 00 00
6398
+ 0 string \1\0\0\0\0\0\0\300\0\2\0\0 Marvell Libertas firmware
6399
+
6400
+ # From Eric Sandeen
6401
+ # GFS2
6402
+ 0x10000 belong 0x01161970 GFS2 Filesystem
6403
+ >0x10024 belong x (blocksize %d,
6404
+ >0x10060 string >\0 lockproto %s)
6405
+
6406
+ # BTRFS
6407
+ 0x10040 string _BHRfS_M BTRFS Filesystem
6408
+ >0x1012b string >\0 (label "%s",
6409
+ >0x10090 lelong x sectorsize %d,
6410
+ >0x10094 lelong x nodesize %d,
6411
+ >0x10098 lelong x leafsize %d)
6412
+
6413
+
6414
+ # dvdisaster's .ecc
6415
+ # From: "Nelson A. de Oliveira" <naoliv@gmail.com>
6416
+ 0 string *dvdisaster* dvdisaster error correction file
6417
+
6418
+ # Type: CROM filesystem
6419
+ # From: Werner Fink <werner@suse.de>
6420
+ 0 string CROMFS CROMFS
6421
+ >6 string >\0 \b version %2.2s,
6422
+ >8 ulequad >0 \b block data at %lld,
6423
+ >16 ulequad >0 \b fblock table at %lld,
6424
+ >24 ulequad >0 \b inode table at %lld,
6425
+ >32 ulequad >0 \b root at %lld,
6426
+ >40 ulelong >0 \b fblock size = %ld,
6427
+ >44 ulelong >0 \b block size = %ld,
6428
+ >48 ulequad >0 \b bytes = %lld
6429
+
6430
+ #------------------------------------------------------------------------------
6431
+ # flash: file(1) magic for Macromedia Flash file format
6432
+ #
6433
+ # See
6434
+ #
6435
+ # http://www.macromedia.com/software/flash/open/
6436
+ #
6437
+ 0 string FWS Macromedia Flash data,
6438
+ >3 byte x version %d
6439
+ !:mime application/x-shockwave-flash
6440
+ 0 string CWS Macromedia Flash data (compressed),
6441
+ !:mime application/x-shockwave-flash
6442
+ >3 byte x version %d
6443
+ # From: Cal Peake <cp@absolutedigital.net>
6444
+ 0 string FLV Macromedia Flash Video
6445
+ !:mime video/x-flv
6446
+
6447
+ #
6448
+ # From Dave Wilson
6449
+ 0 string AGD4\xbe\xb8\xbb\xcb\x00 Macromedia Freehand 9 Document
6450
+ #------------------------------------------------------------------------------
6451
+ # fonts: file(1) magic for font data
6452
+ #
6453
+ 0 search/1 FONT ASCII vfont text
6454
+ 0 short 0436 Berkeley vfont data
6455
+ 0 short 017001 byte-swapped Berkeley vfont data
6456
+
6457
+ # PostScript fonts (must precede "printer" entries), quinlan@yggdrasil.com
6458
+ 0 string %!PS-AdobeFont-1. PostScript Type 1 font text
6459
+ >20 string >\0 (%s)
6460
+ 6 string %!PS-AdobeFont-1. PostScript Type 1 font program data
6461
+
6462
+ # X11 font files in SNF (Server Natural Format) format
6463
+ 0 belong 00000004 X11 SNF font data, MSB first
6464
+ 0 lelong 00000004 X11 SNF font data, LSB first
6465
+
6466
+ # X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan@yggdrasil.com)
6467
+ 0 search/1 STARTFONT\ X11 BDF font text
6468
+
6469
+ # X11 fonts, from Daniel Quinlan (quinlan@yggdrasil.com)
6470
+ # PCF must come before SGI additions ("MIPSEL MIPS-II COFF" collides)
6471
+ 0 string \001fcp X11 Portable Compiled Font data
6472
+ >12 byte 0x02 \b, LSB first
6473
+ >12 byte 0x0a \b, MSB first
6474
+ 0 string D1.0\015 X11 Speedo font data
6475
+
6476
+ #------------------------------------------------------------------------------
6477
+ # FIGlet fonts and controlfiles
6478
+ # From figmagic supplied with Figlet version 2.2
6479
+ # "David E. O'Brien" <obrien@FreeBSD.ORG>
6480
+ 0 string flf FIGlet font
6481
+ >3 string >2a version %-2.2s
6482
+ 0 string flc FIGlet controlfile
6483
+ >3 string >2a version %-2.2s
6484
+
6485
+ # libGrx graphics lib fonts, from Albert Cahalan (acahalan@cs.uml.edu)
6486
+ # Used with djgpp (DOS Gnu C++), sometimes Linux or Turbo C++
6487
+ 0 belong 0x14025919 libGrx font data,
6488
+ >8 leshort x %dx
6489
+ >10 leshort x \b%d
6490
+ >40 string x %s
6491
+ # Misc. DOS VGA fonts, from Albert Cahalan (acahalan@cs.uml.edu)
6492
+ 0 belong 0xff464f4e DOS code page font data collection
6493
+ 7 belong 0x00454741 DOS code page font data
6494
+ 7 belong 0x00564944 DOS code page font data (from Linux?)
6495
+ 4098 string DOSFONT DOSFONT2 encrypted font data
6496
+
6497
+ # downloadable fonts for browser (prints type) anthon@mnt.org
6498
+ 0 string PFR1 PFR1 font
6499
+ >102 string >0 \b: %s
6500
+
6501
+ # True Type fonts
6502
+ 0 string \000\001\000\000\000 TrueType font data
6503
+
6504
+ 0 string \007\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font
6505
+ 0 string \012\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font
6506
+
6507
+ 0 string ttcf TrueType font collection data
6508
+
6509
+ # Opentype font data from Avi Bercovich
6510
+ 0 string OTTO OpenType font data
6511
+
6512
+ # Gürkan Sengün <gurkan@linuks.mine.nu>, www.linuks.mine.nu
6513
+ 0 string SplineFontDB: Spline Font Database
6514
+ >14 string x version %s
6515
+ # FORTRAN source
6516
+ 0 regex/100 \^[Cc][\ \t] FORTRAN program
6517
+ !:mime text/x-fortran
6518
+ #------------------------------------------------------------------------------
6519
+ # frame: file(1) magic for FrameMaker files
6520
+ #
6521
+ # This stuff came on a FrameMaker demo tape, most of which is
6522
+ # copyright, but this file is "published" as witness the following:
6523
+ #
6524
+ # Note that this is the Framemaker Maker Interchange Format, not the
6525
+ # Normal format which would be application/vnd.framemaker.
6526
+ #
6527
+ 0 string \<MakerFile FrameMaker document
6528
+ !:mime application/x-mif
6529
+ >11 string 5.5 (5.5
6530
+ >11 string 5.0 (5.0
6531
+ >11 string 4.0 (4.0
6532
+ >11 string 3.0 (3.0
6533
+ >11 string 2.0 (2.0
6534
+ >11 string 1.0 (1.0
6535
+ >14 byte x %c)
6536
+ 0 string \<MIFFile FrameMaker MIF (ASCII) file
6537
+ !:mime application/x-mif
6538
+ >9 string 4.0 (4.0)
6539
+ >9 string 3.0 (3.0)
6540
+ >9 string 2.0 (2.0)
6541
+ >9 string 1.0 (1.x)
6542
+ 0 search/1 \<MakerDictionary FrameMaker Dictionary text
6543
+ !:mime application/x-mif
6544
+ >17 string 3.0 (3.0)
6545
+ >17 string 2.0 (2.0)
6546
+ >17 string 1.0 (1.x)
6547
+ 0 string \<MakerScreenFont FrameMaker Font file
6548
+ !:mime application/x-mif
6549
+ >17 string 1.01 (%s)
6550
+ 0 string \<MML FrameMaker MML file
6551
+ !:mime application/x-mif
6552
+ 0 string \<BookFile FrameMaker Book file
6553
+ !:mime application/x-mif
6554
+ >10 string 3.0 (3.0
6555
+ >10 string 2.0 (2.0
6556
+ >10 string 1.0 (1.0
6557
+ >13 byte x %c)
6558
+ # XXX - this book entry should be verified, if you find one, uncomment this
6559
+ #0 string \<Book\ FrameMaker Book (ASCII) file
6560
+ #!:mime application/x-mif
6561
+ #>6 string 3.0 (3.0)
6562
+ #>6 string 2.0 (2.0)
6563
+ #>6 string 1.0 (1.0)
6564
+ 0 string \<Maker Intermediate Print File FrameMaker IPL file
6565
+ !:mime application/x-mif
6566
+
6567
+ #------------------------------------------------------------------------------
6568
+ # freebsd: file(1) magic for FreeBSD objects
6569
+ #
6570
+ # All new-style FreeBSD magic numbers are in host byte order (i.e.,
6571
+ # little-endian on x86).
6572
+ #
6573
+ # XXX - this comes from the file "freebsd" in a recent FreeBSD version of
6574
+ # "file"; it, and the NetBSD stuff in "netbsd", appear to use different
6575
+ # schemes for distinguishing between executable images, shared libraries,
6576
+ # and object files.
6577
+ #
6578
+ # FreeBSD says:
6579
+ #
6580
+ # Regardless of whether it's pure, demand-paged, or none of the
6581
+ # above:
6582
+ #
6583
+ # if the entry point is < 4096, then it's a shared library if
6584
+ # the "has run-time loader information" bit is set, and is
6585
+ # position-independent if the "is position-independent" bit
6586
+ # is set;
6587
+ #
6588
+ # if the entry point is >= 4096 (or >4095, same thing), then it's
6589
+ # an executable, and is dynamically-linked if the "has run-time
6590
+ # loader information" bit is set.
6591
+ #
6592
+ # On x86, NetBSD says:
6593
+ #
6594
+ # If it's neither pure nor demand-paged:
6595
+ #
6596
+ # if it has the "has run-time loader information" bit set, it's
6597
+ # a dynamically-linked executable;
6598
+ #
6599
+ # if it doesn't have that bit set, then:
6600
+ #
6601
+ # if it has the "is position-independent" bit set, it's
6602
+ # position-independent;
6603
+ #
6604
+ # if the entry point is non-zero, it's an executable, otherwise
6605
+ # it's an object file.
6606
+ #
6607
+ # If it's pure:
6608
+ #
6609
+ # if it has the "has run-time loader information" bit set, it's
6610
+ # a dynamically-linked executable, otherwise it's just an
6611
+ # executable.
6612
+ #
6613
+ # If it's demand-paged:
6614
+ #
6615
+ # if it has the "has run-time loader information" bit set,
6616
+ # then:
6617
+ #
6618
+ # if the entry point is < 4096, it's a shared library;
6619
+ #
6620
+ # if the entry point is = 4096 or > 4096 (i.e., >= 4096),
6621
+ # it's a dynamically-linked executable);
6622
+ #
6623
+ # if it doesn't have the "has run-time loader information" bit
6624
+ # set, then it's just an executable.
6625
+ #
6626
+ # (On non-x86, NetBSD does much the same thing, except that it uses
6627
+ # 8192 on 68K - except for "68k4k", which is presumably "68K with 4K
6628
+ # pages - SPARC, and MIPS, presumably because Sun-3's and Sun-4's
6629
+ # had 8K pages; dunno about MIPS.)
6630
+ #
6631
+ # I suspect the two will differ only in perverse and uninteresting cases
6632
+ # ("shared" libraries that aren't demand-paged and whose pages probably
6633
+ # won't actually be shared, executables with entry points <4096).
6634
+ #
6635
+ # I leave it to those more familiar with FreeBSD and NetBSD to figure out
6636
+ # what the right answer is (although using ">4095", FreeBSD-style, is
6637
+ # probably better than separately checking for "=4096" and ">4096",
6638
+ # NetBSD-style). (The old "netbsd" file analyzed FreeBSD demand paged
6639
+ # executables using the NetBSD technique.)
6640
+ #
6641
+ 0 lelong&0377777777 041400407 FreeBSD/i386
6642
+ >20 lelong <4096
6643
+ >>3 byte&0xC0 &0x80 shared library
6644
+ >>3 byte&0xC0 0x40 PIC object
6645
+ >>3 byte&0xC0 0x00 object
6646
+ >20 lelong >4095
6647
+ >>3 byte&0x80 0x80 dynamically linked executable
6648
+ >>3 byte&0x80 0x00 executable
6649
+ >16 lelong >0 not stripped
6650
+
6651
+ 0 lelong&0377777777 041400410 FreeBSD/i386 pure
6652
+ >20 lelong <4096
6653
+ >>3 byte&0xC0 &0x80 shared library
6654
+ >>3 byte&0xC0 0x40 PIC object
6655
+ >>3 byte&0xC0 0x00 object
6656
+ >20 lelong >4095
6657
+ >>3 byte&0x80 0x80 dynamically linked executable
6658
+ >>3 byte&0x80 0x00 executable
6659
+ >16 lelong >0 not stripped
6660
+
6661
+ 0 lelong&0377777777 041400413 FreeBSD/i386 demand paged
6662
+ >20 lelong <4096
6663
+ >>3 byte&0xC0 &0x80 shared library
6664
+ >>3 byte&0xC0 0x40 PIC object
6665
+ >>3 byte&0xC0 0x00 object
6666
+ >20 lelong >4095
6667
+ >>3 byte&0x80 0x80 dynamically linked executable
6668
+ >>3 byte&0x80 0x00 executable
6669
+ >16 lelong >0 not stripped
6670
+
6671
+ 0 lelong&0377777777 041400314 FreeBSD/i386 compact demand paged
6672
+ >20 lelong <4096
6673
+ >>3 byte&0xC0 &0x80 shared library
6674
+ >>3 byte&0xC0 0x40 PIC object
6675
+ >>3 byte&0xC0 0x00 object
6676
+ >20 lelong >4095
6677
+ >>3 byte&0x80 0x80 dynamically linked executable
6678
+ >>3 byte&0x80 0x00 executable
6679
+ >16 lelong >0 not stripped
6680
+
6681
+ # XXX gross hack to identify core files
6682
+ # cores start with a struct tss; we take advantage of the following:
6683
+ # byte 7: highest byte of the kernel stack pointer, always 0xfe
6684
+ # 8/9: kernel (ring 0) ss value, always 0x0010
6685
+ # 10 - 27: ring 1 and 2 ss/esp, unused, thus always 0
6686
+ # 28: low order byte of the current PTD entry, always 0 since the
6687
+ # PTD is page-aligned
6688
+ #
6689
+ 7 string \357\020\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 FreeBSD/i386 a.out core file
6690
+ >1039 string >\0 from '%s'
6691
+
6692
+ # /var/run/ld.so.hints
6693
+ # What are you laughing about?
6694
+ 0 lelong 011421044151 ld.so hints file (Little Endian
6695
+ >4 lelong >0 \b, version %d)
6696
+ >4 belong <1 \b)
6697
+ 0 belong 011421044151 ld.so hints file (Big Endian
6698
+ >4 belong >0 \b, version %d)
6699
+ >4 belong <1 \b)
6700
+
6701
+ #
6702
+ # Files generated by FreeBSD scrshot(1)/vidcontrol(1) utilities
6703
+ #
6704
+ 0 string SCRSHOT_ scrshot(1) screenshot,
6705
+ >8 byte x version %d,
6706
+ >9 byte 2 %d bytes in header,
6707
+ >>10 byte x %d chars wide by
6708
+ >>11 byte x %d chars high
6709
+
6710
+ #------------------------------------------------------------------------------
6711
+ # fsav: file(1) magic for datafellows fsav virus definition files
6712
+ # Anthon van der Neut (anthon@mnt.org)
6713
+
6714
+ # ftp://ftp.f-prot.com/pub/{macrdef2.zip,nomacro.def}
6715
+ 0 beshort 0x1575 fsav macro virus signatures
6716
+ >8 leshort >0 (%d-
6717
+ >11 byte >0 \b%02d-
6718
+ >10 byte >0 \b%02d)
6719
+ # ftp://ftp.f-prot.com/pub/sign.zip
6720
+ #10 ubyte <12
6721
+ #>9 ubyte <32
6722
+ #>>8 ubyte 0x0a
6723
+ #>>>12 ubyte 0x07
6724
+ #>>>>11 uleshort >0 fsav DOS/Windows virus signatures (%d-
6725
+ #>>>>10 byte 0 \b01-
6726
+ #>>>>10 byte 1 \b02-
6727
+ #>>>>10 byte 2 \b03-
6728
+ #>>>>10 byte 3 \b04-
6729
+ #>>>>10 byte 4 \b05-
6730
+ #>>>>10 byte 5 \b06-
6731
+ #>>>>10 byte 6 \b07-
6732
+ #>>>>10 byte 7 \b08-
6733
+ #>>>>10 byte 8 \b09-
6734
+ #>>>>10 byte 9 \b10-
6735
+ #>>>>10 byte 10 \b11-
6736
+ #>>>>10 byte 11 \b12-
6737
+ #>>>>9 ubyte >0 \b%02d)
6738
+ # ftp://ftp.f-prot.com/pub/sign2.zip
6739
+ #0 ubyte 0x62
6740
+ #>1 ubyte 0xF5
6741
+ #>>2 ubyte 0x1
6742
+ #>>>3 ubyte 0x1
6743
+ #>>>>4 ubyte 0x0e
6744
+ #>>>>>13 ubyte >0 fsav virus signatures
6745
+ #>>>>>>11 ubyte x size 0x%02x
6746
+ #>>>>>>12 ubyte x \b%02x
6747
+ #>>>>>>13 ubyte x \b%02x bytes
6748
+
6749
+ # Joerg Jenderek: joerg dot jenderek at web dot de
6750
+ # http://www.clamav.net/doc/latest/html/node45.html
6751
+ # .cvd files start with a 512 bytes colon separated header
6752
+ # ClamAV-VDB:buildDate:version:signaturesNumbers:functionalityLevelRequired:MD5:Signature:builder:buildTime
6753
+ # + gzipped tarball files
6754
+ 0 string ClamAV-VDB:
6755
+ >11 string >\0 Clam AntiVirus database %-.23s
6756
+ >>34 string :
6757
+ >>>35 string !: \b, version
6758
+ >>>>35 string x \b%-.1s
6759
+ >>>>>36 string !:
6760
+ >>>>>>36 string x \b%-.1s
6761
+ >>>>>>>37 string !:
6762
+ >>>>>>>>37 string x \b%-.1s
6763
+ >>>>>>>>>38 string !:
6764
+ >>>>>>>>>>38 string x \b%-.1s
6765
+ >512 string \037\213 \b, gzipped
6766
+ >769 string ustar\0 \b, tarred
6767
+
6768
+ # Type: Grisoft AVG AntiVirus
6769
+ # From: David Newgas <david@newgas.net>
6770
+ 0 string AVG7_ANTIVIRUS_VAULT_FILE AVG 7 Antivirus vault file data
6771
+ #------------------------------------------------------------------------------
6772
+ # games: file(1) for games
6773
+
6774
+ # Fabio Bonelli <fabiobonelli@libero.it>
6775
+ # Quake II - III data files
6776
+ 0 string IDP2 Quake II 3D Model file,
6777
+ >20 long x %lu skin(s),
6778
+ >8 long x (%lu x
6779
+ >12 long x %lu),
6780
+ >40 long x %lu frame(s),
6781
+ >16 long x Frame size %lu bytes,
6782
+ >24 long x %lu vertices/frame,
6783
+ >28 long x %lu texture coordinates,
6784
+ >32 long x %lu triangles/frame
6785
+
6786
+ 0 string IBSP Quake
6787
+ >4 long 0x26 II Map file (BSP)
6788
+ >4 long 0x2E III Map file (BSP)
6789
+
6790
+ 0 string IDS2 Quake II SP2 sprite file
6791
+
6792
+ #---------------------------------------------------------------------------
6793
+ # Doom and Quake
6794
+ # submitted by Nicolas Patrois
6795
+
6796
+ 0 string \xcb\x1dBoom\xe6\xff\x03\x01 Boom or linuxdoom demo
6797
+ # some doom lmp files don't match, I've got one beginning with \x6d\x02\x01\x01
6798
+
6799
+ 24 string LxD\ 203 Linuxdoom save
6800
+ >0 string x , name=%s
6801
+ >44 string x , world=%s
6802
+
6803
+ # Quake
6804
+
6805
+ 0 string PACK Quake I or II world or extension
6806
+ >8 lelong >0 \b, %d entries
6807
+
6808
+ #0 string -1\x0a Quake I demo
6809
+ #>30 string x version %.4s
6810
+ #>61 string x level %s
6811
+
6812
+ #0 string 5\x0a Quake I save
6813
+
6814
+ # The levels
6815
+
6816
+ # Quake 1
6817
+
6818
+ 0 string 5\x0aIntroduction Quake I save: start Introduction
6819
+ 0 string 5\x0athe_Slipgate_Complex Quake I save: e1m1 The slipgate complex
6820
+ 0 string 5\x0aCastle_of_the_Damned Quake I save: e1m2 Castle of the damned
6821
+ 0 string 5\x0athe_Necropolis Quake I save: e1m3 The necropolis
6822
+ 0 string 5\x0athe_Grisly_Grotto Quake I save: e1m4 The grisly grotto
6823
+ 0 string 5\x0aZiggurat_Vertigo Quake I save: e1m8 Ziggurat vertigo (secret)
6824
+ 0 string 5\x0aGloom_Keep Quake I save: e1m5 Gloom keep
6825
+ 0 string 5\x0aThe_Door_To_Chthon Quake I save: e1m6 The door to Chthon
6826
+ 0 string 5\x0aThe_House_of_Chthon Quake I save: e1m7 The house of Chthon
6827
+ 0 string 5\x0athe_Installation Quake I save: e2m1 The installation
6828
+ 0 string 5\x0athe_Ogre_Citadel Quake I save: e2m2 The ogre citadel
6829
+ 0 string 5\x0athe_Crypt_of_Decay Quake I save: e2m3 The crypt of decay (dopefish lives!)
6830
+ 0 string 5\x0aUnderearth Quake I save: e2m7 Underearth (secret)
6831
+ 0 string 5\x0athe_Ebon_Fortress Quake I save: e2m4 The ebon fortress
6832
+ 0 string 5\x0athe_Wizard's_Manse Quake I save: e2m5 The wizard's manse
6833
+ 0 string 5\x0athe_Dismal_Oubliette Quake I save: e2m6 The dismal oubliette
6834
+ 0 string 5\x0aTermination_Central Quake I save: e3m1 Termination central
6835
+ 0 string 5\x0aVaults_of_Zin Quake I save: e3m2 Vaults of Zin
6836
+ 0 string 5\x0athe_Tomb_of_Terror Quake I save: e3m3 The tomb of terror
6837
+ 0 string 5\x0aSatan's_Dark_Delight Quake I save: e3m4 Satan's dark delight
6838
+ 0 string 5\x0athe_Haunted_Halls Quake I save: e3m7 The haunted halls (secret)
6839
+ 0 string 5\x0aWind_Tunnels Quake I save: e3m5 Wind tunnels
6840
+ 0 string 5\x0aChambers_of_Torment Quake I save: e3m6 Chambers of torment
6841
+ 0 string 5\x0athe_Sewage_System Quake I save: e4m1 The sewage system
6842
+ 0 string 5\x0aThe_Tower_of_Despair Quake I save: e4m2 The tower of despair
6843
+ 0 string 5\x0aThe_Elder_God_Shrine Quake I save: e4m3 The elder god shrine
6844
+ 0 string 5\x0athe_Palace_of_Hate Quake I save: e4m4 The palace of hate
6845
+ 0 string 5\x0aHell's_Atrium Quake I save: e4m5 Hell's atrium
6846
+ 0 string 5\x0athe_Nameless_City Quake I save: e4m8 The nameless city (secret)
6847
+ 0 string 5\x0aThe_Pain_Maze Quake I save: e4m6 The pain maze
6848
+ 0 string 5\x0aAzure_Agony Quake I save: e4m7 Azure agony
6849
+ 0 string 5\x0aShub-Niggurath's_Pit Quake I save: end Shub-Niggurath's pit
6850
+
6851
+ # Quake DeathMatch levels
6852
+
6853
+ 0 string 5\x0aPlace_of_Two_Deaths Quake I save: dm1 Place of two deaths
6854
+ 0 string 5\x0aClaustrophobopolis Quake I save: dm2 Claustrophobopolis
6855
+ 0 string 5\x0aThe_Abandoned_Base Quake I save: dm3 The abandoned base
6856
+ 0 string 5\x0aThe_Bad_Place Quake I save: dm4 The bad place
6857
+ 0 string 5\x0aThe_Cistern Quake I save: dm5 The cistern
6858
+ 0 string 5\x0aThe_Dark_Zone Quake I save: dm6 The dark zone
6859
+
6860
+ # Scourge of Armagon
6861
+
6862
+ 0 string 5\x0aCommand_HQ Quake I save: start Command HQ
6863
+ 0 string 5\x0aThe_Pumping_Station Quake I save: hip1m1 The pumping station
6864
+ 0 string 5\x0aStorage_Facility Quake I save: hip1m2 Storage facility
6865
+ 0 string 5\x0aMilitary_Complex Quake I save: hip1m5 Military complex (secret)
6866
+ 0 string 5\x0athe_Lost_Mine Quake I save: hip1m3 The lost mine
6867
+ 0 string 5\x0aResearch_Facility Quake I save: hip1m4 Research facility
6868
+ 0 string 5\x0aAncient_Realms Quake I save: hip2m1 Ancient realms
6869
+ 0 string 5\x0aThe_Gremlin's_Domain Quake I save: hip2m6 The gremlin's domain (secret)
6870
+ 0 string 5\x0aThe_Black_Cathedral Quake I save: hip2m2 The black cathedral
6871
+ 0 string 5\x0aThe_Catacombs Quake I save: hip2m3 The catacombs
6872
+ 0 string 5\x0athe_Crypt__ Quake I save: hip2m4 The crypt
6873
+ 0 string 5\x0aMortum's_Keep Quake I save: hip2m5 Mortum's keep
6874
+ 0 string 5\x0aTur_Torment Quake I save: hip3m1 Tur torment
6875
+ 0 string 5\x0aPandemonium Quake I save: hip3m2 Pandemonium
6876
+ 0 string 5\x0aLimbo Quake I save: hip3m3 Limbo
6877
+ 0 string 5\x0athe_Edge_of_Oblivion Quake I save: hipdm1 The edge of oblivion (secret)
6878
+ 0 string 5\x0aThe_Gauntlet Quake I save: hip3m4 The gauntlet
6879
+ 0 string 5\x0aArmagon's_Lair Quake I save: hipend Armagon's lair
6880
+
6881
+ # Malice
6882
+
6883
+ 0 string 5\x0aThe_Academy Quake I save: start The academy
6884
+ 0 string 5\x0aThe_Lab Quake I save: d1 The lab
6885
+ 0 string 5\x0aArea_33 Quake I save: d1b Area 33
6886
+ 0 string 5\x0aSECRET_MISSIONS Quake I save: d3b Secret missions
6887
+ 0 string 5\x0aThe_Hospital Quake I save: d10 The hospital (secret)
6888
+ 0 string 5\x0aThe_Genetics_Lab Quake I save: d11 The genetics lab (secret)
6889
+ 0 string 5\x0aBACK_2_MALICE Quake I save: d4b Back to Malice
6890
+ 0 string 5\x0aArea44 Quake I save: d1c Area 44
6891
+ 0 string 5\x0aTakahiro_Towers Quake I save: d2 Takahiro towers
6892
+ 0 string 5\x0aA_Rat's_Life Quake I save: d3 A rat's life
6893
+ 0 string 5\x0aInto_The_Flood Quake I save: d4 Into the flood
6894
+ 0 string 5\x0aThe_Flood Quake I save: d5 The flood
6895
+ 0 string 5\x0aNuclear_Plant Quake I save: d6 Nuclear plant
6896
+ 0 string 5\x0aThe_Incinerator_Plant Quake I save: d7 The incinerator plant
6897
+ 0 string 5\x0aThe_Foundry Quake I save: d7b The foundry
6898
+ 0 string 5\x0aThe_Underwater_Base Quake I save: d8 The underwater base
6899
+ 0 string 5\x0aTakahiro_Base Quake I save: d9 Takahiro base
6900
+ 0 string 5\x0aTakahiro_Laboratories Quake I save: d12 Takahiro laboratories
6901
+ 0 string 5\x0aStayin'_Alive Quake I save: d13 Stayin' alive
6902
+ 0 string 5\x0aB.O.S.S._HQ Quake I save: d14 B.O.S.S. HQ
6903
+ 0 string 5\x0aSHOWDOWN! Quake I save: d15 Showdown!
6904
+
6905
+ # Malice DeathMatch levels
6906
+
6907
+ 0 string 5\x0aThe_Seventh_Precinct Quake I save: ddm1 The seventh precinct
6908
+ 0 string 5\x0aSub_Station Quake I save: ddm2 Sub station
6909
+ 0 string 5\x0aCrazy_Eights! Quake I save: ddm3 Crazy eights!
6910
+ 0 string 5\x0aEast_Side_Invertationa Quake I save: ddm4 East side invertationa
6911
+ 0 string 5\x0aSlaughterhouse Quake I save: ddm5 Slaughterhouse
6912
+ 0 string 5\x0aDOMINO Quake I save: ddm6 Domino
6913
+ 0 string 5\x0aSANDRA'S_LADDER Quake I save: ddm7 Sandra's ladder
6914
+
6915
+
6916
+ 0 string MComprHD MAME CHD compressed hard disk image,
6917
+ >12 belong x version %lu
6918
+
6919
+ # doom - submitted by Jon Dowland
6920
+
6921
+ 0 string =IWAD doom main IWAD data
6922
+ >4 lelong x containing %d lumps
6923
+ 0 string =PWAD doom patch PWAD data
6924
+ >4 lelong x containing %d lumps
6925
+
6926
+
6927
+ # Summary: Warcraft 3 save
6928
+ # Extension: .w3g
6929
+ # Created by: "Nelson A. de Oliveira" <naoliv@gmail.com>
6930
+ 0 string Warcraft\ III\ recorded\ game %s
6931
+
6932
+
6933
+ # Summary: Warcraft 3 map
6934
+ # Extension: .w3m
6935
+ # Created by: "Nelson A. de Oliveira" <naoliv@gmail.com>
6936
+ 0 string HM3W Warcraft III map file
6937
+
6938
+
6939
+ # Summary: SGF Smart Game Format
6940
+ # Extension: .sgf
6941
+ # Reference: http://www.red-bean.com/sgf/
6942
+ # Created by: Eduardo Sabbatella <eduardo_sabbatella@yahoo.com.ar>
6943
+ # Modified by (1): Abel Cheung (regex, more game format)
6944
+ # FIXME: Some games don't have GM (game type)
6945
+ 0 regex \\(;.*GM\\[[0-9]{1,2}\\] Smart Game Format
6946
+ >2 search/0x200 GM[
6947
+ >>&0 string 1] (Go)
6948
+ >>&0 string 2] (Othello)
6949
+ >>&0 string 3] (chess)
6950
+ >>&0 string 4] (Gomoku+Renju)
6951
+ >>&0 string 5] (Nine Men's Morris)
6952
+ >>&0 string 6] (Backgammon)
6953
+ >>&0 string 7] (Chinese chess)
6954
+ >>&0 string 8] (Shogi)
6955
+ >>&0 string 9] (Lines of Action)
6956
+ >>&0 string 10] (Ataxx)
6957
+ >>&0 string 11] (Hex)
6958
+ >>&0 string 12] (Jungle)
6959
+ >>&0 string 13] (Neutron)
6960
+ >>&0 string 14] (Philosopher's Football)
6961
+ >>&0 string 15] (Quadrature)
6962
+ >>&0 string 16] (Trax)
6963
+ >>&0 string 17] (Tantrix)
6964
+ >>&0 string 18] (Amazons)
6965
+ >>&0 string 19] (Octi)
6966
+ >>&0 string 20] (Gess)
6967
+ >>&0 string 21] (Twixt)
6968
+ >>&0 string 22] (Zertz)
6969
+ >>&0 string 23] (Plateau)
6970
+ >>&0 string 24] (Yinsh)
6971
+ >>&0 string 25] (Punct)
6972
+ >>&0 string 26] (Gobblet)
6973
+ >>&0 string 27] (hive)
6974
+ >>&0 string 28] (Exxit)
6975
+ >>&0 string 29] (Hnefatal)
6976
+ >>&0 string 30] (Kuba)
6977
+ >>&0 string 31] (Tripples)
6978
+ >>&0 string 32] (Chase)
6979
+ >>&0 string 33] (Tumbling Down)
6980
+ >>&0 string 34] (Sahara)
6981
+ >>&0 string 35] (Byte)
6982
+ >>&0 string 36] (Focus)
6983
+ >>&0 string 37] (Dvonn)
6984
+ >>&0 string 38] (Tamsk)
6985
+ >>&0 string 39] (Gipf)
6986
+ >>&0 string 40] (Kropki)
6987
+
6988
+
6989
+ # Summary: Civilization 4 video
6990
+ # Extension: .bik
6991
+ # Created by: Abel Cheung <abelcheung@gmail.com>
6992
+ 0 string BIKi Civilization 4 Video
6993
+
6994
+
6995
+ ##############################################
6996
+ # NetImmerse/Gamebryo game engine entries
6997
+
6998
+ # Summary: Gamebryo game engine file
6999
+ # Extension: .nif, .kf
7000
+ # Created by: Abel Cheung <abelcheung@gmail.com>
7001
+ 0 string Gamebryo\ File\ Format,\ Version\ Gamebryo game engine file
7002
+ >&0 regex [0-9a-z.]+ \b, version %s
7003
+
7004
+ # Summary: Gamebryo game engine file
7005
+ # Extension: .kfm
7006
+ # Created by: Abel Cheung <abelcheung@gmail.com>
7007
+ 0 string ;Gamebryo\ KFM\ File\ Version\ Gamebryo game engine animation File
7008
+ >&0 regex [0-9a-z.]+ \b, version %s
7009
+
7010
+ # Summary: NetImmerse game engine file
7011
+ # Extension .nif
7012
+ # Created by: Abel Cheung <abelcheung@gmail.com>
7013
+ 0 string NetImmerse\ File\ Format,\ Versio
7014
+ >&0 string n\ NetImmerse game engine file
7015
+ >>&0 regex [0-9a-z.]+ \b, version %s
7016
+
7017
+ # Type: SGF Smart Game Format
7018
+ # URL: http://www.red-bean.com/sgf/
7019
+ # From: Eduardo Sabbatella <eduardo_sabbatella@yahoo.com.ar>
7020
+ 2 regex/c \\(;.*GM\\[[0-9]{1,2}\\] Smart Game Format
7021
+ >2 regex/c GM\\[1\\] - Go Game
7022
+ >2 regex/c GM\\[6\\] - BackGammon Game
7023
+ >2 regex/c GM\\[11\\] - Hex Game
7024
+ >2 regex/c GM\\[18\\] - Amazons Game
7025
+ >2 regex/c GM\\[19\\] - Octi Game
7026
+ >2 regex/c GM\\[20\\] - Gess Game
7027
+ >2 regex/c GM\\[21\\] - twix Game
7028
+
7029
+ #------------------------------------------------------------------------------
7030
+ # gcc: file(1) magic for GCC special files
7031
+ #
7032
+ 0 string gpch GCC precompiled header
7033
+
7034
+ # The version field is annoying. It's 3 characters, not zero-terminated.
7035
+ >5 byte x (version %c
7036
+ >6 byte x \b%c
7037
+ >7 byte x \b%c)
7038
+
7039
+ # 67 = 'C', 111 = 'o', 43 = '+', 79 = 'O'
7040
+ >4 byte 67 for C
7041
+ >4 byte 111 for Objective C
7042
+ >4 byte 43 for C++
7043
+ >4 byte 79 for Objective C++
7044
+
7045
+ #------------------------------------------------------------------------------
7046
+ # GEOS files (Vidar Madsen, vidar@gimp.org)
7047
+ # semi-commonly used in embedded and handheld systems.
7048
+ 0 belong 0xc745c153 GEOS
7049
+ >40 byte 1 executable
7050
+ >40 byte 2 VMFile
7051
+ >40 byte 3 binary
7052
+ >40 byte 4 directory label
7053
+ >40 byte <1 unknown
7054
+ >40 byte >4 unknown
7055
+ >4 string >\0 \b, name "%s"
7056
+ #>44 short x \b, version %d
7057
+ #>46 short x \b.%d
7058
+ #>48 short x \b, rev %d
7059
+ #>50 short x \b.%d
7060
+ #>52 short x \b, proto %d
7061
+ #>54 short x \br%d
7062
+ #>168 string >\0 \b, copyright "%s"
7063
+ #------------------------------------------------------------------------------
7064
+ # GIMP Gradient: file(1) magic for the GIMP's gradient data files
7065
+ # by Federico Mena <federico@nuclecu.unam.mx>
7066
+
7067
+ 0 string GIMP\ Gradient GIMP gradient data
7068
+
7069
+ #------------------------------------------------------------------------------
7070
+ # XCF: file(1) magic for the XCF image format used in the GIMP developed
7071
+ # by Spencer Kimball and Peter Mattis
7072
+ # ('Bucky' LaDieu, nega@vt.edu)
7073
+
7074
+ 0 string gimp\ xcf GIMP XCF image data,
7075
+ !:mime image/x-xcf
7076
+ >9 string file version 0,
7077
+ >9 string v version
7078
+ >>10 string >\0 %s,
7079
+ >14 belong x %lu x
7080
+ >18 belong x %lu,
7081
+ >22 belong 0 RGB Color
7082
+ >22 belong 1 Greyscale
7083
+ >22 belong 2 Indexed Color
7084
+ >22 belong >2 Unknown Image Type.
7085
+
7086
+ #------------------------------------------------------------------------------
7087
+ # XCF: file(1) magic for the patterns used in the GIMP, developed
7088
+ # by Spencer Kimball and Peter Mattis
7089
+ # ('Bucky' LaDieu, nega@vt.edu)
7090
+
7091
+ 20 string GPAT GIMP pattern data,
7092
+ >24 string x %s
7093
+
7094
+ #------------------------------------------------------------------------------
7095
+ # XCF: file(1) magic for the brushes used in the GIMP, developed
7096
+ # by Spencer Kimball and Peter Mattis
7097
+ # ('Bucky' LaDieu, nega@vt.edu)
7098
+
7099
+ 20 string GIMP GIMP brush data
7100
+
7101
+ # GIMP Curves File
7102
+ # From: "Nelson A. de Oliveira" <naoliv@gmail.com>
7103
+ 0 string #\040GIMP\040Curves\040File GIMP curve file
7104
+ # GNOME keyring
7105
+ # Contributed by Josh Triplett
7106
+ # FIXME: Could be simplified if pstring supported two-byte counts
7107
+ 0 string GnomeKeyring\n\r\0\n GNOME keyring
7108
+ >&0 ubyte 0 \b, major version 0
7109
+ >>&0 ubyte 0 \b, minor version 0
7110
+ >>>&0 ubyte 0 \b, crypto type 0 (AEL)
7111
+ >>>&0 ubyte >0 \b, crypto type %hhu (unknown)
7112
+ >>>&1 ubyte 0 \b, hash type 0 (MD5)
7113
+ >>>&1 ubyte >0 \b, hash type %hhu (unknown)
7114
+ >>>&2 ubelong 0xFFFFFFFF \b, name NULL
7115
+ >>>&2 ubelong !0xFFFFFFFF
7116
+ >>>>&-4 ubelong >255 \b, name too long for file's pstring type
7117
+ >>>>&-4 ubelong <256
7118
+ >>>>>&-1 pstring x \b, name "%s"
7119
+ >>>>>>&0 ubeqdate x \b, last modified %s
7120
+ >>>>>>&8 ubeqdate x \b, created %s
7121
+ >>>>>>&16 ubelong &1
7122
+ >>>>>>>&0 ubelong x \b, locked if idle for %u seconds
7123
+ >>>>>>&16 ubelong ^1 \b, not locked if idle
7124
+ >>>>>>&24 ubelong x \b, hash iterations %u
7125
+ >>>>>>&28 ubequad x \b, salt %llu
7126
+ >>>>>>&52 ubelong x \b, %u item(s)
7127
+ #------------------------------------------------------------------------------
7128
+ # gnu: file(1) magic for various GNU tools
7129
+ #
7130
+ # GNU nlsutils message catalog file format
7131
+ #
7132
+ 0 string \336\22\4\225 GNU message catalog (little endian),
7133
+ >4 lelong x revision %d,
7134
+ >8 lelong x %d messages
7135
+ 0 string \225\4\22\336 GNU message catalog (big endian),
7136
+ >4 belong x revision %d,
7137
+ >8 belong x %d messages
7138
+ # message catalogs, from Mitchum DSouza <m.dsouza@mrc-apu.cam.ac.uk>
7139
+ 0 string *nazgul* Nazgul style compiled message catalog
7140
+ >8 lelong >0 \b, version %ld
7141
+
7142
+ # GnuPG
7143
+ # The format is very similar to pgp
7144
+ 0 string \001gpg GPG key trust database
7145
+ >4 byte x version %d
7146
+ # Note: magic.mime had 0x8501 for the next line instead of 0x8502
7147
+ 0 beshort 0x8502 GPG encrypted data
7148
+ !:mime text/PGP # encoding: data
7149
+
7150
+ # This magic is not particularly good, as the keyrings don't have true
7151
+ # magic. Nevertheless, it covers many keyrings.
7152
+ 0 beshort 0x9901 GPG key public ring
7153
+ !:mime application/x-gnupg-keyring
7154
+
7155
+ # Gnumeric spreadsheet
7156
+ # This entry is only semi-helpful, as Gnumeric compresses its files, so
7157
+ # they will ordinarily reported as "compressed", but at least -z helps
7158
+ 39 string =<gmr:Workbook Gnumeric spreadsheet
7159
+
7160
+ # From: James Youngman <jay@gnu.org>
7161
+ # gnu find magic
7162
+ 0 string \0LOCATE GNU findutils locate database data
7163
+ >7 string >\0 \b, format %s
7164
+ >7 string 02 \b (frcode)
7165
+
7166
+ # Files produced by GNU gettext
7167
+ 0 long 0xDE120495 GNU-format message catalog data
7168
+ 0 long 0x950412DE GNU-format message catalog data
7169
+
7170
+ #------------------------------------------------------------------------------
7171
+ # gnumeric: file(1) magic for Gnumeric spreadsheet
7172
+ # This entry is only semi-helpful, as Gnumeric compresses its files, so
7173
+ # they will ordinarily reported as "compressed", but at least -z helps
7174
+ 39 string =<gmr:Workbook Gnumeric spreadsheet
7175
+ !:mime application/x-gnumeric
7176
+
7177
+ #------------------------------------------------------------------------------
7178
+ # ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE
7179
+ #
7180
+ # ACE/gr binary
7181
+ 0 string \000\000\0001\000\000\0000\000\000\0000\000\000\0002\000\000\0000\000\000\0000\000\000\0003 old ACE/gr binary file
7182
+ >39 byte >0 - version %c
7183
+ # ACE/gr ascii
7184
+ 0 string #\ xvgr\ parameter\ file ACE/gr ascii file
7185
+ 0 string #\ xmgr\ parameter\ file ACE/gr ascii file
7186
+ 0 string #\ ACE/gr\ parameter\ file ACE/gr ascii file
7187
+ # Grace projects
7188
+ 0 string #\ Grace\ project\ file Grace project file
7189
+ >23 string @version\ (version
7190
+ >>32 byte >0 %c
7191
+ >>33 string >\0 \b.%.2s
7192
+ >>35 string >\0 \b.%.2s)
7193
+ # ACE/gr fit description files
7194
+ 0 string #\ ACE/gr\ fit\ description\ ACE/gr fit description file
7195
+ # end of ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE
7196
+ #------------------------------------------------------------------------------
7197
+ # graphviz: file(1) magic for http://www.graphviz.org/
7198
+
7199
+ # FIXME: These patterns match too generally. For example, the first
7200
+ # line matches a LaTeX file containing the word "graph" (with a {
7201
+ # following later) and the second line matches this file.
7202
+ #0 regex/100 [\r\n\t\ ]*graph[\r\n\t\ ]+.*\\{ graphviz graph text
7203
+ #!:mime text/vnd.graphviz
7204
+ #0 regex/100 [\r\n\t\ ]*digraph[\r\n\t\ ]+.*\\{ graphviz digraph text
7205
+ #!:mime text/vnd.graphviz
7206
+
7207
+ #------------------------------------------------------------------------------
7208
+ # gringotts: file(1) magic for Gringotts
7209
+ # http://devel.pluto.linux.it/projects/Gringotts/
7210
+ # author: Germano Rizzo <mano@pluto.linux.it>
7211
+ #GRG3????Y
7212
+ 0 string GRG Gringotts data file
7213
+ #file format 1
7214
+ >3 string 1 v.1, MCRYPT S2K, SERPENT crypt, SHA-256 hash, ZLib lvl.9
7215
+ #file format 2
7216
+ >3 string 2 v.2, MCRYPT S2K,
7217
+ >>8 byte&0x70 0x00 RIJNDAEL-128 crypt,
7218
+ >>8 byte&0x70 0x10 SERPENT crypt,
7219
+ >>8 byte&0x70 0x20 TWOFISH crypt,
7220
+ >>8 byte&0x70 0x30 CAST-256 crypt,
7221
+ >>8 byte&0x70 0x40 SAFER+ crypt,
7222
+ >>8 byte&0x70 0x50 LOKI97 crypt,
7223
+ >>8 byte&0x70 0x60 3DES crypt,
7224
+ >>8 byte&0x70 0x70 RIJNDAEL-256 crypt,
7225
+ >>8 byte&0x08 0x00 SHA1 hash,
7226
+ >>8 byte&0x08 0x08 RIPEMD-160 hash,
7227
+ >>8 byte&0x04 0x00 ZLib
7228
+ >>8 byte&0x04 0x04 BZip2
7229
+ >>8 byte&0x03 0x00 lvl.0
7230
+ >>8 byte&0x03 0x01 lvl.3
7231
+ >>8 byte&0x03 0x02 lvl.6
7232
+ >>8 byte&0x03 0x03 lvl.9
7233
+ #file format 3
7234
+ >3 string 3 v.3, OpenPGP S2K,
7235
+ >>8 byte&0x70 0x00 RIJNDAEL-128 crypt,
7236
+ >>8 byte&0x70 0x10 SERPENT crypt,
7237
+ >>8 byte&0x70 0x20 TWOFISH crypt,
7238
+ >>8 byte&0x70 0x30 CAST-256 crypt,
7239
+ >>8 byte&0x70 0x40 SAFER+ crypt,
7240
+ >>8 byte&0x70 0x50 LOKI97 crypt,
7241
+ >>8 byte&0x70 0x60 3DES crypt,
7242
+ >>8 byte&0x70 0x70 RIJNDAEL-256 crypt,
7243
+ >>8 byte&0x08 0x00 SHA1 hash,
7244
+ >>8 byte&0x08 0x08 RIPEMD-160 hash,
7245
+ >>8 byte&0x04 0x00 ZLib
7246
+ >>8 byte&0x04 0x04 BZip2
7247
+ >>8 byte&0x03 0x00 lvl.0
7248
+ >>8 byte&0x03 0x01 lvl.3
7249
+ >>8 byte&0x03 0x02 lvl.6
7250
+ >>8 byte&0x03 0x03 lvl.9
7251
+ #file format >3
7252
+ >3 string >3 v.%.1s (unknown details)
7253
+
7254
+ #------------------------------------------------------------------------------
7255
+ # hitach-sh: file(1) magic for Hitachi Super-H
7256
+ #
7257
+ # Super-H COFF
7258
+ #
7259
+ 0 beshort 0x0500 Hitachi SH big-endian COFF
7260
+ >18 beshort&0x0002 =0x0000 object
7261
+ >18 beshort&0x0002 =0x0002 executable
7262
+ >18 beshort&0x0008 =0x0008 \b, stripped
7263
+ >18 beshort&0x0008 =0x0000 \b, not stripped
7264
+ #
7265
+ 0 leshort 0x0550 Hitachi SH little-endian COFF
7266
+ >18 leshort&0x0002 =0x0000 object
7267
+ >18 leshort&0x0002 =0x0002 executable
7268
+ >18 leshort&0x0008 =0x0008 \b, stripped
7269
+ >18 leshort&0x0008 =0x0000 \b, not stripped
7270
+
7271
+ #------------------------------------------------------------------------------
7272
+ # hp: file(1) magic for Hewlett Packard machines (see also "printer")
7273
+ #
7274
+ # XXX - somebody should figure out whether any byte order needs to be
7275
+ # applied to the "TML" stuff; I'm assuming the Apollo stuff is
7276
+ # big-endian as it was mostly 68K-based.
7277
+ #
7278
+ # I think the 500 series was the old stack-based machines, running a
7279
+ # UNIX environment atop the "SUN kernel"; dunno whether it was
7280
+ # big-endian or little-endian.
7281
+ #
7282
+ # Daniel Quinlan (quinlan@yggdrasil.com): hp200 machines are 68010 based;
7283
+ # hp300 are 68020+68881 based; hp400 are also 68k. The following basic
7284
+ # HP magic is useful for reference, but using "long" magic is a better
7285
+ # practice in order to avoid collisions.
7286
+ #
7287
+ # Guy Harris (guy@netapp.com): some additions to this list came from
7288
+ # HP-UX 10.0's "/usr/include/sys/unistd.h" (68030, 68040, PA-RISC 1.1,
7289
+ # 1.2, and 2.0). The 1.2 and 2.0 stuff isn't in the HP-UX 10.0
7290
+ # "/etc/magic", though, except for the "archive file relocatable library"
7291
+ # stuff, and the 68030 and 68040 stuff isn't there at all - are they not
7292
+ # used in executables, or have they just not yet updated "/etc/magic"
7293
+ # completely?
7294
+ #
7295
+ # 0 beshort 200 hp200 (68010) BSD binary
7296
+ # 0 beshort 300 hp300 (68020+68881) BSD binary
7297
+ # 0 beshort 0x20c hp200/300 HP-UX binary
7298
+ # 0 beshort 0x20d hp400 (68030) HP-UX binary
7299
+ # 0 beshort 0x20e hp400 (68040?) HP-UX binary
7300
+ # 0 beshort 0x20b PA-RISC1.0 HP-UX binary
7301
+ # 0 beshort 0x210 PA-RISC1.1 HP-UX binary
7302
+ # 0 beshort 0x211 PA-RISC1.2 HP-UX binary
7303
+ # 0 beshort 0x214 PA-RISC2.0 HP-UX binary
7304
+
7305
+ #
7306
+ # The "misc" stuff needs a byte order; the archives look suspiciously
7307
+ # like the old 177545 archives (0xff65 = 0177545).
7308
+ #
7309
+ #### Old Apollo stuff
7310
+ 0 beshort 0627 Apollo m68k COFF executable
7311
+ >18 beshort ^040000 not stripped
7312
+ >22 beshort >0 - version %ld
7313
+ 0 beshort 0624 apollo a88k COFF executable
7314
+ >18 beshort ^040000 not stripped
7315
+ >22 beshort >0 - version %ld
7316
+ 0 long 01203604016 TML 0123 byte-order format
7317
+ 0 long 01702407010 TML 1032 byte-order format
7318
+ 0 long 01003405017 TML 2301 byte-order format
7319
+ 0 long 01602007412 TML 3210 byte-order format
7320
+ #### PA-RISC 1.1
7321
+ 0 belong 0x02100106 PA-RISC1.1 relocatable object
7322
+ 0 belong 0x02100107 PA-RISC1.1 executable
7323
+ >168 belong &0x00000004 dynamically linked
7324
+ >(144) belong 0x054ef630 dynamically linked
7325
+ >96 belong >0 - not stripped
7326
+
7327
+ 0 belong 0x02100108 PA-RISC1.1 shared executable
7328
+ >168 belong&0x4 0x4 dynamically linked
7329
+ >(144) belong 0x054ef630 dynamically linked
7330
+ >96 belong >0 - not stripped
7331
+
7332
+ 0 belong 0x0210010b PA-RISC1.1 demand-load executable
7333
+ >168 belong&0x4 0x4 dynamically linked
7334
+ >(144) belong 0x054ef630 dynamically linked
7335
+ >96 belong >0 - not stripped
7336
+
7337
+ 0 belong 0x0210010e PA-RISC1.1 shared library
7338
+ >96 belong >0 - not stripped
7339
+
7340
+ 0 belong 0x0210010d PA-RISC1.1 dynamic load library
7341
+ >96 belong >0 - not stripped
7342
+
7343
+ #### PA-RISC 2.0
7344
+ 0 belong 0x02140106 PA-RISC2.0 relocatable object
7345
+
7346
+ 0 belong 0x02140107 PA-RISC2.0 executable
7347
+ >168 belong &0x00000004 dynamically linked
7348
+ >(144) belong 0x054ef630 dynamically linked
7349
+ >96 belong >0 - not stripped
7350
+
7351
+ 0 belong 0x02140108 PA-RISC2.0 shared executable
7352
+ >168 belong &0x00000004 dynamically linked
7353
+ >(144) belong 0x054ef630 dynamically linked
7354
+ >96 belong >0 - not stripped
7355
+
7356
+ 0 belong 0x0214010b PA-RISC2.0 demand-load executable
7357
+ >168 belong &0x00000004 dynamically linked
7358
+ >(144) belong 0x054ef630 dynamically linked
7359
+ >96 belong >0 - not stripped
7360
+
7361
+ 0 belong 0x0214010e PA-RISC2.0 shared library
7362
+ >96 belong >0 - not stripped
7363
+
7364
+ 0 belong 0x0214010d PA-RISC2.0 dynamic load library
7365
+ >96 belong >0 - not stripped
7366
+
7367
+ #### 800
7368
+ 0 belong 0x020b0106 PA-RISC1.0 relocatable object
7369
+
7370
+ 0 belong 0x020b0107 PA-RISC1.0 executable
7371
+ >168 belong&0x4 0x4 dynamically linked
7372
+ >(144) belong 0x054ef630 dynamically linked
7373
+ >96 belong >0 - not stripped
7374
+
7375
+ 0 belong 0x020b0108 PA-RISC1.0 shared executable
7376
+ >168 belong&0x4 0x4 dynamically linked
7377
+ >(144) belong 0x054ef630 dynamically linked
7378
+ >96 belong >0 - not stripped
7379
+
7380
+ 0 belong 0x020b010b PA-RISC1.0 demand-load executable
7381
+ >168 belong&0x4 0x4 dynamically linked
7382
+ >(144) belong 0x054ef630 dynamically linked
7383
+ >96 belong >0 - not stripped
7384
+
7385
+ 0 belong 0x020b010e PA-RISC1.0 shared library
7386
+ >96 belong >0 - not stripped
7387
+
7388
+ 0 belong 0x020b010d PA-RISC1.0 dynamic load library
7389
+ >96 belong >0 - not stripped
7390
+
7391
+ 0 belong 0x213c6172 archive file
7392
+ >68 belong 0x020b0619 - PA-RISC1.0 relocatable library
7393
+ >68 belong 0x02100619 - PA-RISC1.1 relocatable library
7394
+ >68 belong 0x02110619 - PA-RISC1.2 relocatable library
7395
+ >68 belong 0x02140619 - PA-RISC2.0 relocatable library
7396
+
7397
+ #### 500
7398
+ 0 long 0x02080106 HP s500 relocatable executable
7399
+ >16 long >0 - version %ld
7400
+
7401
+ 0 long 0x02080107 HP s500 executable
7402
+ >16 long >0 - version %ld
7403
+
7404
+ 0 long 0x02080108 HP s500 pure executable
7405
+ >16 long >0 - version %ld
7406
+
7407
+ #### 200
7408
+ 0 belong 0x020c0108 HP s200 pure executable
7409
+ >4 beshort >0 - version %ld
7410
+ >8 belong &0x80000000 save fp regs
7411
+ >8 belong &0x40000000 dynamically linked
7412
+ >8 belong &0x20000000 debuggable
7413
+ >36 belong >0 not stripped
7414
+
7415
+ 0 belong 0x020c0107 HP s200 executable
7416
+ >4 beshort >0 - version %ld
7417
+ >8 belong &0x80000000 save fp regs
7418
+ >8 belong &0x40000000 dynamically linked
7419
+ >8 belong &0x20000000 debuggable
7420
+ >36 belong >0 not stripped
7421
+
7422
+ 0 belong 0x020c010b HP s200 demand-load executable
7423
+ >4 beshort >0 - version %ld
7424
+ >8 belong &0x80000000 save fp regs
7425
+ >8 belong &0x40000000 dynamically linked
7426
+ >8 belong &0x20000000 debuggable
7427
+ >36 belong >0 not stripped
7428
+
7429
+ 0 belong 0x020c0106 HP s200 relocatable executable
7430
+ >4 beshort >0 - version %ld
7431
+ >6 beshort >0 - highwater %d
7432
+ >8 belong &0x80000000 save fp regs
7433
+ >8 belong &0x20000000 debuggable
7434
+ >8 belong &0x10000000 PIC
7435
+
7436
+ 0 belong 0x020a0108 HP s200 (2.x release) pure executable
7437
+ >4 beshort >0 - version %ld
7438
+ >36 belong >0 not stripped
7439
+
7440
+ 0 belong 0x020a0107 HP s200 (2.x release) executable
7441
+ >4 beshort >0 - version %ld
7442
+ >36 belong >0 not stripped
7443
+
7444
+ 0 belong 0x020c010e HP s200 shared library
7445
+ >4 beshort >0 - version %ld
7446
+ >6 beshort >0 - highwater %d
7447
+ >36 belong >0 not stripped
7448
+
7449
+ 0 belong 0x020c010d HP s200 dynamic load library
7450
+ >4 beshort >0 - version %ld
7451
+ >6 beshort >0 - highwater %d
7452
+ >36 belong >0 not stripped
7453
+
7454
+ #### MISC
7455
+ 0 long 0x0000ff65 HP old archive
7456
+ 0 long 0x020aff65 HP s200 old archive
7457
+ 0 long 0x020cff65 HP s200 old archive
7458
+ 0 long 0x0208ff65 HP s500 old archive
7459
+
7460
+ 0 long 0x015821a6 HP core file
7461
+
7462
+ 0 long 0x4da7eee8 HP-WINDOWS font
7463
+ >8 byte >0 - version %ld
7464
+ 0 string Bitmapfile HP Bitmapfile
7465
+
7466
+ 0 string IMGfile CIS compimg HP Bitmapfile
7467
+ # XXX - see "lif"
7468
+ #0 short 0x8000 lif file
7469
+ 0 long 0x020c010c compiled Lisp
7470
+
7471
+ 0 string msgcat01 HP NLS message catalog,
7472
+ >8 long >0 %d messages
7473
+
7474
+ # Summary: HP-48/49 calculator
7475
+ # Created by: phk@data.fls.dk
7476
+ # Modified by (1): AMAKAWA Shuhei <sa264@cam.ac.uk>
7477
+ # Modified by (2): Samuel Thibault <samuel.thibault@ens-lyon.org> (HP49 support)
7478
+ 0 string HPHP HP
7479
+ >4 string 48 48 binary
7480
+ >4 string 49 49 binary
7481
+ >7 byte >64 - Rev %c
7482
+ >8 leshort 0x2911 (ADR)
7483
+ >8 leshort 0x2933 (REAL)
7484
+ >8 leshort 0x2955 (LREAL)
7485
+ >8 leshort 0x2977 (COMPLX)
7486
+ >8 leshort 0x299d (LCOMPLX)
7487
+ >8 leshort 0x29bf (CHAR)
7488
+ >8 leshort 0x29e8 (ARRAY)
7489
+ >8 leshort 0x2a0a (LNKARRAY)
7490
+ >8 leshort 0x2a2c (STRING)
7491
+ >8 leshort 0x2a4e (HXS)
7492
+ >8 leshort 0x2a74 (LIST)
7493
+ >8 leshort 0x2a96 (DIR)
7494
+ >8 leshort 0x2ab8 (ALG)
7495
+ >8 leshort 0x2ada (UNIT)
7496
+ >8 leshort 0x2afc (TAGGED)
7497
+ >8 leshort 0x2b1e (GROB)
7498
+ >8 leshort 0x2b40 (LIB)
7499
+ >8 leshort 0x2b62 (BACKUP)
7500
+ >8 leshort 0x2b88 (LIBDATA)
7501
+ >8 leshort 0x2d9d (PROG)
7502
+ >8 leshort 0x2dcc (CODE)
7503
+ >8 leshort 0x2e48 (GNAME)
7504
+ >8 leshort 0x2e6d (LNAME)
7505
+ >8 leshort 0x2e92 (XLIB)
7506
+
7507
+ 0 string %%HP: HP text
7508
+ >6 string T(0) - T(0)
7509
+ >6 string T(1) - T(1)
7510
+ >6 string T(2) - T(2)
7511
+ >6 string T(3) - T(3)
7512
+ >10 string A(D) A(D)
7513
+ >10 string A(R) A(R)
7514
+ >10 string A(G) A(G)
7515
+ >14 string F(.) F(.);
7516
+ >14 string F(,) F(,);
7517
+
7518
+
7519
+ # Summary: HP-38/39 calculator
7520
+ # Created by: Samuel Thibault <samuel.thibault@ens-lyon.org>
7521
+ 0 string HP3
7522
+ >3 string 8 HP 38
7523
+ >3 string 9 HP 39
7524
+ >4 string Bin binary
7525
+ >4 string Asc ASCII
7526
+ >7 string A (Directory List)
7527
+ >7 string B (Zaplet)
7528
+ >7 string C (Note)
7529
+ >7 string D (Program)
7530
+ >7 string E (Variable)
7531
+ >7 string F (List)
7532
+ >7 string G (Matrix)
7533
+ >7 string H (Library)
7534
+ >7 string I (Target List)
7535
+ >7 string J (ASCII Vector specification)
7536
+ >7 string K (wildcard)
7537
+
7538
+ # Summary: HP-38/39 calculator
7539
+ # Created by: Samuel Thibault <samuel.thibault@ens-lyon.org>
7540
+ 0 string HP3
7541
+ >3 string 8 HP 38
7542
+ >3 string 9 HP 39
7543
+ >4 string Bin binary
7544
+ >4 string Asc ASCII
7545
+ >7 string A (Directory List)
7546
+ >7 string B (Zaplet)
7547
+ >7 string C (Note)
7548
+ >7 string D (Program)
7549
+ >7 string E (Variable)
7550
+ >7 string F (List)
7551
+ >7 string G (Matrix)
7552
+ >7 string H (Library)
7553
+ >7 string I (Target List)
7554
+ >7 string J (ASCII Vector specification)
7555
+ >7 string K (wildcard)
7556
+
7557
+ # hpBSD magic numbers
7558
+ 0 beshort 200 hp200 (68010) BSD
7559
+ >2 beshort 0407 impure binary
7560
+ >2 beshort 0410 read-only binary
7561
+ >2 beshort 0413 demand paged binary
7562
+ 0 beshort 300 hp300 (68020+68881) BSD
7563
+ >2 beshort 0407 impure binary
7564
+ >2 beshort 0410 read-only binary
7565
+ >2 beshort 0413 demand paged binary
7566
+ #
7567
+ # From David Gero <dgero@nortelnetworks.com>
7568
+ # HP-UX 10.20 core file format from /usr/include/sys/core.h
7569
+ # Unfortunately, HP-UX uses corehead blocks without specifying the order
7570
+ # There are four we care about:
7571
+ # CORE_KERNEL, which starts with the string "HP-UX"
7572
+ # CORE_EXEC, which contains the name of the command
7573
+ # CORE_PROC, which contains the signal number that caused the core dump
7574
+ # CORE_FORMAT, which contains the version of the core file format (== 1)
7575
+ # The only observed order in real core files is KERNEL, EXEC, FORMAT, PROC
7576
+ # but we include all 6 variations of the order of the first 3, and
7577
+ # assume that PROC will always be last
7578
+ # Order 1: KERNEL, EXEC, FORMAT, PROC
7579
+ 0x10 string HP-UX
7580
+ >0 belong 2
7581
+ >>0xC belong 0x3C
7582
+ >>>0x4C belong 0x100
7583
+ >>>>0x58 belong 0x44
7584
+ >>>>>0xA0 belong 1
7585
+ >>>>>>0xAC belong 4
7586
+ >>>>>>>0xB0 belong 1
7587
+ >>>>>>>>0xB4 belong 4 core file
7588
+ >>>>>>>>>0x90 string >\0 from '%s'
7589
+ >>>>>>>>>0xC4 belong 3 - received SIGQUIT
7590
+ >>>>>>>>>0xC4 belong 4 - received SIGILL
7591
+ >>>>>>>>>0xC4 belong 5 - received SIGTRAP
7592
+ >>>>>>>>>0xC4 belong 6 - received SIGABRT
7593
+ >>>>>>>>>0xC4 belong 7 - received SIGEMT
7594
+ >>>>>>>>>0xC4 belong 8 - received SIGFPE
7595
+ >>>>>>>>>0xC4 belong 10 - received SIGBUS
7596
+ >>>>>>>>>0xC4 belong 11 - received SIGSEGV
7597
+ >>>>>>>>>0xC4 belong 12 - received SIGSYS
7598
+ >>>>>>>>>0xC4 belong 33 - received SIGXCPU
7599
+ >>>>>>>>>0xC4 belong 34 - received SIGXFSZ
7600
+ # Order 2: KERNEL, FORMAT, EXEC, PROC
7601
+ >>>0x4C belong 1
7602
+ >>>>0x58 belong 4
7603
+ >>>>>0x5C belong 1
7604
+ >>>>>>0x60 belong 0x100
7605
+ >>>>>>>0x6C belong 0x44
7606
+ >>>>>>>>0xB4 belong 4 core file
7607
+ >>>>>>>>>0xA4 string >\0 from '%s'
7608
+ >>>>>>>>>0xC4 belong 3 - received SIGQUIT
7609
+ >>>>>>>>>0xC4 belong 4 - received SIGILL
7610
+ >>>>>>>>>0xC4 belong 5 - received SIGTRAP
7611
+ >>>>>>>>>0xC4 belong 6 - received SIGABRT
7612
+ >>>>>>>>>0xC4 belong 7 - received SIGEMT
7613
+ >>>>>>>>>0xC4 belong 8 - received SIGFPE
7614
+ >>>>>>>>>0xC4 belong 10 - received SIGBUS
7615
+ >>>>>>>>>0xC4 belong 11 - received SIGSEGV
7616
+ >>>>>>>>>0xC4 belong 12 - received SIGSYS
7617
+ >>>>>>>>>0xC4 belong 33 - received SIGXCPU
7618
+ >>>>>>>>>0xC4 belong 34 - received SIGXFSZ
7619
+ # Order 3: FORMAT, KERNEL, EXEC, PROC
7620
+ 0x24 string HP-UX
7621
+ >0 belong 1
7622
+ >>0xC belong 4
7623
+ >>>0x10 belong 1
7624
+ >>>>0x14 belong 2
7625
+ >>>>>0x20 belong 0x3C
7626
+ >>>>>>0x60 belong 0x100
7627
+ >>>>>>>0x6C belong 0x44
7628
+ >>>>>>>>0xB4 belong 4 core file
7629
+ >>>>>>>>>0xA4 string >\0 from '%s'
7630
+ >>>>>>>>>0xC4 belong 3 - received SIGQUIT
7631
+ >>>>>>>>>0xC4 belong 4 - received SIGILL
7632
+ >>>>>>>>>0xC4 belong 5 - received SIGTRAP
7633
+ >>>>>>>>>0xC4 belong 6 - received SIGABRT
7634
+ >>>>>>>>>0xC4 belong 7 - received SIGEMT
7635
+ >>>>>>>>>0xC4 belong 8 - received SIGFPE
7636
+ >>>>>>>>>0xC4 belong 10 - received SIGBUS
7637
+ >>>>>>>>>0xC4 belong 11 - received SIGSEGV
7638
+ >>>>>>>>>0xC4 belong 12 - received SIGSYS
7639
+ >>>>>>>>>0xC4 belong 33 - received SIGXCPU
7640
+ >>>>>>>>>0xC4 belong 34 - received SIGXFSZ
7641
+ # Order 4: EXEC, KERNEL, FORMAT, PROC
7642
+ 0x64 string HP-UX
7643
+ >0 belong 0x100
7644
+ >>0xC belong 0x44
7645
+ >>>0x54 belong 2
7646
+ >>>>0x60 belong 0x3C
7647
+ >>>>>0xA0 belong 1
7648
+ >>>>>>0xAC belong 4
7649
+ >>>>>>>0xB0 belong 1
7650
+ >>>>>>>>0xB4 belong 4 core file
7651
+ >>>>>>>>>0x44 string >\0 from '%s'
7652
+ >>>>>>>>>0xC4 belong 3 - received SIGQUIT
7653
+ >>>>>>>>>0xC4 belong 4 - received SIGILL
7654
+ >>>>>>>>>0xC4 belong 5 - received SIGTRAP
7655
+ >>>>>>>>>0xC4 belong 6 - received SIGABRT
7656
+ >>>>>>>>>0xC4 belong 7 - received SIGEMT
7657
+ >>>>>>>>>0xC4 belong 8 - received SIGFPE
7658
+ >>>>>>>>>0xC4 belong 10 - received SIGBUS
7659
+ >>>>>>>>>0xC4 belong 11 - received SIGSEGV
7660
+ >>>>>>>>>0xC4 belong 12 - received SIGSYS
7661
+ >>>>>>>>>0xC4 belong 33 - received SIGXCPU
7662
+ >>>>>>>>>0xC4 belong 34 - received SIGXFSZ
7663
+ # Order 5: FORMAT, EXEC, KERNEL, PROC
7664
+ 0x78 string HP-UX
7665
+ >0 belong 1
7666
+ >>0xC belong 4
7667
+ >>>0x10 belong 1
7668
+ >>>>0x14 belong 0x100
7669
+ >>>>>0x20 belong 0x44
7670
+ >>>>>>0x68 belong 2
7671
+ >>>>>>>0x74 belong 0x3C
7672
+ >>>>>>>>0xB4 belong 4 core file
7673
+ >>>>>>>>>0x58 string >\0 from '%s'
7674
+ >>>>>>>>>0xC4 belong 3 - received SIGQUIT
7675
+ >>>>>>>>>0xC4 belong 4 - received SIGILL
7676
+ >>>>>>>>>0xC4 belong 5 - received SIGTRAP
7677
+ >>>>>>>>>0xC4 belong 6 - received SIGABRT
7678
+ >>>>>>>>>0xC4 belong 7 - received SIGEMT
7679
+ >>>>>>>>>0xC4 belong 8 - received SIGFPE
7680
+ >>>>>>>>>0xC4 belong 10 - received SIGBUS
7681
+ >>>>>>>>>0xC4 belong 11 - received SIGSEGV
7682
+ >>>>>>>>>0xC4 belong 12 - received SIGSYS
7683
+ >>>>>>>>>0xC4 belong 33 - received SIGXCPU
7684
+ >>>>>>>>>0xC4 belong 34 - received SIGXFSZ
7685
+ # Order 6: EXEC, FORMAT, KERNEL, PROC
7686
+ >0 belong 0x100
7687
+ >>0xC belong 0x44
7688
+ >>>0x54 belong 1
7689
+ >>>>0x60 belong 4
7690
+ >>>>>0x64 belong 1
7691
+ >>>>>>0x68 belong 2
7692
+ >>>>>>>0x74 belong 0x2C
7693
+ >>>>>>>>0xB4 belong 4 core file
7694
+ >>>>>>>>>0x44 string >\0 from '%s'
7695
+ >>>>>>>>>0xC4 belong 3 - received SIGQUIT
7696
+ >>>>>>>>>0xC4 belong 4 - received SIGILL
7697
+ >>>>>>>>>0xC4 belong 5 - received SIGTRAP
7698
+ >>>>>>>>>0xC4 belong 6 - received SIGABRT
7699
+ >>>>>>>>>0xC4 belong 7 - received SIGEMT
7700
+ >>>>>>>>>0xC4 belong 8 - received SIGFPE
7701
+ >>>>>>>>>0xC4 belong 10 - received SIGBUS
7702
+ >>>>>>>>>0xC4 belong 11 - received SIGSEGV
7703
+ >>>>>>>>>0xC4 belong 12 - received SIGSYS
7704
+ >>>>>>>>>0xC4 belong 33 - received SIGXCPU
7705
+ >>>>>>>>>0xC4 belong 34 - received SIGXFSZ
7706
+
7707
+
7708
+
7709
+ #------------------------------------------------------------------------------
7710
+ # human68k: file(1) magic for Human68k (X680x0 DOS) binary formats
7711
+ # Magic too short!
7712
+ #0 string HU Human68k
7713
+ #>68 string LZX LZX compressed
7714
+ #>>72 string >\0 (version %s)
7715
+ #>(8.L+74) string LZX LZX compressed
7716
+ #>>(8.L+78) string >\0 (version %s)
7717
+ #>60 belong >0 binded
7718
+ #>(8.L+66) string #HUPAIR hupair
7719
+ #>0 string HU X executable
7720
+ #>(8.L+74) string #LIBCV1 - linked PD LIBC ver 1
7721
+ #>4 belong >0 - base address 0x%x
7722
+ #>28 belong >0 not stripped
7723
+ #>32 belong >0 with debug information
7724
+ #0 beshort 0x601a Human68k Z executable
7725
+ #0 beshort 0x6000 Human68k object file
7726
+ #0 belong 0xd1000000 Human68k ar binary archive
7727
+ #0 belong 0xd1010000 Human68k ar ascii archive
7728
+ #0 beshort 0x0068 Human68k lib archive
7729
+ #4 string LZX Human68k LZX compressed
7730
+ #>8 string >\0 (version %s)
7731
+ #>4 string LZX R executable
7732
+ #2 string #HUPAIR Human68k hupair R executable
7733
+
7734
+ #------------------------------------------------------------------------------
7735
+ # ibm370: file(1) magic for IBM 370 and compatibles.
7736
+ #
7737
+ # "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable".
7738
+ # What the heck *is* "USS/370"?
7739
+ # AIX 4.1's "/etc/magic" has
7740
+ #
7741
+ # 0 short 0535 370 sysV executable
7742
+ # >12 long >0 not stripped
7743
+ # >22 short >0 - version %d
7744
+ # >30 long >0 - 5.2 format
7745
+ # 0 short 0530 370 sysV pure executable
7746
+ # >12 long >0 not stripped
7747
+ # >22 short >0 - version %d
7748
+ # >30 long >0 - 5.2 format
7749
+ #
7750
+ # instead of the "USS/370" versions of the same magic numbers.
7751
+ #
7752
+ 0 beshort 0537 370 XA sysV executable
7753
+ >12 belong >0 not stripped
7754
+ >22 beshort >0 - version %d
7755
+ >30 belong >0 - 5.2 format
7756
+ 0 beshort 0532 370 XA sysV pure executable
7757
+ >12 belong >0 not stripped
7758
+ >22 beshort >0 - version %d
7759
+ >30 belong >0 - 5.2 format
7760
+ 0 beshort 054001 370 sysV pure executable
7761
+ >12 belong >0 not stripped
7762
+ 0 beshort 055001 370 XA sysV pure executable
7763
+ >12 belong >0 not stripped
7764
+ 0 beshort 056401 370 sysV executable
7765
+ >12 belong >0 not stripped
7766
+ 0 beshort 057401 370 XA sysV executable
7767
+ >12 belong >0 not stripped
7768
+ 0 beshort 0531 SVR2 executable (Amdahl-UTS)
7769
+ >12 belong >0 not stripped
7770
+ >24 belong >0 - version %ld
7771
+ 0 beshort 0534 SVR2 pure executable (Amdahl-UTS)
7772
+ >12 belong >0 not stripped
7773
+ >24 belong >0 - version %ld
7774
+ 0 beshort 0530 SVR2 pure executable (USS/370)
7775
+ >12 belong >0 not stripped
7776
+ >24 belong >0 - version %ld
7777
+ 0 beshort 0535 SVR2 executable (USS/370)
7778
+ >12 belong >0 not stripped
7779
+ >24 belong >0 - version %ld
7780
+
7781
+ #------------------------------------------------------------------------------
7782
+ # ibm6000: file(1) magic for RS/6000 and the RT PC.
7783
+ #
7784
+ 0 beshort 0x01df executable (RISC System/6000 V3.1) or obj module
7785
+ >12 belong >0 not stripped
7786
+ # Breaks sun4 statically linked execs.
7787
+ #0 beshort 0x0103 executable (RT Version 2) or obj module
7788
+ #>2 byte 0x50 pure
7789
+ #>28 belong >0 not stripped
7790
+ #>6 beshort >0 - version %ld
7791
+ 0 beshort 0x0104 shared library
7792
+ 0 beshort 0x0105 ctab data
7793
+ 0 beshort 0xfe04 structured file
7794
+ 0 string 0xabcdef AIX message catalog
7795
+ 0 belong 0x000001f9 AIX compiled message catalog
7796
+ 0 string \<aiaff> archive
7797
+ 0 string \<bigaf> archive (big format)
7798
+
7799
+
7800
+ #------------------------------------------------------------------------------
7801
+ # iff: file(1) magic for Interchange File Format (see also "audio" & "images")
7802
+ #
7803
+ # Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic
7804
+ # Arts for file interchange. It has also been used by Apple, SGI, and
7805
+ # especially Commodore-Amiga.
7806
+ #
7807
+ # IFF files begin with an 8 byte FORM header, followed by a 4 character
7808
+ # FORM type, which is followed by the first chunk in the FORM.
7809
+
7810
+ 0 string FORM IFF data
7811
+ #>4 belong x \b, FORM is %d bytes long
7812
+ # audio formats
7813
+ >8 string AIFF \b, AIFF audio
7814
+ !:mime audio/x-aiff
7815
+ >8 string AIFC \b, AIFF-C compressed audio
7816
+ !:mime audio/x-aiff
7817
+ >8 string 8SVX \b, 8SVX 8-bit sampled sound voice
7818
+ !:mime audio/x-aiff
7819
+ >8 string 16SV \b, 16SV 16-bit sampled sound voice
7820
+ >8 string SAMP \b, SAMP sampled audio
7821
+ >8 string MAUD \b, MAUD MacroSystem audio
7822
+ >8 string SMUS \b, SMUS simple music
7823
+ >8 string CMUS \b, CMUS complex music
7824
+ # image formats
7825
+ >8 string ILBMBMHD \b, ILBM interleaved image
7826
+ >>20 beshort x \b, %d x
7827
+ >>22 beshort x %d
7828
+ >8 string RGBN \b, RGBN 12-bit RGB image
7829
+ >8 string RGB8 \b, RGB8 24-bit RGB image
7830
+ >8 string DEEP \b, DEEP TVPaint/XiPaint image
7831
+ >8 string DR2D \b, DR2D 2-D object
7832
+ >8 string TDDD \b, TDDD 3-D rendering
7833
+ >8 string LWOB \b, LWOB 3-D object
7834
+ >8 string LWO2 \b, LWO2 3-D object, v2
7835
+ >8 string LWLO \b, LWLO 3-D layered object
7836
+ >8 string REAL \b, REAL Real3D rendering
7837
+ >8 string MC4D \b, MC4D MaxonCinema4D rendering
7838
+ >8 string ANIM \b, ANIM animation
7839
+ >8 string YAFA \b, YAFA animation
7840
+ >8 string SSA\ \b, SSA super smooth animation
7841
+ >8 string ACBM \b, ACBM continuous image
7842
+ >8 string FAXX \b, FAXX fax image
7843
+ # other formats
7844
+ >8 string FTXT \b, FTXT formatted text
7845
+ >8 string CTLG \b, CTLG message catalog
7846
+ >8 string PREF \b, PREF preferences
7847
+ >8 string DTYP \b, DTYP datatype description
7848
+ >8 string PTCH \b, PTCH binary patch
7849
+ >8 string AMFF \b, AMFF AmigaMetaFile format
7850
+ >8 string WZRD \b, WZRD StormWIZARD resource
7851
+ >8 string DOC\ \b, DOC desktop publishing document
7852
+
7853
+ # These go at the end of the iff rules
7854
+ #
7855
+ # I don't see why these might collide with anything else.
7856
+ #
7857
+ # Interactive Fiction related formats
7858
+ #
7859
+ >8 string IFRS \b, Blorb Interactive Fiction
7860
+ >>24 string Exec with executable chunk
7861
+ >8 string IFZS \b, Z-machine or Glulx saved game file (Quetzal)
7862
+ #------------------------------------------------------------------------------
7863
+ # images: file(1) magic for image formats (see also "iff", and "c-lang" for
7864
+ # XPM bitmaps)
7865
+ #
7866
+ # originally from jef@helios.ee.lbl.gov (Jef Poskanzer),
7867
+ # additions by janl@ifi.uio.no as well as others. Jan also suggested
7868
+ # merging several one- and two-line files into here.
7869
+ #
7870
+ # little magic: PCX (first byte is 0x0a)
7871
+
7872
+ # Targa - matches `povray', `ppmtotga' and `xv' outputs
7873
+ # by Philippe De Muyter <phdm@macqel.be>
7874
+ # at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11
7875
+ # at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise
7876
+ # at 3, leshort Index is 0 for povray, ppmtotga and xv outputs
7877
+ # `xv' recognizes only a subset of the following (RGB with pixelsize = 24)
7878
+ # `tgatoppm' recognizes a superset (Index may be anything)
7879
+ 1 belong&0xfff7ffff 0x01010000 Targa image data - Map
7880
+ >2 byte&8 8 - RLE
7881
+ >12 leshort >0 %hd x
7882
+ >14 leshort >0 %hd
7883
+ 1 belong&0xfff7ffff 0x00020000 Targa image data - RGB
7884
+ >2 byte&8 8 - RLE
7885
+ >12 leshort >0 %hd x
7886
+ >14 leshort >0 %hd
7887
+ 1 belong&0xfff7ffff 0x00030000 Targa image data - Mono
7888
+ >2 byte&8 8 - RLE
7889
+ >12 leshort >0 %hd x
7890
+ >14 leshort >0 %hd
7891
+
7892
+ # PBMPLUS images
7893
+ # The next byte following the magic is always whitespace.
7894
+ 0 search/1 P1 Netpbm PBM image text
7895
+ !:mime image/x-portable-bitmap
7896
+ 0 search/1 P2 Netpbm PGM image text
7897
+ !:mime image/x-portable-greymap
7898
+ 0 search/1 P3 Netpbm PPM image text
7899
+ !:mime image/x-portable-pixmap
7900
+ 0 string P4 Netpbm PBM "rawbits" image data
7901
+ !:mime image/x-portable-bitmap
7902
+ 0 string P5 Netpbm PGM "rawbits" image data
7903
+ !:mime image/x-portable-greymap
7904
+ 0 string P6 Netpbm PPM "rawbits" image data
7905
+ !:mime image/x-portable-pixmap
7906
+ 0 string P7 Netpbm PAM image file
7907
+ !:mime image/x-portable-pixmap
7908
+
7909
+ # From: bryanh@giraffe-data.com (Bryan Henderson)
7910
+ 0 string \117\072 Solitaire Image Recorder format
7911
+ >4 string \013 MGI Type 11
7912
+ >4 string \021 MGI Type 17
7913
+ 0 string .MDA MicroDesign data
7914
+ >21 byte 48 version 2
7915
+ >21 byte 51 version 3
7916
+ 0 string .MDP MicroDesign page data
7917
+ >21 byte 48 version 2
7918
+ >21 byte 51 version 3
7919
+
7920
+ # NIFF (Navy Interchange File Format, a modification of TIFF) images
7921
+ # [GRR: this *must* go before TIFF]
7922
+ 0 string IIN1 NIFF image data
7923
+ !:mime image/x-niff
7924
+
7925
+ # Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com)
7926
+ # The second word of TIFF files is the TIFF version number, 42, which has
7927
+ # never changed. The TIFF specification recommends testing for it.
7928
+ 0 string MM\x00\x2a TIFF image data, big-endian
7929
+ !:mime image/tiff
7930
+ 0 string II\x2a\x00 TIFF image data, little-endian
7931
+ !:mime image/tiff
7932
+
7933
+ # PNG [Portable Network Graphics, or "PNG's Not GIF"] images
7934
+ # (Greg Roelofs, newt@uchicago.edu)
7935
+ # (Albert Cahalan, acahalan@cs.uml.edu)
7936
+ #
7937
+ # 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ...
7938
+ #
7939
+ 0 string \x89PNG\x0d\x0a\x1a\x0a PNG image
7940
+ !:mime image/png
7941
+ >16 belong x \b, %ld x
7942
+ >20 belong x %ld,
7943
+ >24 byte x %d-bit
7944
+ >25 byte 0 grayscale,
7945
+ >25 byte 2 \b/color RGB,
7946
+ >25 byte 3 colormap,
7947
+ >25 byte 4 gray+alpha,
7948
+ >25 byte 6 \b/color RGBA,
7949
+ #>26 byte 0 deflate/32K,
7950
+ >28 byte 0 non-interlaced
7951
+ >28 byte 1 interlaced
7952
+
7953
+ # possible GIF replacements; none yet released!
7954
+ # (Greg Roelofs, newt@uchicago.edu)
7955
+ #
7956
+ # GRR 950115: this was mine ("Zip GIF"):
7957
+ 0 string GIF94z ZIF image (GIF+deflate alpha)
7958
+ !:mime image/x-unknown
7959
+ #
7960
+ # GRR 950115: this is Jeremy Wohl's Free Graphics Format (better):
7961
+ #
7962
+ 0 string FGF95a FGF image (GIF+deflate beta)
7963
+ !:mime image/x-unknown
7964
+ #
7965
+ # GRR 950115: this is Thomas Boutell's Portable Bitmap Format proposal
7966
+ # (best; not yet implemented):
7967
+ #
7968
+ 0 string PBF PBF image (deflate compression)
7969
+ !:mime image/x-unknown
7970
+
7971
+ # GIF
7972
+ 0 string GIF8 GIF image data
7973
+ !:mime image/gif
7974
+ !:apple 8BIMGIFf
7975
+ >4 string 7a \b, version 8%s,
7976
+ >4 string 9a \b, version 8%s,
7977
+ >6 leshort >0 %hd x
7978
+ >8 leshort >0 %hd
7979
+ #>10 byte &0x80 color mapped,
7980
+ #>10 byte&0x07 =0x00 2 colors
7981
+ #>10 byte&0x07 =0x01 4 colors
7982
+ #>10 byte&0x07 =0x02 8 colors
7983
+ #>10 byte&0x07 =0x03 16 colors
7984
+ #>10 byte&0x07 =0x04 32 colors
7985
+ #>10 byte&0x07 =0x05 64 colors
7986
+ #>10 byte&0x07 =0x06 128 colors
7987
+ #>10 byte&0x07 =0x07 256 colors
7988
+
7989
+ # ITC (CMU WM) raster files. It is essentially a byte-reversed Sun raster,
7990
+ # 1 plane, no encoding.
7991
+ 0 string \361\0\100\273 CMU window manager raster image data
7992
+ >4 lelong >0 %d x
7993
+ >8 lelong >0 %d,
7994
+ >12 lelong >0 %d-bit
7995
+
7996
+ # Magick Image File Format
7997
+ 0 string id=ImageMagick MIFF image data
7998
+
7999
+ # Artisan
8000
+ 0 long 1123028772 Artisan image data
8001
+ >4 long 1 \b, rectangular 24-bit
8002
+ >4 long 2 \b, rectangular 8-bit with colormap
8003
+ >4 long 3 \b, rectangular 32-bit (24-bit with matte)
8004
+
8005
+ # FIG (Facility for Interactive Generation of figures), an object-based format
8006
+ 0 search/1 #FIG FIG image text
8007
+ >5 string x \b, version %.3s
8008
+
8009
+ # PHIGS
8010
+ 0 string ARF_BEGARF PHIGS clear text archive
8011
+ 0 string @(#)SunPHIGS SunPHIGS
8012
+ # version number follows, in the form m.n
8013
+ >40 string SunBin binary
8014
+ >32 string archive archive
8015
+
8016
+ # GKS (Graphics Kernel System)
8017
+ 0 string GKSM GKS Metafile
8018
+ >24 string SunGKS \b, SunGKS
8019
+
8020
+ # CGM image files
8021
+ 0 string BEGMF clear text Computer Graphics Metafile
8022
+
8023
+ # MGR bitmaps (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de)
8024
+ 0 string yz MGR bitmap, modern format, 8-bit aligned
8025
+ 0 string zz MGR bitmap, old format, 1-bit deep, 16-bit aligned
8026
+ 0 string xz MGR bitmap, old format, 1-bit deep, 32-bit aligned
8027
+ 0 string yx MGR bitmap, modern format, squeezed
8028
+
8029
+ # Fuzzy Bitmap (FBM) images
8030
+ 0 string %bitmap\0 FBM image data
8031
+ >30 long 0x31 \b, mono
8032
+ >30 long 0x33 \b, color
8033
+
8034
+ # facsimile data
8035
+ 1 string PC\ Research,\ Inc group 3 fax data
8036
+ >29 byte 0 \b, normal resolution (204x98 DPI)
8037
+ >29 byte 1 \b, fine resolution (204x196 DPI)
8038
+ # From: Herbert Rosmanith <herp@wildsau.idv.uni.linz.at>
8039
+ 0 string Sfff structured fax file
8040
+
8041
+
8042
+ # PC bitmaps (OS/2, Windows BMP files) (Greg Roelofs, newt@uchicago.edu)
8043
+ 0 string BM
8044
+ >14 leshort 12 PC bitmap, OS/2 1.x format
8045
+ !:mime image/x-ms-bmp
8046
+ >>18 leshort x \b, %d x
8047
+ >>20 leshort x %d
8048
+ >14 leshort 64 PC bitmap, OS/2 2.x format
8049
+ !:mime image/x-ms-bmp
8050
+ >>18 leshort x \b, %d x
8051
+ >>20 leshort x %d
8052
+ >14 leshort 40 PC bitmap, Windows 3.x format
8053
+ !:mime image/x-ms-bmp
8054
+ >>18 lelong x \b, %d x
8055
+ >>22 lelong x %d x
8056
+ >>28 leshort x %d
8057
+ >14 leshort 128 PC bitmap, Windows NT/2000 format
8058
+ !:mime image/x-ms-bmp
8059
+ >>18 lelong x \b, %d x
8060
+ >>22 lelong x %d x
8061
+ >>28 leshort x %d
8062
+ # Too simple - MPi
8063
+ #0 string IC PC icon data
8064
+ #0 string PI PC pointer image data
8065
+ #0 string CI PC color icon data
8066
+ #0 string CP PC color pointer image data
8067
+ # Conflicts with other entries [BABYL]
8068
+ #0 string BA PC bitmap array data
8069
+
8070
+ # XPM icons (Greg Roelofs, newt@uchicago.edu)
8071
+ # note possible collision with C/REXX entry in c-lang; currently commented out
8072
+ 0 search/1 /*\ XPM\ */ X pixmap image text
8073
+
8074
+ # Utah Raster Toolkit RLE images (janl@ifi.uio.no)
8075
+ 0 leshort 0xcc52 RLE image data,
8076
+ >6 leshort x %d x
8077
+ >8 leshort x %d
8078
+ >2 leshort >0 \b, lower left corner: %d
8079
+ >4 leshort >0 \b, lower right corner: %d
8080
+ >10 byte&0x1 =0x1 \b, clear first
8081
+ >10 byte&0x2 =0x2 \b, no background
8082
+ >10 byte&0x4 =0x4 \b, alpha channel
8083
+ >10 byte&0x8 =0x8 \b, comment
8084
+ >11 byte >0 \b, %d color channels
8085
+ >12 byte >0 \b, %d bits per pixel
8086
+ >13 byte >0 \b, %d color map channels
8087
+
8088
+ # image file format (Robert Potter, potter@cs.rochester.edu)
8089
+ 0 string Imagefile\ version- iff image data
8090
+ # this adds the whole header (inc. version number), informative but longish
8091
+ >10 string >\0 %s
8092
+
8093
+ # Sun raster images, from Daniel Quinlan (quinlan@yggdrasil.com)
8094
+ 0 belong 0x59a66a95 Sun raster image data
8095
+ >4 belong >0 \b, %d x
8096
+ >8 belong >0 %d,
8097
+ >12 belong >0 %d-bit,
8098
+ #>16 belong >0 %d bytes long,
8099
+ >20 belong 0 old format,
8100
+ #>20 belong 1 standard,
8101
+ >20 belong 2 compressed,
8102
+ >20 belong 3 RGB,
8103
+ >20 belong 4 TIFF,
8104
+ >20 belong 5 IFF,
8105
+ >20 belong 0xffff reserved for testing,
8106
+ >24 belong 0 no colormap
8107
+ >24 belong 1 RGB colormap
8108
+ >24 belong 2 raw colormap
8109
+ #>28 belong >0 colormap is %d bytes long
8110
+
8111
+ # SGI image file format, from Daniel Quinlan (quinlan@yggdrasil.com)
8112
+ #
8113
+ # See
8114
+ # http://reality.sgi.com/grafica/sgiimage.html
8115
+ #
8116
+ 0 beshort 474 SGI image data
8117
+ #>2 byte 0 \b, verbatim
8118
+ >2 byte 1 \b, RLE
8119
+ #>3 byte 1 \b, normal precision
8120
+ >3 byte 2 \b, high precision
8121
+ >4 beshort x \b, %d-D
8122
+ >6 beshort x \b, %d x
8123
+ >8 beshort x %d
8124
+ >10 beshort x \b, %d channel
8125
+ >10 beshort !1 \bs
8126
+ >80 string >0 \b, "%s"
8127
+
8128
+ 0 string IT01 FIT image data
8129
+ >4 belong x \b, %d x
8130
+ >8 belong x %d x
8131
+ >12 belong x %d
8132
+ #
8133
+ 0 string IT02 FIT image data
8134
+ >4 belong x \b, %d x
8135
+ >8 belong x %d x
8136
+ >12 belong x %d
8137
+ #
8138
+ 2048 string PCD_IPI Kodak Photo CD image pack file
8139
+ >0xe02 byte&0x03 0x00 , landscape mode
8140
+ >0xe02 byte&0x03 0x01 , portrait mode
8141
+ >0xe02 byte&0x03 0x02 , landscape mode
8142
+ >0xe02 byte&0x03 0x03 , portrait mode
8143
+ 0 string PCD_OPA Kodak Photo CD overview pack file
8144
+
8145
+ # FITS format. Jeff Uphoff <juphoff@tarsier.cv.nrao.edu>
8146
+ # FITS is the Flexible Image Transport System, the de facto standard for
8147
+ # data and image transfer, storage, etc., for the astronomical community.
8148
+ # (FITS floating point formats are big-endian.)
8149
+ 0 string SIMPLE\ \ = FITS image data
8150
+ >109 string 8 \b, 8-bit, character or unsigned binary integer
8151
+ >108 string 16 \b, 16-bit, two's complement binary integer
8152
+ >107 string \ 32 \b, 32-bit, two's complement binary integer
8153
+ >107 string -32 \b, 32-bit, floating point, single precision
8154
+ >107 string -64 \b, 64-bit, floating point, double precision
8155
+
8156
+ # other images
8157
+ 0 string This\ is\ a\ BitMap\ file Lisp Machine bit-array-file
8158
+
8159
+ # From SunOS 5.5.1 "/etc/magic" - appeared right before Sun raster image
8160
+ # stuff.
8161
+ #
8162
+ 0 beshort 0x1010 PEX Binary Archive
8163
+
8164
+ # DICOM medical imaging data
8165
+ 128 string DICM DICOM medical imaging data
8166
+ !:mime application/dicom
8167
+
8168
+ # XWD - X Window Dump file.
8169
+ # As described in /usr/X11R6/include/X11/XWDFile.h
8170
+ # used by the xwd program.
8171
+ # Bradford Castalia, idaeim, 1/01
8172
+ # updated by Adam Buchbinder, 2/09
8173
+ # The following assumes version 7 of the format; the first long is the length
8174
+ # of the header, which is at least 25 4-byte longs, and the one at offset 8
8175
+ # is a constant which is always either 1 or 2. Offset 12 is the pixmap depth,
8176
+ # which is a maximum of 32.
8177
+ 0 belong >100
8178
+ >8 belong <3
8179
+ >>12 belong <33
8180
+ >>>4 belong 7 XWD X Window Dump image data
8181
+ !:mime image/x-xwindowdump
8182
+ >>>>100 string >\0 \b, "%s"
8183
+ >>>>16 belong x \b, %dx
8184
+ >>>>20 belong x \b%dx
8185
+ >>>>12 belong x \b%d
8186
+
8187
+ # PDS - Planetary Data System
8188
+ # These files use Parameter Value Language in the header section.
8189
+ # Unfortunately, there is no certain magic, but the following
8190
+ # strings have been found to be most likely.
8191
+ 0 string NJPL1I00 PDS (JPL) image data
8192
+ 2 string NJPL1I PDS (JPL) image data
8193
+ 0 string CCSD3ZF PDS (CCSD) image data
8194
+ 2 string CCSD3Z PDS (CCSD) image data
8195
+ 0 string PDS_ PDS image data
8196
+ 0 string LBLSIZE= PDS (VICAR) image data
8197
+
8198
+ # pM8x: ATARI STAD compressed bitmap format
8199
+ #
8200
+ # from Oskar Schirmer <schirmer@scara.com> Feb 2, 2001
8201
+ # p M 8 5/6 xx yy zz data...
8202
+ # Atari ST STAD bitmap is always 640x400, bytewise runlength compressed.
8203
+ # bytes either run horizontally (pM85) or vertically (pM86). yy is the
8204
+ # most frequent byte, xx and zz are runlength escape codes, where xx is
8205
+ # used for runs of yy.
8206
+ #
8207
+ 0 string pM85 Atari ST STAD bitmap image data (hor)
8208
+ >5 byte 0x00 (white background)
8209
+ >5 byte 0xFF (black background)
8210
+ 0 string pM86 Atari ST STAD bitmap image data (vert)
8211
+ >5 byte 0x00 (white background)
8212
+ >5 byte 0xFF (black background)
8213
+
8214
+ # Gürkan Sengün <gurkan@linuks.mine.nu>, www.linuks.mine.nu
8215
+ # http://www.atarimax.com/jindroush.atari.org/afmtatr.html
8216
+ 0 leshort 0x0296 Atari ATR image
8217
+
8218
+ # XXX:
8219
+ # This is bad magic 0x5249 == 'RI' conflicts with RIFF and other
8220
+ # magic.
8221
+ # SGI RICE image file <mpruett@sgi.com>
8222
+ #0 beshort 0x5249 RICE image
8223
+ #>2 beshort x v%d
8224
+ #>4 beshort x (%d x
8225
+ #>6 beshort x %d)
8226
+ #>8 beshort 0 8 bit
8227
+ #>8 beshort 1 10 bit
8228
+ #>8 beshort 2 12 bit
8229
+ #>8 beshort 3 13 bit
8230
+ #>10 beshort 0 4:2:2
8231
+ #>10 beshort 1 4:2:2:4
8232
+ #>10 beshort 2 4:4:4
8233
+ #>10 beshort 3 4:4:4:4
8234
+ #>12 beshort 1 RGB
8235
+ #>12 beshort 2 CCIR601
8236
+ #>12 beshort 3 RP175
8237
+ #>12 beshort 4 YUV
8238
+
8239
+ #------------------------------------------------------------------------------
8240
+ #
8241
+ # Marco Schmidt (marcoschmidt@users.sourceforge.net) -- an image file format
8242
+ # for the EPOC operating system, which is used with PDAs like those from Psion
8243
+ #
8244
+ # see http://huizen.dds.nl/~frodol/psiconv/html/Index.html for a description
8245
+ # of various EPOC file formats
8246
+
8247
+ 0 string \x37\x00\x00\x10\x42\x00\x00\x10\x00\x00\x00\x00\x39\x64\x39\x47 EPOC MBM image file
8248
+
8249
+ # PCX image files
8250
+ # From: Dan Fandrich <dan@coneharvesters.com>
8251
+ 0 beshort 0x0a00 PCX ver. 2.5 image data
8252
+ 0 beshort 0x0a02 PCX ver. 2.8 image data, with palette
8253
+ 0 beshort 0x0a03 PCX ver. 2.8 image data, without palette
8254
+ 0 beshort 0x0a04 PCX for Windows image data
8255
+ 0 beshort 0x0a05 PCX ver. 3.0 image data
8256
+ >4 leshort x bounding box [%hd,
8257
+ >6 leshort x %hd] -
8258
+ >8 leshort x [%hd,
8259
+ >10 leshort x %hd],
8260
+ >65 byte >1 %d planes each of
8261
+ >3 byte x %hhd-bit
8262
+ >68 byte 0 image,
8263
+ >68 byte 1 colour,
8264
+ >68 byte 2 grayscale,
8265
+ >68 byte >2 image,
8266
+ >68 byte <0 image,
8267
+ >12 leshort >0 %hd x
8268
+ >>14 leshort x %hd dpi,
8269
+ >2 byte 0 uncompressed
8270
+ >2 byte 1 RLE compressed
8271
+
8272
+ # Adobe Photoshop
8273
+ 0 string 8BPS Adobe Photoshop Image
8274
+ !:mime image/vnd.adobe.photoshop
8275
+
8276
+ # XV thumbnail indicator (ThMO)
8277
+ 0 string P7\ 332 XV thumbnail image data
8278
+
8279
+ # NITF is defined by United States MIL-STD-2500A
8280
+ 0 string NITF National Imagery Transmission Format
8281
+ >25 string >\0 dated %.14s
8282
+
8283
+ # GEM Image: Version 1, Headerlen 8 (Wolfram Kleff)
8284
+ 0 belong 0x00010008 GEM Image data
8285
+ >12 beshort x %d x
8286
+ >14 beshort x %d,
8287
+ >4 beshort x %d planes,
8288
+ >8 beshort x %d x
8289
+ >10 beshort x %d pixelsize
8290
+
8291
+ # GEM Metafile (Wolfram Kleff)
8292
+ 0 lelong 0x0018FFFF GEM Metafile data
8293
+ >4 leshort x version %d
8294
+
8295
+ #
8296
+ # SMJPEG. A custom Motion JPEG format used by Loki Entertainment
8297
+ # Software Torbjorn Andersson <d91tan@Update.UU.SE>.
8298
+ #
8299
+ 0 string \0\nSMJPEG SMJPEG
8300
+ >8 belong x %d.x data
8301
+ # According to the specification you could find any number of _TXT
8302
+ # headers here, but I can't think of any way of handling that. None of
8303
+ # the SMJPEG files I tried it on used this feature. Even if such a
8304
+ # file is encountered the output should still be reasonable.
8305
+ >16 string _SND \b,
8306
+ >>24 beshort >0 %d Hz
8307
+ >>26 byte 8 8-bit
8308
+ >>26 byte 16 16-bit
8309
+ >>28 string NONE uncompressed
8310
+ # >>28 string APCM ADPCM compressed
8311
+ >>27 byte 1 mono
8312
+ >>28 byte 2 stereo
8313
+ # Help! Isn't there any way to avoid writing this part twice?
8314
+ >>32 string _VID \b,
8315
+ # >>>48 string JFIF JPEG
8316
+ >>>40 belong >0 %d frames
8317
+ >>>44 beshort >0 (%d x
8318
+ >>>46 beshort >0 %d)
8319
+ >16 string _VID \b,
8320
+ # >>32 string JFIF JPEG
8321
+ >>24 belong >0 %d frames
8322
+ >>28 beshort >0 (%d x
8323
+ >>30 beshort >0 %d)
8324
+
8325
+ 0 string Paint\ Shop\ Pro\ Image\ File Paint Shop Pro Image File
8326
+
8327
+ # "thumbnail file" (icon)
8328
+ # descended from "xv", but in use by other applications as well (Wolfram Kleff)
8329
+ 0 string P7\ 332 XV "thumbnail file" (icon) data
8330
+
8331
+ # taken from fkiss: (<yav@mte.biglobe.ne.jp> ?)
8332
+ 0 string KiSS KISS/GS
8333
+ >4 byte 16 color
8334
+ >>5 byte x %d bit
8335
+ >>8 leshort x %d colors
8336
+ >>10 leshort x %d groups
8337
+ >4 byte 32 cell
8338
+ >>5 byte x %d bit
8339
+ >>8 leshort x %d x
8340
+ >>10 leshort x %d
8341
+ >>12 leshort x +%d
8342
+ >>14 leshort x +%d
8343
+
8344
+ # Webshots (www.webshots.com), by John Harrison
8345
+ 0 string C\253\221g\230\0\0\0 Webshots Desktop .wbz file
8346
+
8347
+ # Hercules DASD image files
8348
+ # From Jan Jaeger <jj@septa.nl>
8349
+ 0 string CKD_P370 Hercules CKD DASD image file
8350
+ >8 long x \b, %d heads per cylinder
8351
+ >12 long x \b, track size %d bytes
8352
+ >16 byte x \b, device type 33%2.2X
8353
+
8354
+ 0 string CKD_C370 Hercules compressed CKD DASD image file
8355
+ >8 long x \b, %d heads per cylinder
8356
+ >12 long x \b, track size %d bytes
8357
+ >16 byte x \b, device type 33%2.2X
8358
+
8359
+ 0 string CKD_S370 Hercules CKD DASD shadow file
8360
+ >8 long x \b, %d heads per cylinder
8361
+ >12 long x \b, track size %d bytes
8362
+ >16 byte x \b, device type 33%2.2X
8363
+
8364
+ # Squeak images and programs - etoffi@softhome.net
8365
+ 0 string \146\031\0\0 Squeak image data
8366
+ 0 search/1 'From\040Squeak Squeak program text
8367
+
8368
+ # partimage: file(1) magic for PartImage files (experimental, incomplete)
8369
+ # Author: Hans-Joachim Baader <hjb@pro-linux.de>
8370
+ 0 string PaRtImAgE-VoLuMe PartImage
8371
+ >0x0020 string 0.6.1 file version %s
8372
+ >>0x0060 lelong >-1 volume %ld
8373
+ #>>0x0064 8 byte identifier
8374
+ #>>0x007c reserved
8375
+ >>0x0200 string >\0 type %s
8376
+ >>0x1400 string >\0 device %s,
8377
+ >>0x1600 string >\0 original filename %s,
8378
+ # Some fields omitted
8379
+ >>0x2744 lelong 0 not compressed
8380
+ >>0x2744 lelong 1 gzip compressed
8381
+ >>0x2744 lelong 2 bzip2 compressed
8382
+ >>0x2744 lelong >2 compressed with unknown algorithm
8383
+ >0x0020 string >0.6.1 file version %s
8384
+ >0x0020 string <0.6.1 file version %s
8385
+
8386
+ # DCX is multi-page PCX, using a simple header of up to 1024
8387
+ # offsets for the respective PCX components.
8388
+ # From: Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>
8389
+ 0 lelong 987654321 DCX multi-page PCX image data
8390
+
8391
+ # Simon Walton <simonw@matteworld.com>
8392
+ # Kodak Cineon format for scanned negatives
8393
+ # http://www.kodak.com/US/en/motion/support/dlad/
8394
+ 0 lelong 0xd75f2a80 Cineon image data
8395
+ >200 belong >0 \b, %ld x
8396
+ >204 belong >0 %ld
8397
+
8398
+
8399
+ # Bio-Rad .PIC is an image format used by microscope control systems
8400
+ # and related image processing software used by biologists.
8401
+ # From: Vebjorn Ljosa <vebjorn@ljosa.com>
8402
+ 54 leshort 12345 Bio-Rad .PIC Image File
8403
+ >0 leshort >0 %hd x
8404
+ >2 leshort >0 %hd,
8405
+ >4 leshort =1 1 image in file
8406
+ >4 leshort >1 %hd images in file
8407
+
8408
+ # From Jan "Yenya" Kasprzak <kas@fi.muni.cz>
8409
+ # The description of *.mrw format can be found at
8410
+ # http://www.dalibor.cz/minolta/raw_file_format.htm
8411
+ 0 string \000MRM Minolta Dimage camera raw image data
8412
+
8413
+ # Summary: DjVu image / document
8414
+ # Extension: .djvu
8415
+ # Reference: http://djvu.org/docs/DjVu3Spec.djvu
8416
+ # Submitted by: Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
8417
+ # Modified by (1): Abel Cheung <abelcheung@gmail.com>
8418
+ 0 string AT&TFORM
8419
+ !:mime image/vnd.djvu
8420
+ >12 string DJVM DjVu multiple page document
8421
+ >12 string DJVU DjVu image or single page document
8422
+ >12 string DJVI DjVu shared document
8423
+ >12 string THUM DjVu page thumbnails
8424
+
8425
+
8426
+ # From Marc Espie
8427
+ 0 lelong 20000630 OpenEXR image data
8428
+
8429
+ # From: Tom Hilinski <tom.hilinski@comcast.net>
8430
+ # http://www.unidata.ucar.edu/packages/netcdf/
8431
+ 0 string CDF\001 NetCDF Data Format data
8432
+
8433
+ #-----------------------------------------------------------------------
8434
+ # Hierarchical Data Format, used to facilitate scientific data exchange
8435
+ # specifications at http://hdf.ncsa.uiuc.edu/
8436
+ 0 belong 0x0e031301 Hierarchical Data Format (version 4) data
8437
+ !:mime application/x-hdf
8438
+ 0 string \211HDF\r\n\032 Hierarchical Data Format (version 5) data
8439
+ !:mime application/x-hdf
8440
+
8441
+ # From: Tobias Burnus <burnus@net-b.de>
8442
+ # Xara (for a while: Corel Xara) is a graphic package, see
8443
+ # http://www.xara.com/ for Windows and as GPL application for Linux
8444
+ 0 string XARA\243\243 Xara graphics file
8445
+
8446
+ # http://www.cartesianinc.com/Tech/
8447
+ 0 string CPC\262 Cartesian Perceptual Compression image
8448
+ !:mime image/x-cpi
8449
+
8450
+ # From Albert Cahalan <acahalan@gmail.com>
8451
+ # puredigital used it for the CVS disposable camcorder
8452
+ #8 lelong 4 ZBM bitmap image data
8453
+ #>4 leshort x %u x
8454
+ #>6 leshort x %u
8455
+
8456
+ # From Albert Cahalan <acahalan@gmail.com>
8457
+ # uncompressed 5:6:5 HighColor image for OLPC XO firmware icons
8458
+ 0 string C565 OLPC firmware icon image data
8459
+ >4 leshort x %u x
8460
+ >6 leshort x %u
8461
+
8462
+ # Applied Images - Image files from Cytovision
8463
+ # Gustavo Junior Alves <gjalves@gjalves.com.br>
8464
+ 0 string \xce\xda\xde\xfa Cytovision Metaphases file
8465
+ 0 string \xed\xad\xef\xac Cytovision Karyotype file
8466
+ 0 string \x0b\x00\x03\x00 Cytovision FISH Probe file
8467
+ 0 string \xed\xfe\xda\xbe Cytovision FLEX file
8468
+ 0 string \xed\xab\xed\xfe Cytovision FLEX file
8469
+ 0 string \xad\xfd\xea\xad Cytovision RATS file
8470
+
8471
+ # Wavelet Scalar Quantization format used in gray-scale fingerprint images
8472
+ # From Tano M Fotang <mfotang@quanteq.com>
8473
+ 0 string \xff\xa0\xff\xa8\x00 Wavelet Scalar Quantization image data
8474
+
8475
+ # JPEG 2000 Code Stream Bitmap
8476
+ # From Petr Splichal <psplicha@redhat.com>
8477
+ 0 string \xFF\x4F\xFF\x51\x00 JPEG-2000 Code Stream Bitmap data
8478
+
8479
+ # Type: Ulead Photo Explorer5 (.pe5)
8480
+ # URL: http://www.jisyo.com/cgibin/view.cgi?EXT=pe5 (Japanese)
8481
+ # From: Simon Horman <horms@debian.org>
8482
+ 0 string IIO2H Ulead Photo Explorer5
8483
+
8484
+ # Type: X11 cursor
8485
+ # URL: http://webcvs.freedesktop.org/mime/shared-mime-info/freedesktop.org.xml.in?view=markup
8486
+ # From: Mathias Brodala <info@noctus.net>
8487
+ 0 string Xcur X11 cursor
8488
+
8489
+ #------------------------------------------------------------------------------
8490
+ # inform: file(1) magic for Inform interactive fiction language
8491
+
8492
+ # URL: http://www.inform-fiction.org/
8493
+ # From: Reuben Thomas <rrt@sc3d.org>
8494
+
8495
+ 0 search/cB/100 constant\ story Inform source text
8496
+
8497
+ #------------------------------------------------------------------------------
8498
+ # intel: file(1) magic for x86 Unix
8499
+ #
8500
+ # Various flavors of x86 UNIX executable/object (other than Xenix, which
8501
+ # is in "microsoft"). DOS is in "msdos"; the ambitious soul can do
8502
+ # Windows as well.
8503
+ #
8504
+ # Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and
8505
+ # whatever comes next (HP-PA Hummingbird?). OS/2 may also go elsewhere
8506
+ # as well, if, as, and when IBM makes it portable.
8507
+ #
8508
+ # The `versions' should be un-commented if they work for you.
8509
+ # (Was the problem just one of endianness?)
8510
+ #
8511
+ 0 leshort 0502 basic-16 executable
8512
+ >12 lelong >0 not stripped
8513
+ #>22 leshort >0 - version %ld
8514
+ 0 leshort 0503 basic-16 executable (TV)
8515
+ >12 lelong >0 not stripped
8516
+ #>22 leshort >0 - version %ld
8517
+ 0 leshort 0510 x86 executable
8518
+ >12 lelong >0 not stripped
8519
+ 0 leshort 0511 x86 executable (TV)
8520
+ >12 lelong >0 not stripped
8521
+ 0 leshort =0512 iAPX 286 executable small model (COFF)
8522
+ >12 lelong >0 not stripped
8523
+ #>22 leshort >0 - version %ld
8524
+ 0 leshort =0522 iAPX 286 executable large model (COFF)
8525
+ >12 lelong >0 not stripped
8526
+ #>22 leshort >0 - version %ld
8527
+ # SGI labeled the next entry as "iAPX 386 executable" --Dan Quinlan
8528
+ 0 leshort =0514 80386 COFF executable
8529
+ >12 lelong >0 not stripped
8530
+ >22 leshort >0 - version %ld
8531
+
8532
+ # rom: file(1) magic for BIOS ROM Extensions found in intel machines
8533
+ # mapped into memory between 0xC0000 and 0xFFFFF
8534
+ # From Gürkan Sengün <gurkan@linuks.mine.nu>, www.linuks.mine.nu
8535
+ 0 beshort 0x55AA BIOS (ia32) ROM Ext.
8536
+ >5 string USB USB
8537
+ >7 string LDR UNDI image
8538
+ >30 string IBM IBM comp. Video
8539
+ >26 string Adaptec Adaptec
8540
+ >28 string Adaptec Adaptec
8541
+ >42 string PROMISE Promise
8542
+ >2 byte x (%d*512)
8543
+
8544
+ #------------------------------------------------------------------------------
8545
+ # interleaf: file(1) magic for InterLeaf TPS:
8546
+ #
8547
+ 0 string =\210OPS Interleaf saved data
8548
+ 0 string =<!OPS Interleaf document text
8549
+ >5 string ,\ Version\ = \b, version
8550
+ >>17 string >\0 %.3s
8551
+
8552
+ #------------------------------------------------------------------------------
8553
+ # island: file(1) magic for IslandWite/IslandDraw, from SunOS 5.5.1
8554
+ # "/etc/magic":
8555
+ # From: guy@netapp.com (Guy Harris)
8556
+ #
8557
+ 4 string pgscriptver IslandWrite document
8558
+ 13 string DrawFile IslandDraw document
8559
+
8560
+
8561
+ #------------------------------------------------------------------------------
8562
+ # ispell: file(1) magic for ispell
8563
+ #
8564
+ # Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602. This magic
8565
+ # will match 0x9600 through 0x9603 in *both* little endian and big endian.
8566
+ # (No other current magic entries collide.)
8567
+ #
8568
+ # Updated by Daniel Quinlan (quinlan@yggdrasil.com)
8569
+ #
8570
+ 0 leshort&0xFFFC 0x9600 little endian ispell
8571
+ >0 byte 0 hash file (?),
8572
+ >0 byte 1 3.0 hash file,
8573
+ >0 byte 2 3.1 hash file,
8574
+ >0 byte 3 hash file (?),
8575
+ >2 leshort 0x00 8-bit, no capitalization, 26 flags
8576
+ >2 leshort 0x01 7-bit, no capitalization, 26 flags
8577
+ >2 leshort 0x02 8-bit, capitalization, 26 flags
8578
+ >2 leshort 0x03 7-bit, capitalization, 26 flags
8579
+ >2 leshort 0x04 8-bit, no capitalization, 52 flags
8580
+ >2 leshort 0x05 7-bit, no capitalization, 52 flags
8581
+ >2 leshort 0x06 8-bit, capitalization, 52 flags
8582
+ >2 leshort 0x07 7-bit, capitalization, 52 flags
8583
+ >2 leshort 0x08 8-bit, no capitalization, 128 flags
8584
+ >2 leshort 0x09 7-bit, no capitalization, 128 flags
8585
+ >2 leshort 0x0A 8-bit, capitalization, 128 flags
8586
+ >2 leshort 0x0B 7-bit, capitalization, 128 flags
8587
+ >2 leshort 0x0C 8-bit, no capitalization, 256 flags
8588
+ >2 leshort 0x0D 7-bit, no capitalization, 256 flags
8589
+ >2 leshort 0x0E 8-bit, capitalization, 256 flags
8590
+ >2 leshort 0x0F 7-bit, capitalization, 256 flags
8591
+ >4 leshort >0 and %d string characters
8592
+ 0 beshort&0xFFFC 0x9600 big endian ispell
8593
+ >1 byte 0 hash file (?),
8594
+ >1 byte 1 3.0 hash file,
8595
+ >1 byte 2 3.1 hash file,
8596
+ >1 byte 3 hash file (?),
8597
+ >2 beshort 0x00 8-bit, no capitalization, 26 flags
8598
+ >2 beshort 0x01 7-bit, no capitalization, 26 flags
8599
+ >2 beshort 0x02 8-bit, capitalization, 26 flags
8600
+ >2 beshort 0x03 7-bit, capitalization, 26 flags
8601
+ >2 beshort 0x04 8-bit, no capitalization, 52 flags
8602
+ >2 beshort 0x05 7-bit, no capitalization, 52 flags
8603
+ >2 beshort 0x06 8-bit, capitalization, 52 flags
8604
+ >2 beshort 0x07 7-bit, capitalization, 52 flags
8605
+ >2 beshort 0x08 8-bit, no capitalization, 128 flags
8606
+ >2 beshort 0x09 7-bit, no capitalization, 128 flags
8607
+ >2 beshort 0x0A 8-bit, capitalization, 128 flags
8608
+ >2 beshort 0x0B 7-bit, capitalization, 128 flags
8609
+ >2 beshort 0x0C 8-bit, no capitalization, 256 flags
8610
+ >2 beshort 0x0D 7-bit, no capitalization, 256 flags
8611
+ >2 beshort 0x0E 8-bit, capitalization, 256 flags
8612
+ >2 beshort 0x0F 7-bit, capitalization, 256 flags
8613
+ >4 beshort >0 and %d string characters
8614
+ # ispell 4.0 hash files kromJx <kromJx@crosswinds.net>
8615
+ # Ispell 4.0
8616
+ 0 string ISPL ispell
8617
+ >4 long x hash file version %d,
8618
+ >8 long x lexletters %d,
8619
+ >12 long x lexsize %d,
8620
+ >16 long x hashsize %d,
8621
+ >20 long x stblsize %d
8622
+ #------------------------------------------------------------
8623
+ # Java ByteCode and Mach-O binaries (e.g., Mac OS X) use the
8624
+ # same magic number, 0xcafebabe, so they are both handled
8625
+ # in the entry called "cafebabe".
8626
+ #------------------------------------------------------------
8627
+ # Java serialization
8628
+ # From Martin Pool (m.pool@pharos.com.au)
8629
+ 0 beshort 0xaced Java serialization data
8630
+ >2 beshort >0x0004 \b, version %d
8631
+
8632
+ 0 belong 0xfeedfeed Java KeyStore
8633
+ !:mime application/x-java-keystore
8634
+ 0 belong 0xcececece Java JCE KeyStore
8635
+ !:mime application/x-java-jce-keystore
8636
+
8637
+ # Dalvik .dex format. http://retrodev.com/android/dexformat.html
8638
+ # From <mkf@google.com> "Mike Fleming"
8639
+ 0 string dex\n
8640
+ >0 regex dex\n[0-9][0-9][0-9]\0 Dalvik dex file
8641
+ >4 string >000 version %s
8642
+ 0 string dey\n
8643
+ >0 regex dey\n[0-9][0-9][0-9]\0 Dalvik dex file (optimized for host)
8644
+ >4 string >000 version %s
8645
+
8646
+
8647
+ #------------------------------------------------------------------------------
8648
+ # JPEG images
8649
+ # SunOS 5.5.1 had
8650
+ #
8651
+ # 0 string \377\330\377\340 JPEG file
8652
+ # 0 string \377\330\377\356 JPG file
8653
+ #
8654
+ # both of which turn into "JPEG image data" here.
8655
+ #
8656
+ 0 beshort 0xffd8 JPEG image data
8657
+ !:mime image/jpeg
8658
+ !:apple 8BIMJPEG
8659
+ !:strength +1
8660
+ >6 string JFIF \b, JFIF standard
8661
+ # The following added by Erik Rossen <rossen@freesurf.ch> 1999-09-06
8662
+ # in a vain attempt to add image size reporting for JFIF. Note that these
8663
+ # tests are not fool-proof since some perfectly valid JPEGs are currently
8664
+ # impossible to specify in magic(4) format.
8665
+ # First, a little JFIF version info:
8666
+ >>11 byte x \b %d.
8667
+ >>12 byte x \b%02d
8668
+ # Next, the resolution or aspect ratio of the image:
8669
+ #>>13 byte 0 \b, aspect ratio
8670
+ #>>13 byte 1 \b, resolution (DPI)
8671
+ #>>13 byte 2 \b, resolution (DPCM)
8672
+ #>>4 beshort x \b, segment length %d
8673
+ # Next, show thumbnail info, if it exists:
8674
+ >>18 byte !0 \b, thumbnail %dx
8675
+ >>>19 byte x \b%d
8676
+
8677
+ # EXIF moved down here to avoid reporting a bogus version number,
8678
+ # and EXIF version number printing added.
8679
+ # - Patrik R=E5dman <patrik+file-magic@iki.fi>
8680
+ >6 string Exif \b, EXIF standard
8681
+ # Look for EXIF IFD offset in IFD 0, and then look for EXIF version tag in EXIF IFD.
8682
+ # All possible combinations of entries have to be enumerated, since no looping
8683
+ # is possible. And both endians are possible...
8684
+ # The combinations included below are from real-world JPEGs.
8685
+ # Little-endian
8686
+ >>12 string II
8687
+ # IFD 0 Entry #5:
8688
+ >>>70 leshort 0x8769
8689
+ # EXIF IFD Entry #1:
8690
+ >>>>(78.l+14) leshort 0x9000
8691
+ >>>>>(78.l+23) byte x %c
8692
+ >>>>>(78.l+24) byte x \b.%c
8693
+ >>>>>(78.l+25) byte !0x30 \b%c
8694
+ # IFD 0 Entry #9:
8695
+ >>>118 leshort 0x8769
8696
+ # EXIF IFD Entry #3:
8697
+ >>>>(126.l+38) leshort 0x9000
8698
+ >>>>>(126.l+47) byte x %c
8699
+ >>>>>(126.l+48) byte x \b.%c
8700
+ >>>>>(126.l+49) byte !0x30 \b%c
8701
+ # IFD 0 Entry #10
8702
+ >>>130 leshort 0x8769
8703
+ # EXIF IFD Entry #3:
8704
+ >>>>(138.l+38) leshort 0x9000
8705
+ >>>>>(138.l+47) byte x %c
8706
+ >>>>>(138.l+48) byte x \b.%c
8707
+ >>>>>(138.l+49) byte !0x30 \b%c
8708
+ # EXIF IFD Entry #4:
8709
+ >>>>(138.l+50) leshort 0x9000
8710
+ >>>>>(138.l+59) byte x %c
8711
+ >>>>>(138.l+60) byte x \b.%c
8712
+ >>>>>(138.l+61) byte !0x30 \b%c
8713
+ # EXIF IFD Entry #5:
8714
+ >>>>(138.l+62) leshort 0x9000
8715
+ >>>>>(138.l+71) byte x %c
8716
+ >>>>>(138.l+72) byte x \b.%c
8717
+ >>>>>(138.l+73) byte !0x30 \b%c
8718
+ # IFD 0 Entry #11
8719
+ >>>142 leshort 0x8769
8720
+ # EXIF IFD Entry #3:
8721
+ >>>>(150.l+38) leshort 0x9000
8722
+ >>>>>(150.l+47) byte x %c
8723
+ >>>>>(150.l+48) byte x \b.%c
8724
+ >>>>>(150.l+49) byte !0x30 \b%c
8725
+ # EXIF IFD Entry #4:
8726
+ >>>>(150.l+50) leshort 0x9000
8727
+ >>>>>(150.l+59) byte x %c
8728
+ >>>>>(150.l+60) byte x \b.%c
8729
+ >>>>>(150.l+61) byte !0x30 \b%c
8730
+ # EXIF IFD Entry #5:
8731
+ >>>>(150.l+62) leshort 0x9000
8732
+ >>>>>(150.l+71) byte x %c
8733
+ >>>>>(150.l+72) byte x \b.%c
8734
+ >>>>>(150.l+73) byte !0x30 \b%c
8735
+ # Big-endian
8736
+ >>12 string MM
8737
+ # IFD 0 Entry #9:
8738
+ >>>118 beshort 0x8769
8739
+ # EXIF IFD Entry #1:
8740
+ >>>>(126.L+14) beshort 0x9000
8741
+ >>>>>(126.L+23) byte x %c
8742
+ >>>>>(126.L+24) byte x \b.%c
8743
+ >>>>>(126.L+25) byte !0x30 \b%c
8744
+ # EXIF IFD Entry #3:
8745
+ >>>>(126.L+38) beshort 0x9000
8746
+ >>>>>(126.L+47) byte x %c
8747
+ >>>>>(126.L+48) byte x \b.%c
8748
+ >>>>>(126.L+49) byte !0x30 \b%c
8749
+ # IFD 0 Entry #10
8750
+ >>>130 beshort 0x8769
8751
+ # EXIF IFD Entry #3:
8752
+ >>>>(138.L+38) beshort 0x9000
8753
+ >>>>>(138.L+47) byte x %c
8754
+ >>>>>(138.L+48) byte x \b.%c
8755
+ >>>>>(138.L+49) byte !0x30 \b%c
8756
+ # EXIF IFD Entry #5:
8757
+ >>>>(138.L+62) beshort 0x9000
8758
+ >>>>>(138.L+71) byte x %c
8759
+ >>>>>(138.L+72) byte x \b.%c
8760
+ >>>>>(138.L+73) byte !0x30 \b%c
8761
+ # IFD 0 Entry #11
8762
+ >>>142 beshort 0x8769
8763
+ # EXIF IFD Entry #4:
8764
+ >>>>(150.L+50) beshort 0x9000
8765
+ >>>>>(150.L+59) byte x %c
8766
+ >>>>>(150.L+60) byte x \b.%c
8767
+ >>>>>(150.L+61) byte !0x30 \b%c
8768
+ # Here things get sticky. We can do ONE MORE marker segment with
8769
+ # indirect addressing, and that's all. It would be great if we could
8770
+ # do pointer arithemetic like in an assembler language. Christos?
8771
+ # And if there was some sort of looping construct to do searches, plus a few
8772
+ # named accumulators, it would be even more effective...
8773
+ # At least we can show a comment if no other segments got inserted before:
8774
+ >(4.S+5) byte 0xFE
8775
+ >>(4.S+8) string >\0 \b, comment: "%s"
8776
+ # FIXME: When we can do non-byte counted strings, we can use that to get
8777
+ # the string's count, and fix Debian bug #283760
8778
+ #>(4.S+5) byte 0xFE \b, comment
8779
+ #>>(4.S+6) beshort x \b length=%d
8780
+ #>>(4.S+8) string >\0 \b, "%s"
8781
+ # Or, we can show the encoding type (I've included only the three most common)
8782
+ # and image dimensions if we are lucky and the SOFn (image segment) is here:
8783
+ >(4.S+5) byte 0xC0 \b, baseline
8784
+ >>(4.S+6) byte x \b, precision %d
8785
+ >>(4.S+7) beshort x \b, %dx
8786
+ >>(4.S+9) beshort x \b%d
8787
+ >(4.S+5) byte 0xC1 \b, extended sequential
8788
+ >>(4.S+6) byte x \b, precision %d
8789
+ >>(4.S+7) beshort x \b, %dx
8790
+ >>(4.S+9) beshort x \b%d
8791
+ >(4.S+5) byte 0xC2 \b, progressive
8792
+ >>(4.S+6) byte x \b, precision %d
8793
+ >>(4.S+7) beshort x \b, %dx
8794
+ >>(4.S+9) beshort x \b%d
8795
+ # I've commented-out quantisation table reporting. I doubt anyone cares yet.
8796
+ #>(4.S+5) byte 0xDB \b, quantisation table
8797
+ #>>(4.S+6) beshort x \b length=%d
8798
+ #>14 beshort x \b, %d x
8799
+ #>16 beshort x \b %d
8800
+
8801
+ # HSI is Handmade Software's proprietary JPEG encoding scheme
8802
+ 0 string hsi1 JPEG image data, HSI proprietary
8803
+
8804
+ # From: David Santinoli <david@santinoli.com>
8805
+ 0 string \x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A JPEG 2000 image data
8806
+
8807
+ # Type: JPEG 2000 codesream
8808
+ # From: Mathieu Malaterre <mathieu.malaterre@gmail.com>
8809
+ 0 belong 0xff4fff51 JPEG 2000 codestream
8810
+ 45 beshort 0xff52
8811
+
8812
+ #------------------------------------------------------------------------------
8813
+ # karma: file(1) magic for Karma data files
8814
+ #
8815
+ # From <rgooch@atnf.csiro.au>
8816
+
8817
+ 0 string KarmaRHD Version Karma Data Structure Version
8818
+ >16 belong x %lu
8819
+
8820
+ #------------------------------------------------------------------------------
8821
+ # kde: file(1) magic for KDE
8822
+
8823
+ 0 string [KDE\ Desktop\ Entry] KDE desktop entry
8824
+ !:mime application/x-kdelnk
8825
+ 0 string #\ KDE\ Config\ File KDE config file
8826
+ !:mime application/x-kdelnk
8827
+ 0 string #\ xmcd xmcd database file for kscd
8828
+ !:mime text/x-xmcd
8829
+ #------------------------------------------------------------------------------
8830
+ # Type: Google KML, formerly Keyhole Markup Language
8831
+ # Future development of this format has been handed
8832
+ # over to the Open Geospatial Consortium.
8833
+ # http://www.opengeospatial.org/standards/kml/
8834
+ # From: Asbjoern Sloth Toennesen <asbjorn@lila.io>
8835
+ 0 string \<?xml
8836
+ >20 search/400 \ xmlns=
8837
+ >>&0 regex ['"]http://earth.google.com/kml Google KML document
8838
+ !:mime application/vnd.google-earth.kml+xml
8839
+ >>>&1 string 2.0' \b, version 2.0
8840
+ >>>&1 string 2.1' \b, version 2.1
8841
+ >>>&1 string 2.2' \b, version 2.2
8842
+
8843
+ #------------------------------------------------------------------------------
8844
+ # Type: OpenGIS KML, formerly Keyhole Markup Language
8845
+ # This standard is maintained by the
8846
+ # Open Geospatial Consortium.
8847
+ # http://www.opengeospatial.org/standards/kml/
8848
+ # From: Asbjoern Sloth Toennesen <asbjorn@lila.io>
8849
+ >>&0 regex ['"]http://www.opengis.net/kml OpenGIS KML document
8850
+ !:mime application/vnd.google-earth.kml+xml
8851
+ >>>&1 string 2.2 \b, version 2.2
8852
+
8853
+ #------------------------------------------------------------------------------
8854
+ # Type: Google KML Archive (ZIP based)
8855
+ # http://code.google.com/apis/kml/documentation/kml_tut.html
8856
+ # From: Asbjoern Sloth Toennesen <asbjorn@lila.io>
8857
+ 0 string PK\003\004
8858
+ >4 byte 0x14
8859
+ >>30 string doc.kml Compressed Google KML Document, including resources.
8860
+ !:mime application/vnd.google-earth.kmz
8861
+ #------------------------------------------------------------------------------
8862
+ # DEC SRC Virtual Paper: Lectern files
8863
+ # Karl M. Hegbloom <karlheg@inetarena.com>
8864
+ 0 string lect DEC SRC Virtual Paper Lectern file
8865
+ #------------------------------------------------------------------------------
8866
+ # lex: file(1) magic for lex
8867
+ #
8868
+ # derived empirically, your offsets may vary!
8869
+ 0 search/100 yyprevious C program text (from lex)
8870
+ >3 search/1 >\0 for %s
8871
+ # C program text from GNU flex, from Daniel Quinlan <quinlan@yggdrasil.com>
8872
+ 0 search/100 generated\ by\ flex C program text (from flex)
8873
+ # lex description file, from Daniel Quinlan <quinlan@yggdrasil.com>
8874
+ 0 search/1 %{ lex description text
8875
+
8876
+ #------------------------------------------------------------------------------
8877
+ # lif: file(1) magic for lif
8878
+ #
8879
+ # (Daniel Quinlan <quinlan@yggdrasil.com>)
8880
+ #
8881
+ 0 beshort 0x8000 lif file
8882
+ #------------------------------------------------------------------------------
8883
+ # linux: file(1) magic for Linux files
8884
+ #
8885
+ # Values for Linux/i386 binaries, from Daniel Quinlan <quinlan@yggdrasil.com>
8886
+ # The following basic Linux magic is useful for reference, but using
8887
+ # "long" magic is a better practice in order to avoid collisions.
8888
+ #
8889
+ # 2 leshort 100 Linux/i386
8890
+ # >0 leshort 0407 impure executable (OMAGIC)
8891
+ # >0 leshort 0410 pure executable (NMAGIC)
8892
+ # >0 leshort 0413 demand-paged executable (ZMAGIC)
8893
+ # >0 leshort 0314 demand-paged executable (QMAGIC)
8894
+ #
8895
+ 0 lelong 0x00640107 Linux/i386 impure executable (OMAGIC)
8896
+ >16 lelong 0 \b, stripped
8897
+ 0 lelong 0x00640108 Linux/i386 pure executable (NMAGIC)
8898
+ >16 lelong 0 \b, stripped
8899
+ 0 lelong 0x0064010b Linux/i386 demand-paged executable (ZMAGIC)
8900
+ >16 lelong 0 \b, stripped
8901
+ 0 lelong 0x006400cc Linux/i386 demand-paged executable (QMAGIC)
8902
+ >16 lelong 0 \b, stripped
8903
+ #
8904
+ 0 string \007\001\000 Linux/i386 object file
8905
+ >20 lelong >0x1020 \b, DLL library
8906
+ # Linux-8086 stuff:
8907
+ 0 string \01\03\020\04 Linux-8086 impure executable
8908
+ >28 long !0 not stripped
8909
+ 0 string \01\03\040\04 Linux-8086 executable
8910
+ >28 long !0 not stripped
8911
+ #
8912
+ 0 string \243\206\001\0 Linux-8086 object file
8913
+ #
8914
+ 0 string \01\03\020\20 Minix-386 impure executable
8915
+ >28 long !0 not stripped
8916
+ 0 string \01\03\040\20 Minix-386 executable
8917
+ >28 long !0 not stripped
8918
+ # core dump file, from Bill Reynolds <bill@goshawk.lanl.gov>
8919
+ 216 lelong 0421 Linux/i386 core file
8920
+ >220 string >\0 of '%s'
8921
+ >200 lelong >0 (signal %d)
8922
+ #
8923
+ # LILO boot/chain loaders, from Daniel Quinlan <quinlan@yggdrasil.com>
8924
+ # this can be overridden by the DOS executable (COM) entry
8925
+ 2 string LILO Linux/i386 LILO boot/chain loader
8926
+ #
8927
+ # PSF fonts, from H. Peter Anvin <hpa@yggdrasil.com>
8928
+ 0 leshort 0x0436 Linux/i386 PC Screen Font data,
8929
+ >2 byte 0 256 characters, no directory,
8930
+ >2 byte 1 512 characters, no directory,
8931
+ >2 byte 2 256 characters, Unicode directory,
8932
+ >2 byte 3 512 characters, Unicode directory,
8933
+ >3 byte >0 8x%d
8934
+ # Linux swap file, from Daniel Quinlan <quinlan@yggdrasil.com>
8935
+ 4086 string SWAP-SPACE Linux/i386 swap file
8936
+ # From: Jeff Bailey <jbailey@ubuntu.com>
8937
+ # Linux swap file with swsusp1 image, from Jeff Bailey <jbailey@ubuntu.com>
8938
+ 4076 string SWAPSPACE2S1SUSPEND Linux/i386 swap file (new style) with SWSUSP1 image
8939
+ # according to man page of mkswap (8) March 1999
8940
+ # volume label and UUID Russell Coker
8941
+ # http://etbe.coker.com.au/2008/07/08/label-vs-uuid-vs-device/
8942
+ 4086 string SWAPSPACE2 Linux/i386 swap file (new style),
8943
+ >0x400 long x version %d (4K pages),
8944
+ >0x404 long x size %d pages,
8945
+ >1052 string \0 no label,
8946
+ >1052 string >\0 LABEL=%s,
8947
+ >0x40c belong x UUID=%08x
8948
+ >0x410 beshort x \b-%04x
8949
+ >0x412 beshort x \b-%04x
8950
+ >0x414 beshort x \b-%04x
8951
+ >0x416 belong x \b-%08x
8952
+ >0x41a beshort x \b%04x
8953
+ # ECOFF magic for OSF/1 and Linux (only tested under Linux though)
8954
+ #
8955
+ # from Erik Troan (ewt@redhat.com) examining od dumps, so this
8956
+ # could be wrong
8957
+ # updated by David Mosberger (davidm@azstarnet.com) based on
8958
+ # GNU BFD and MIPS info found below.
8959
+ #
8960
+ 0 leshort 0x0183 ECOFF alpha
8961
+ >24 leshort 0407 executable
8962
+ >24 leshort 0410 pure
8963
+ >24 leshort 0413 demand paged
8964
+ >8 long >0 not stripped
8965
+ >8 long 0 stripped
8966
+ >23 leshort >0 - version %ld.
8967
+ #
8968
+ # Linux kernel boot images, from Albert Cahalan <acahalan@cs.uml.edu>
8969
+ # and others such as Axel Kohlmeyer <akohlmey@rincewind.chemie.uni-ulm.de>
8970
+ # and Nicol�s Lichtmaier <nick@debian.org>
8971
+ # All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29
8972
+ # Linux kernel boot images (i386 arch) (Wolfram Kleff)
8973
+ 514 string HdrS Linux kernel
8974
+ >510 leshort 0xAA55 x86 boot executable
8975
+ >>518 leshort >0x1ff
8976
+ >>>529 byte 0 zImage,
8977
+ >>>529 byte 1 bzImage,
8978
+ >>>(526.s+0x200) string >\0 version %s,
8979
+ >>498 leshort 1 RO-rootFS,
8980
+ >>498 leshort 0 RW-rootFS,
8981
+ >>508 leshort >0 root_dev 0x%X,
8982
+ >>502 leshort >0 swap_dev 0x%X,
8983
+ >>504 leshort >0 RAMdisksize %u KB,
8984
+ >>506 leshort 0xFFFF Normal VGA
8985
+ >>506 leshort 0xFFFE Extended VGA
8986
+ >>506 leshort 0xFFFD Prompt for Videomode
8987
+ >>506 leshort >0 Video mode %d
8988
+ # This also matches new kernels, which were caught above by "HdrS".
8989
+ 0 belong 0xb8c0078e Linux kernel
8990
+ >0x1e3 string Loading version 1.3.79 or older
8991
+ >0x1e9 string Loading from prehistoric times
8992
+
8993
+ # System.map files - Nicol�s Lichtmaier <nick@debian.org>
8994
+ 8 search/1 \ A\ _text Linux kernel symbol map text
8995
+
8996
+ # LSM entries - Nicol�s Lichtmaier <nick@debian.org>
8997
+ 0 search/1 Begin3 Linux Software Map entry text
8998
+ 0 search/1 Begin4 Linux Software Map entry text (new format)
8999
+
9000
+ # From Matt Zimmerman, enhanced for v3 by Matthew Palmer
9001
+ 0 belong 0x4f4f4f4d User-mode Linux COW file
9002
+ >4 belong <3 \b, version %d
9003
+ >>8 string >\0 \b, backing file %s
9004
+ >4 belong >2 \b, version %d
9005
+ >>32 string >\0 \b, backing file %s
9006
+
9007
+ ############################################################################
9008
+ # Linux kernel versions
9009
+
9010
+ 0 string \xb8\xc0\x07\x8e\xd8\xb8\x00\x90 Linux
9011
+ >497 leshort 0 x86 boot sector
9012
+ >>514 belong 0x8e of a kernel from the dawn of time!
9013
+ >>514 belong 0x908ed8b4 version 0.99-1.1.42
9014
+ >>514 belong 0x908ed8b8 for memtest86
9015
+
9016
+ >497 leshort !0 x86 kernel
9017
+ >>504 leshort >0 RAMdisksize=%u KB
9018
+ >>502 leshort >0 swap=0x%X
9019
+ >>508 leshort >0 root=0x%X
9020
+ >>>498 leshort 1 \b-ro
9021
+ >>>498 leshort 0 \b-rw
9022
+ >>506 leshort 0xFFFF vga=normal
9023
+ >>506 leshort 0xFFFE vga=extended
9024
+ >>506 leshort 0xFFFD vga=ask
9025
+ >>506 leshort >0 vga=%d
9026
+ >>514 belong 0x908ed881 version 1.1.43-1.1.45
9027
+ >>514 belong 0x15b281cd
9028
+ >>>0xa8e belong 0x55AA5a5a version 1.1.46-1.2.13,1.3.0
9029
+ >>>0xa99 belong 0x55AA5a5a version 1.3.1,2
9030
+ >>>0xaa3 belong 0x55AA5a5a version 1.3.3-1.3.30
9031
+ >>>0xaa6 belong 0x55AA5a5a version 1.3.31-1.3.41
9032
+ >>>0xb2b belong 0x55AA5a5a version 1.3.42-1.3.45
9033
+ >>>0xaf7 belong 0x55AA5a5a version 1.3.46-1.3.72
9034
+ >>514 string HdrS
9035
+ >>>518 leshort >0x1FF
9036
+ >>>>529 byte 0 \b, zImage
9037
+ >>>>529 byte 1 \b, bzImage
9038
+ >>>>(526.s+0x200) string >\0 \b, version %s
9039
+
9040
+ # Linux boot sector thefts.
9041
+ 0 belong 0xb8c0078e Linux
9042
+ >0x1e6 belong 0x454c4b53 ELKS Kernel
9043
+ >0x1e6 belong !0x454c4b53 style boot sector
9044
+
9045
+ ############################################################################
9046
+ # Linux 8086 executable
9047
+ 0 lelong&0xFF0000FF 0xC30000E9 Linux-Dev86 executable, headerless
9048
+ >5 string .
9049
+ >>4 string >\0 \b, libc version %s
9050
+
9051
+ 0 lelong&0xFF00FFFF 0x4000301 Linux-8086 executable
9052
+ >2 byte&0x01 !0 \b, unmapped zero page
9053
+ >2 byte&0x20 0 \b, impure
9054
+ >2 byte&0x20 !0
9055
+ >>2 byte&0x10 !0 \b, A_EXEC
9056
+ >2 byte&0x02 !0 \b, A_PAL
9057
+ >2 byte&0x04 !0 \b, A_NSYM
9058
+ >2 byte&0x08 !0 \b, A_STAND
9059
+ >2 byte&0x40 !0 \b, A_PURE
9060
+ >2 byte&0x80 !0 \b, A_TOVLY
9061
+ >28 long !0 \b, not stripped
9062
+ >37 string .
9063
+ >>36 string >\0 \b, libc version %s
9064
+
9065
+ # 0 lelong&0xFF00FFFF 0x10000301 ld86 I80386 executable
9066
+ # 0 lelong&0xFF00FFFF 0xB000301 ld86 M68K executable
9067
+ # 0 lelong&0xFF00FFFF 0xC000301 ld86 NS16K executable
9068
+ # 0 lelong&0xFF00FFFF 0x17000301 ld86 SPARC executable
9069
+
9070
+ # SYSLINUX boot logo files (from 'ppmtolss16' sources)
9071
+ # http://syslinux.zytor.com/
9072
+ #
9073
+ 0 lelong =0x1413f33d SYSLINUX' LSS16 image data
9074
+ >4 leshort x \b, width %d
9075
+ >6 leshort x \b, height %d
9076
+
9077
+ 0 string OOOM User-Mode-Linux's Copy-On-Write disk image
9078
+ >4 belong x version %d
9079
+
9080
+ # SE Linux policy database
9081
+ # From: Mike Frysinger <vapier@gentoo.org>
9082
+ 0 lelong 0xf97cff8c SE Linux policy
9083
+ >16 lelong x v%d
9084
+ >20 lelong 1 MLS
9085
+ >24 lelong x %d symbols
9086
+ >28 lelong x %d ocons
9087
+
9088
+ # Linux Logical Volume Manager (LVM)
9089
+ # Emmanuel VARAGNAT <emmanuel.varagnat@guzu.net>
9090
+ #
9091
+ # System ID, UUID and volume group name are 128 bytes long
9092
+ # but they should never be full and initialized with zeros...
9093
+ #
9094
+ # LVM1
9095
+ #
9096
+ 0x0 string HM\001 LVM1 (Linux Logical Volume Manager), version 1
9097
+ >0x12c string >\0 , System ID: %s
9098
+
9099
+ 0x0 string HM\002 LVM1 (Linux Logical Volume Manager), version 2
9100
+ >0x12c string >\0 , System ID: %s
9101
+
9102
+ # LVM2
9103
+ #
9104
+ # It seems that the label header can be in one the four first sector
9105
+ # of the disk... (from _find_labeller in lib/label/label.c of LVM2)
9106
+ #
9107
+ # 0x200 seems to be the common case
9108
+
9109
+ 0x218 string LVM2\ 001 LVM2 (Linux Logical Volume Manager)
9110
+ # read the offset to add to the start of the header, and the header
9111
+ # start in 0x200
9112
+ >(0x214.l+0x200) string >\0 , UUID: %s
9113
+
9114
+ 0x018 string LVM2\ 001 LVM2 (Linux Logical Volume Manager)
9115
+ >(0x014.l) string >\0 , UUID: %s
9116
+
9117
+ 0x418 string LVM2\ 001 LVM2 (Linux Logical Volume Manager)
9118
+ >(0x414.l+0x400) string >\0 , UUID: %s
9119
+
9120
+ 0x618 string LVM2\ 001 LVM2 (Linux Logical Volume Manager)
9121
+ >(0x614.l+0x600) string >\0 , UUID: %s
9122
+
9123
+ # LVM snapshot
9124
+ # from Jason Farrel
9125
+ 0 string SnAp LVM Snapshot (CopyOnWrite store)
9126
+ >4 lelong !0 - valid,
9127
+ >4 lelong 0 - invalid,
9128
+ >8 lelong x version %d,
9129
+ >12 lelong x chunk_size %d
9130
+
9131
+ # SE Linux policy database
9132
+ 0 lelong 0xf97cff8c SE Linux policy
9133
+ >16 lelong x v%d
9134
+ >20 lelong 1 MLS
9135
+ >24 lelong x %d symbols
9136
+ >28 lelong x %d ocons
9137
+
9138
+ # LUKS: Linux Unified Key Setup, On-Disk Format, http://luks.endorphin.org/spec
9139
+ # Anthon van der Neut (anthon@mnt.org)
9140
+ 0 string LUKS\xba\xbe LUKS encrypted file,
9141
+ >6 beshort x ver %d
9142
+ >8 string x [%s,
9143
+ >40 string x %s,
9144
+ >72 string x %s]
9145
+ >168 string x UUID: %s
9146
+
9147
+
9148
+ # Summary: Xen saved domain file
9149
+ # Created by: Radek Vokal <rvokal@redhat.com>
9150
+ 0 string LinuxGuestRecord Xen saved domain
9151
+ >20 search/256 (name
9152
+ >>&1 string x (name %s)
9153
+
9154
+ # Type: Xen, the virtual machine monitor
9155
+ # From: Radek Vokal <rvokal@redhat.com>
9156
+ 0 string LinuxGuestRecord Xen saved domain
9157
+ #>2 regex \(name\ [^)]*\) %s
9158
+ >20 search/256 (name (name
9159
+ >>&1 string x %s...)
9160
+ #------------------------------------------------------------------------------
9161
+ # lisp: file(1) magic for lisp programs
9162
+ #
9163
+ # various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com)
9164
+
9165
+ # updated by Joerg Jenderek
9166
+ # GRR: This lot is too weak
9167
+ #0 string ;;
9168
+ # windows INF files often begin with semicolon and use CRLF as line end
9169
+ # lisp files are mainly created on unix system with LF as line end
9170
+ #>2 search/4096 !\r Lisp/Scheme program text
9171
+ #>2 search/4096 \r Windows INF file
9172
+
9173
+ 0 search/4096 (if\ Lisp/Scheme program text
9174
+ !:mime text/x-lisp
9175
+ 0 search/4096 (setq\ Lisp/Scheme program text
9176
+ !:mime text/x-lisp
9177
+ 0 search/4096 (defvar\ Lisp/Scheme program text
9178
+ !:mime text/x-lisp
9179
+ 0 search/4096 (defparam\ Lisp/Scheme program text
9180
+ !:mime text/x-lisp
9181
+ 0 search/4096 (defun\ Lisp/Scheme program text
9182
+ !:mime text/x-lisp
9183
+ 0 search/4096 (autoload\ Lisp/Scheme program text
9184
+ !:mime text/x-lisp
9185
+ 0 search/4096 (custom-set-variables\ Lisp/Scheme program text
9186
+ !:mime text/x-lisp
9187
+
9188
+ # Emacs 18 - this is always correct, but not very magical.
9189
+ 0 string \012( Emacs v18 byte-compiled Lisp data
9190
+ !:mime application/x-elc
9191
+ # Emacs 19+ - ver. recognition added by Ian Springer
9192
+ # Also applies to XEmacs 19+ .elc files; could tell them apart with regexs
9193
+ # - Chris Chittleborough <cchittleborough@yahoo.com.au>
9194
+ 0 string ;ELC
9195
+ >4 byte >18
9196
+ >4 byte <32 Emacs/XEmacs v%d byte-compiled Lisp data
9197
+ !:mime application/x-elc
9198
+
9199
+ # Files produced by CLISP Common Lisp From: Bruno Haible <haible@ilog.fr>
9200
+ 0 string (SYSTEM::VERSION\040' CLISP byte-compiled Lisp program (pre 2004-03-27)
9201
+ 0 string (|SYSTEM|::|VERSION|\040' CLISP byte-compiled Lisp program text
9202
+
9203
+ 0 long 0x70768BD2 CLISP memory image data
9204
+ 0 long 0xD28B7670 CLISP memory image data, other endian
9205
+
9206
+ #.com and .bin for MIT scheme
9207
+ 0 string \372\372\372\372 MIT scheme (library?)
9208
+
9209
+ # From: David Allouche <david@allouche.net>
9210
+ 0 search/1 \<TeXmacs| TeXmacs document text
9211
+ !:mime text/texmacs
9212
+
9213
+ #------------------------------------------------------------------------------
9214
+ # llvm: file(1) magic for LLVM byte-codes
9215
+ # URL: http://llvm.org/docs/BitCodeFormat.html
9216
+ # From: Al Stone <ahs3@fc.hp.com>
9217
+
9218
+ 0 string llvm LLVM byte-codes, uncompressed
9219
+ 0 string llvc0 LLVM byte-codes, null compression
9220
+ 0 string llvc1 LLVM byte-codes, gzip compression
9221
+ 0 string llvc2 LLVM byte-codes, bzip2 compression
9222
+ 0 string \xde\xc0\x17\x0b LLVM bitcode, wrapper
9223
+ 0 string BC\xc0\xde LLVM bitcode
9224
+ #------------------------------------------------------------------------------
9225
+ # lua: file(1) magic for Lua scripting language
9226
+ # URL: http://www.lua.org/
9227
+ # From: Reuben Thomas <rrt@sc3d.org>, Seo Sanghyeon <tinuviel@sparcs.kaist.ac.kr>
9228
+
9229
+ # Lua scripts
9230
+ 0 search/1/b #!\ /usr/bin/lua Lua script text executable
9231
+ !:mime text/x-lua
9232
+ 0 search/1/b #!\ /usr/local/bin/lua Lua script text executable
9233
+ !:mime text/x-lua
9234
+ 0 search/1 #!/usr/bin/env\ lua Lua script text executable
9235
+ !:mime text/x-lua
9236
+ 0 search/1 #!\ /usr/bin/env\ lua Lua script text executable
9237
+ !:mime text/x-lua
9238
+
9239
+ # Lua bytecode
9240
+ 0 string \033Lua Lua bytecode,
9241
+ >4 byte 0x50 version 5.0
9242
+ >4 byte 0x51 version 5.1
9243
+
9244
+ #------------------------------------------------------------------------------
9245
+ # luks: file(1) magic for Linux Unified Key Setup
9246
+ # URL: http://luks.endorphin.org/spec
9247
+ # From: Anthon van der Neut <anthon@mnt.org>
9248
+
9249
+ 0 string LUKS\xba\xbe LUKS encrypted file,
9250
+ >6 beshort x ver %d
9251
+ >8 string x [%s,
9252
+ >40 string x %s,
9253
+ >72 string x %s]
9254
+ >168 string x UUID: %s
9255
+ #------------------------------------------------------------
9256
+ # Mach has two magic numbers, 0xcafebabe and 0xfeedface.
9257
+ # Unfortunately the first, cafebabe, is shared with
9258
+ # Java ByteCode, so they are both handled in the file "cafebabe".
9259
+ # The "feedface" ones are handled herein.
9260
+ #------------------------------------------------------------
9261
+ 0 lelong&0xfffffffe 0xfeedface Mach-O
9262
+ >0 byte 0xcf 64-bit
9263
+ >12 lelong 1 object
9264
+ >12 lelong 2 executable
9265
+ >12 lelong 3 fixed virtual memory shared library
9266
+ >12 lelong 4 core
9267
+ >12 lelong 5 preload executable
9268
+ >12 lelong 6 dynamically linked shared library
9269
+ >12 lelong 7 dynamic linker
9270
+ >12 lelong 8 bundle
9271
+ >12 lelong 9 dynamically linked shared library stub
9272
+ >12 lelong >9
9273
+ >>12 lelong x filetype=%ld
9274
+ >4 lelong <0
9275
+ >>4 lelong x architecture=%ld
9276
+ >4 lelong 1 vax
9277
+ >4 lelong 2 romp
9278
+ >4 lelong 3 architecture=3
9279
+ >4 lelong 4 ns32032
9280
+ >4 lelong 5 ns32332
9281
+ >4 lelong 6 m68k
9282
+ >4 lelong 7 i386
9283
+ >4 lelong 8 mips
9284
+ >4 lelong 9 ns32532
9285
+ >4 lelong 10 architecture=10
9286
+ >4 lelong 11 hppa
9287
+ >4 lelong 12 acorn
9288
+ >4 lelong 13 m88k
9289
+ >4 lelong 14 sparc
9290
+ >4 lelong 15 i860-big
9291
+ >4 lelong 16 i860
9292
+ >4 lelong 17 rs6000
9293
+ >4 lelong 18 ppc
9294
+ >4 lelong 16777234 ppc64
9295
+ >4 lelong >16777234
9296
+ >>4 lelong x architecture=%ld
9297
+ #
9298
+ 0 belong&0xfffffffe 0xfeedface Mach-O
9299
+ >3 byte 0xcf 64-bit
9300
+ >12 belong 1 object
9301
+ >12 belong 2 executable
9302
+ >12 belong 3 fixed virtual memory shared library
9303
+ >12 belong 4 core
9304
+ >12 belong 5 preload executable
9305
+ >12 belong 6 dynamically linked shared library
9306
+ >12 belong 7 dynamic linker
9307
+ >12 belong 8 bundle
9308
+ >12 belong 9 dynamically linked shared library stub
9309
+ >12 belong >9
9310
+ >>12 belong x filetype=%ld
9311
+ >4 belong <0
9312
+ >>4 belong x architecture=%ld
9313
+ >4 belong 1 vax
9314
+ >4 belong 2 romp
9315
+ >4 belong 3 architecture=3
9316
+ >4 belong 4 ns32032
9317
+ >4 belong 5 ns32332
9318
+ >4 belong 6 for m68k architecture
9319
+ # from NeXTstep 3.0 <mach/machine.h>
9320
+ # i.e. mc680x0_all, ignore
9321
+ # >>8 belong 1 (mc68030)
9322
+ >>8 belong 2 (mc68040)
9323
+ >>8 belong 3 (mc68030 only)
9324
+ >4 belong 7 i386
9325
+ >4 belong 8 mips
9326
+ >4 belong 9 ns32532
9327
+ >4 belong 10 architecture=10
9328
+ >4 belong 11 hppa
9329
+ >4 belong 12 acorn
9330
+ >4 belong 13 m88k
9331
+ >4 belong 14 sparc
9332
+ >4 belong 15 i860-big
9333
+ >4 belong 16 i860
9334
+ >4 belong 17 rs6000
9335
+ >4 belong 18 ppc
9336
+ >4 belong 16777234 ppc64
9337
+ >4 belong >16777234
9338
+ >>4 belong x architecture=%ld
9339
+
9340
+ #------------------------------------------------------------------------------
9341
+ # macintosh description
9342
+ #
9343
+ # BinHex is the Macintosh ASCII-encoded file format (see also "apple")
9344
+ # Daniel Quinlan, quinlan@yggdrasil.com
9345
+ 11 string must\ be\ converted\ with\ BinHex BinHex binary text
9346
+ !:mime application/mac-binhex40
9347
+ >41 string x \b, version %.3s
9348
+
9349
+ # Stuffit archives are the de facto standard of compression for Macintosh
9350
+ # files obtained from most archives. (franklsm@tuns.ca)
9351
+ 0 string SIT! StuffIt Archive (data)
9352
+ !:mime application/x-stuffit
9353
+ !:apple SIT!SIT!
9354
+ >2 string x : %s
9355
+ 0 string SITD StuffIt Deluxe (data)
9356
+ >2 string x : %s
9357
+ 0 string Seg StuffIt Deluxe Segment (data)
9358
+ >2 string x : %s
9359
+
9360
+ # Newer StuffIt archives (grant@netbsd.org)
9361
+ 0 string StuffIt StuffIt Archive
9362
+ !:mime application/x-stuffit
9363
+ !:apple SIT!SIT!
9364
+ #>162 string >0 : %s
9365
+
9366
+ # Macintosh Applications and Installation binaries (franklsm@tuns.ca)
9367
+ # GRR: Too weak
9368
+ #0 string APPL Macintosh Application (data)
9369
+ #>2 string x \b: %s
9370
+
9371
+ # Macintosh System files (franklsm@tuns.ca)
9372
+ # GRR: Too weak
9373
+ #0 string zsys Macintosh System File (data)
9374
+ #0 string FNDR Macintosh Finder (data)
9375
+ #0 string libr Macintosh Library (data)
9376
+ #>2 string x : %s
9377
+ #0 string shlb Macintosh Shared Library (data)
9378
+ #>2 string x : %s
9379
+ #0 string cdev Macintosh Control Panel (data)
9380
+ #>2 string x : %s
9381
+ #0 string INIT Macintosh Extension (data)
9382
+ #>2 string x : %s
9383
+ #0 string FFIL Macintosh Truetype Font (data)
9384
+ #>2 string x : %s
9385
+ #0 string LWFN Macintosh Postscript Font (data)
9386
+ #>2 string x : %s
9387
+
9388
+ # Additional Macintosh Files (franklsm@tuns.ca)
9389
+ # GRR: Too weak
9390
+ #0 string PACT Macintosh Compact Pro Archive (data)
9391
+ #>2 string x : %s
9392
+ #0 string ttro Macintosh TeachText File (data)
9393
+ #>2 string x : %s
9394
+ #0 string TEXT Macintosh TeachText File (data)
9395
+ #>2 string x : %s
9396
+ #0 string PDF Macintosh PDF File (data)
9397
+ #>2 string x : %s
9398
+
9399
+ # MacBinary format (Eric Fischer, enf@pobox.com)
9400
+ #
9401
+ # Unfortunately MacBinary doesn't really have a magic number prior
9402
+ # to the MacBinary III format. The checksum is really the way to
9403
+ # do it, but the magic file format isn't up to the challenge.
9404
+ #
9405
+ # 0 byte 0
9406
+ # 1 byte # filename length
9407
+ # 2 string # filename
9408
+ # 65 string # file type
9409
+ # 69 string # file creator
9410
+ # 73 byte # Finder flags
9411
+ # 74 byte 0
9412
+ # 75 beshort # vertical posn in window
9413
+ # 77 beshort # horiz posn in window
9414
+ # 79 beshort # window or folder ID
9415
+ # 81 byte # protected?
9416
+ # 82 byte 0
9417
+ # 83 belong # length of data segment
9418
+ # 87 belong # length of resource segment
9419
+ # 91 belong # file creation date
9420
+ # 95 belong # file modification date
9421
+ # 99 beshort # length of comment after resource
9422
+ # 101 byte # new Finder flags
9423
+ # 102 string mBIN # (only in MacBinary III)
9424
+ # 106 byte # char. code of file name
9425
+ # 107 byte # still more Finder flags
9426
+ # 116 belong # total file length
9427
+ # 120 beshort # length of add'l header
9428
+ # 122 byte 129 # for MacBinary II
9429
+ # 122 byte 130 # for MacBinary III
9430
+ # 123 byte 129 # minimum version that can read fmt
9431
+ # 124 beshort # checksum
9432
+ #
9433
+ # This attempts to use the version numbers as a magic number, requiring
9434
+ # that the first one be 0x80, 0x81, 0x82, or 0x83, and that the second
9435
+ # be 0x81. This works for the files I have, but maybe not for everyone's.
9436
+
9437
+ # Unfortunately, this magic is quite weak - MPi
9438
+ #122 beshort&0xFCFF 0x8081 Macintosh MacBinary data
9439
+
9440
+ # MacBinary I doesn't have the version number field at all, but MacBinary II
9441
+ # has been in use since 1987 so I hope there aren't many really old files
9442
+ # floating around that this will miss. The original spec calls for using
9443
+ # the nulls in 0, 74, and 82 as the magic number.
9444
+ #
9445
+ # Another possibility, that would also work for MacBinary I, is to use
9446
+ # the assumption that 65-72 will all be ASCII (0x20-0x7F), that 73 will
9447
+ # have bits 1 (changed), 2 (busy), 3 (bozo), and 6 (invisible) unset,
9448
+ # and that 74 will be 0. So something like
9449
+ #
9450
+ # 71 belong&0x80804EFF 0x00000000 Macintosh MacBinary data
9451
+ #
9452
+ # >73 byte&0x01 0x01 \b, inited
9453
+ # >73 byte&0x02 0x02 \b, changed
9454
+ # >73 byte&0x04 0x04 \b, busy
9455
+ # >73 byte&0x08 0x08 \b, bozo
9456
+ # >73 byte&0x10 0x10 \b, system
9457
+ # >73 byte&0x10 0x20 \b, bundle
9458
+ # >73 byte&0x10 0x40 \b, invisible
9459
+ # >73 byte&0x10 0x80 \b, locked
9460
+
9461
+ #>65 string x \b, type "%4.4s"
9462
+
9463
+ #>65 string 8BIM (PhotoShop)
9464
+ #>65 string ALB3 (PageMaker 3)
9465
+ #>65 string ALB4 (PageMaker 4)
9466
+ #>65 string ALT3 (PageMaker 3)
9467
+ #>65 string APPL (application)
9468
+ #>65 string AWWP (AppleWorks word processor)
9469
+ #>65 string CIRC (simulated circuit)
9470
+ #>65 string DRWG (MacDraw)
9471
+ #>65 string EPSF (Encapsulated PostScript)
9472
+ #>65 string FFIL (font suitcase)
9473
+ #>65 string FKEY (function key)
9474
+ #>65 string FNDR (Macintosh Finder)
9475
+ #>65 string GIFf (GIF image)
9476
+ #>65 string Gzip (GNU gzip)
9477
+ #>65 string INIT (system extension)
9478
+ #>65 string LIB\ (library)
9479
+ #>65 string LWFN (PostScript font)
9480
+ #>65 string MSBC (Microsoft BASIC)
9481
+ #>65 string PACT (Compact Pro archive)
9482
+ #>65 string PDF\ (Portable Document Format)
9483
+ #>65 string PICT (picture)
9484
+ #>65 string PNTG (MacPaint picture)
9485
+ #>65 string PREF (preferences)
9486
+ #>65 string PROJ (Think C project)
9487
+ #>65 string QPRJ (Think Pascal project)
9488
+ #>65 string SCFL (Defender scores)
9489
+ #>65 string SCRN (startup screen)
9490
+ #>65 string SITD (StuffIt Deluxe)
9491
+ #>65 string SPn3 (SuperPaint)
9492
+ #>65 string STAK (HyperCard stack)
9493
+ #>65 string Seg\ (StuffIt segment)
9494
+ #>65 string TARF (Unix tar archive)
9495
+ #>65 string TEXT (ASCII)
9496
+ #>65 string TIFF (TIFF image)
9497
+ #>65 string TOVF (Eudora table of contents)
9498
+ #>65 string WDBN (Microsoft Word word processor)
9499
+ #>65 string WORD (MacWrite word processor)
9500
+ #>65 string XLS\ (Microsoft Excel)
9501
+ #>65 string ZIVM (compress (.Z))
9502
+ #>65 string ZSYS (Pre-System 7 system file)
9503
+ #>65 string acf3 (Aldus FreeHand)
9504
+ #>65 string cdev (control panel)
9505
+ #>65 string dfil (Desk Acessory suitcase)
9506
+ #>65 string libr (library)
9507
+ #>65 string nX^d (WriteNow word processor)
9508
+ #>65 string nX^w (WriteNow dictionary)
9509
+ #>65 string rsrc (resource)
9510
+ #>65 string scbk (Scrapbook)
9511
+ #>65 string shlb (shared library)
9512
+ #>65 string ttro (SimpleText read-only)
9513
+ #>65 string zsys (system file)
9514
+
9515
+ #>69 string x \b, creator "%4.4s"
9516
+
9517
+ # Somewhere, Apple has a repository of registered Creator IDs. These are
9518
+ # just the ones that I happened to have files from and was able to identify.
9519
+
9520
+ #>69 string 8BIM (Adobe Photoshop)
9521
+ #>69 string ALD3 (PageMaker 3)
9522
+ #>69 string ALD4 (PageMaker 4)
9523
+ #>69 string ALFA (Alpha editor)
9524
+ #>69 string APLS (Apple Scanner)
9525
+ #>69 string APSC (Apple Scanner)
9526
+ #>69 string BRKL (Brickles)
9527
+ #>69 string BTFT (BitFont)
9528
+ #>69 string CCL2 (Common Lisp 2)
9529
+ #>69 string CCL\ (Common Lisp)
9530
+ #>69 string CDmo (The Talking Moose)
9531
+ #>69 string CPCT (Compact Pro)
9532
+ #>69 string CSOm (Eudora)
9533
+ #>69 string DMOV (Font/DA Mover)
9534
+ #>69 string DSIM (DigSim)
9535
+ #>69 string EDIT (Macintosh Edit)
9536
+ #>69 string ERIK (Macintosh Finder)
9537
+ #>69 string EXTR (self-extracting archive)
9538
+ #>69 string Gzip (GNU gzip)
9539
+ #>69 string KAHL (Think C)
9540
+ #>69 string LWFU (LaserWriter Utility)
9541
+ #>69 string LZIV (compress)
9542
+ #>69 string MACA (MacWrite)
9543
+ #>69 string MACS (Macintosh operating system)
9544
+ #>69 string MAcK (MacKnowledge terminal emulator)
9545
+ #>69 string MLND (Defender)
9546
+ #>69 string MPNT (MacPaint)
9547
+ #>69 string MSBB (Microsoft BASIC (binary))
9548
+ #>69 string MSWD (Microsoft Word)
9549
+ #>69 string NCSA (NCSA Telnet)
9550
+ #>69 string PJMM (Think Pascal)
9551
+ #>69 string PSAL (Hunt the Wumpus)
9552
+ #>69 string PSI2 (Apple File Exchange)
9553
+ #>69 string R*ch (BBEdit)
9554
+ #>69 string RMKR (Resource Maker)
9555
+ #>69 string RSED (Resource Editor)
9556
+ #>69 string Rich (BBEdit)
9557
+ #>69 string SIT! (StuffIt)
9558
+ #>69 string SPNT (SuperPaint)
9559
+ #>69 string Unix (NeXT Mac filesystem)
9560
+ #>69 string VIM! (Vim editor)
9561
+ #>69 string WILD (HyperCard)
9562
+ #>69 string XCEL (Microsoft Excel)
9563
+ #>69 string aCa2 (Fontographer)
9564
+ #>69 string aca3 (Aldus FreeHand)
9565
+ #>69 string dosa (Macintosh MS-DOS file system)
9566
+ #>69 string movr (Font/DA Mover)
9567
+ #>69 string nX^n (WriteNow)
9568
+ #>69 string pdos (Apple ProDOS file system)
9569
+ #>69 string scbk (Scrapbook)
9570
+ #>69 string ttxt (SimpleText)
9571
+ #>69 string ufox (Foreign File Access)
9572
+
9573
+ # Just in case...
9574
+
9575
+ 102 string mBIN MacBinary III data with surprising version number
9576
+
9577
+ # sas magic from Bruce Foster (bef@nwu.edu)
9578
+ #
9579
+ #0 string SAS SAS
9580
+ #>8 string x %s
9581
+ 0 string SAS SAS
9582
+ >24 string DATA data file
9583
+ >24 string CATALOG catalog
9584
+ >24 string INDEX data file index
9585
+ >24 string VIEW data view
9586
+ # sas 7+ magic from Reinhold Koch (reinhold.koch@roche.com)
9587
+ #
9588
+ 0x54 string SAS SAS 7+
9589
+ >0x9C string DATA data file
9590
+ >0x9C string CATALOG catalog
9591
+ >0x9C string INDEX data file index
9592
+ >0x9C string VIEW data view
9593
+
9594
+ # spss magic for SPSS system and portable files,
9595
+ # from Bruce Foster (bef@nwu.edu).
9596
+
9597
+ 0 long 0xc1e2c3c9 SPSS Portable File
9598
+ >40 string x %s
9599
+
9600
+ 0 string $FL2 SPSS System File
9601
+ >24 string x %s
9602
+
9603
+ # Macintosh filesystem data
9604
+ # From "Tom N Harris" <telliamed@mac.com>
9605
+ # Fixed HFS+ and Partition map magic: Ethan Benson <erbenson@alaska.net>
9606
+ # The MacOS epoch begins on 1 Jan 1904 instead of 1 Jan 1970, so these
9607
+ # entries depend on the data arithmetic added after v.35
9608
+ # There's also some Pascal strings in here, ditto...
9609
+
9610
+ # The boot block signature, according to IM:Files, is
9611
+ # "for HFS volumes, this field always contains the value 0x4C4B."
9612
+ # But if this is true for MFS or HFS+ volumes, I don't know.
9613
+ # Alternatively, the boot block is supposed to be zeroed if it's
9614
+ # unused, so a simply >0 should suffice.
9615
+
9616
+ 0x400 beshort 0xD2D7 Macintosh MFS data
9617
+ >0 beshort 0x4C4B (bootable)
9618
+ >0x40a beshort &0x8000 (locked)
9619
+ >0x402 beldate-0x7C25B080 x created: %s,
9620
+ >0x406 beldate-0x7C25B080 >0 last backup: %s,
9621
+ >0x414 belong x block size: %d,
9622
+ >0x412 beshort x number of blocks: %d,
9623
+ >0x424 pstring x volume name: %s
9624
+
9625
+ # "BD" is has many false positives
9626
+ #0x400 beshort 0x4244 Macintosh HFS data
9627
+ #>0 beshort 0x4C4B (bootable)
9628
+ #>0x40a beshort &0x8000 (locked)
9629
+ #>0x40a beshort ^0x0100 (mounted)
9630
+ #>0x40a beshort &0x0200 (spared blocks)
9631
+ #>0x40a beshort &0x0800 (unclean)
9632
+ #>0x47C beshort 0x482B (Embedded HFS+ Volume)
9633
+ #>0x402 beldate-0x7C25B080 x created: %s,
9634
+ #>0x406 beldate-0x7C25B080 x last modified: %s,
9635
+ #>0x440 beldate-0x7C25B080 >0 last backup: %s,
9636
+ #>0x414 belong x block size: %d,
9637
+ #>0x412 beshort x number of blocks: %d,
9638
+ #>0x424 pstring x volume name: %s
9639
+
9640
+ 0x400 beshort 0x482B Macintosh HFS Extended
9641
+ >&0 beshort x version %d data
9642
+ >0 beshort 0x4C4B (bootable)
9643
+ >0x404 belong ^0x00000100 (mounted)
9644
+ >&2 belong &0x00000200 (spared blocks)
9645
+ >&2 belong &0x00000800 (unclean)
9646
+ >&2 belong &0x00008000 (locked)
9647
+ >&6 string x last mounted by: '%.4s',
9648
+ # really, that should be treated as a belong and we print a string
9649
+ # based on the value. TN1150 only mentions '8.10' for "MacOS 8.1"
9650
+ >&14 beldate-0x7C25B080 x created: %s,
9651
+ # only the creation date is local time, all other timestamps in HFS+ are UTC.
9652
+ >&18 bedate-0x7C25B080 x last modified: %s,
9653
+ >&22 bedate-0x7C25B080 >0 last backup: %s,
9654
+ >&26 bedate-0x7C25B080 >0 last checked: %s,
9655
+ >&38 belong x block size: %d,
9656
+ >&42 belong x number of blocks: %d,
9657
+ >&46 belong x free blocks: %d
9658
+
9659
+ # I don't think this is really necessary since it doesn't do much and
9660
+ # anything with a valid driver descriptor will also have a valid
9661
+ # partition map
9662
+ #0 beshort 0x4552 Apple Device Driver data
9663
+ #>&24 beshort =1 \b, MacOS
9664
+
9665
+ # Is that the partition type a cstring or a pstring? Well, IM says "strings
9666
+ # shorter than 32 bytes must be terminated with NULL" so I'll treat it as a
9667
+ # cstring. Of course, partitions can contain more than four entries, but
9668
+ # what're you gonna do?
9669
+ # GRR: This magic is too weak, it is just "PM"
9670
+ #0x200 beshort 0x504D Apple Partition data
9671
+ #>0x2 beshort x (block size: %d):
9672
+ #>0x230 string x first type: %s,
9673
+ #>0x210 string x name: %s,
9674
+ #>0x254 belong x number of blocks: %d,
9675
+ #>0x400 beshort 0x504D
9676
+ #>>0x430 string x second type: %s,
9677
+ #>>0x410 string x name: %s,
9678
+ #>>0x454 belong x number of blocks: %d,
9679
+ #>>0x600 beshort 0x504D
9680
+ #>>>0x630 string x third type: %s,
9681
+ #>>>0x610 string x name: %s,
9682
+ #>>>0x654 belong x number of blocks: %d,
9683
+ #>>0x800 beshort 0x504D
9684
+ #>>>0x830 string x fourth type: %s,
9685
+ #>>>0x810 string x name: %s,
9686
+ #>>>0x854 belong x number of blocks: %d,
9687
+ #>>>0xa00 beshort 0x504D
9688
+ #>>>>0xa30 string x fifth type: %s,
9689
+ #>>>>0xa10 string x name: %s,
9690
+ #>>>>0xa54 belong x number of blocks: %d
9691
+ #>>>0xc00 beshort 0x504D
9692
+ #>>>>0xc30 string x sixth type: %s,
9693
+ #>>>>0xc10 string x name: %s,
9694
+ #>>>>0xc54 belong x number of blocks: %d
9695
+ ## AFAIK, only the signature is different
9696
+ #0x200 beshort 0x5453 Apple Old Partition data
9697
+ #>0x2 beshort x block size: %d,
9698
+ #>0x230 string x first type: %s,
9699
+ #>0x210 string x name: %s,
9700
+ #>0x254 belong x number of blocks: %d,
9701
+ #>0x400 beshort 0x504D
9702
+ #>>0x430 string x second type: %s,
9703
+ #>>0x410 string x name: %s,
9704
+ #>>0x454 belong x number of blocks: %d,
9705
+ #>>0x800 beshort 0x504D
9706
+ #>>>0x830 string x third type: %s,
9707
+ #>>>0x810 string x name: %s,
9708
+ #>>>0x854 belong x number of blocks: %d,
9709
+ #>>>0xa00 beshort 0x504D
9710
+ #>>>>0xa30 string x fourth type: %s,
9711
+ #>>>>0xa10 string x name: %s,
9712
+ #>>>>0xa54 belong x number of blocks: %d
9713
+
9714
+ # From: Remi Mommsen <mommsen@slac.stanford.edu>
9715
+ 0 string BOMStore Mac OS X bill of materials (BOM) file
9716
+
9717
+ #------------------------------------------------------------------------------
9718
+ # magic: file(1) magic for magic files
9719
+ #
9720
+ 0 string #\ Magic magic text file for file(1) cmd
9721
+ 0 lelong 0xF11E041C magic binary file for file(1) cmd
9722
+ >4 lelong x (version %d) (little endian)
9723
+ 0 belong 0xF11E041C magic binary file for file(1) cmd
9724
+ >4 belong x (version %d) (big endian)
9725
+ #------------------------------------------------------------------------------
9726
+ # mail.news: file(1) magic for mail and news
9727
+ #
9728
+ # Unfortunately, saved netnews also has From line added in some news software.
9729
+ #0 string From mail text
9730
+ # There are tests to ascmagic.c to cope with mail and news.
9731
+ 0 string Relay-Version: old news text
9732
+ !:mime message/rfc822
9733
+ 0 string #!\ rnews batched news text
9734
+ !:mime message/rfc822
9735
+ 0 string N#!\ rnews mailed, batched news text
9736
+ !:mime message/rfc822
9737
+ 0 string Forward\ to mail forwarding text
9738
+ !:mime message/rfc822
9739
+ 0 string Pipe\ to mail piping text
9740
+ !:mime message/rfc822
9741
+ 0 string Return-Path: smtp mail text
9742
+ !:mime message/rfc822
9743
+ 0 string Path: news text
9744
+ !:mime message/news
9745
+ 0 string Xref: news text
9746
+ !:mime message/news
9747
+ 0 string From: news or mail text
9748
+ !:mime message/rfc822
9749
+ 0 string Article saved news text
9750
+ !:mime message/news
9751
+ 0 string BABYL Emacs RMAIL text
9752
+ 0 string Received: RFC 822 mail text
9753
+ !:mime message/rfc822
9754
+ 0 string MIME-Version: MIME entity text
9755
+ #0 string Content- MIME entity text
9756
+
9757
+ # TNEF files...
9758
+ 0 lelong 0x223E9F78 Transport Neutral Encapsulation Format
9759
+
9760
+ # From: Kevin Sullivan <ksulliva@psc.edu>
9761
+ 0 string *mbx* MBX mail folder
9762
+
9763
+ # From: Simon Matter <simon.matter@invoca.ch>
9764
+ 0 string \241\002\213\015skiplist\ file\0\0\0 Cyrus skiplist DB
9765
+
9766
+ # JAM(mbp) Fidonet message area databases
9767
+ # JHR file
9768
+ 0 string JAM\0 JAM message area header file
9769
+ >12 leshort >0 (%d messages)
9770
+
9771
+ # Squish Fidonet message area databases
9772
+ # SQD file (requires at least one message in the area)
9773
+ # XXX: Weak magic
9774
+ #256 leshort 0xAFAE4453 Squish message area data file
9775
+ #>4 leshort >0 (%d messages)
9776
+
9777
+ #0 string \<!--\ MHonArc text/html; x-type=mhonarc
9778
+
9779
+ #------------------------------------------------------------------------------
9780
+ # maple: file(1) magic for maple files
9781
+ # "H. Nanosecond" <aldomel@ix.netcom.com>
9782
+ # Maple V release 4, a multi-purpose math program
9783
+ #
9784
+
9785
+ # maple library .lib
9786
+ 0 string \000MVR4\nI MapleVr4 library
9787
+
9788
+ # .ind
9789
+ # no magic for these :-(
9790
+ # they are compiled indexes for maple files
9791
+
9792
+ # .hdb
9793
+ 0 string \000\004\000\000 Maple help database
9794
+
9795
+ # .mhp
9796
+ # this has the form <PACKAGE=name>
9797
+ 0 string \<PACKAGE= Maple help file
9798
+ 0 string \<HELP\ NAME= Maple help file
9799
+ 0 string \n\<HELP\ NAME= Maple help file with extra carriage return at start (yuck)
9800
+ #0 string #\ Newton Maple help file, old style
9801
+ 0 string #\ daub Maple help file, old style
9802
+ #0 string #=========== Maple help file, old style
9803
+
9804
+ # .mws
9805
+ 0 string \000\000\001\044\000\221 Maple worksheet
9806
+ #this is anomalous
9807
+ 0 string WriteNow\000\002\000\001\000\000\000\000\100\000\000\000\000\000 Maple worksheet, but weird
9808
+ # this has the form {VERSION 2 3 "IBM INTEL NT" "2.3" }\n
9809
+ # that is {VERSION major_version miunor_version computer_type version_string}
9810
+ 0 string {VERSION\ Maple worksheet
9811
+ >9 string >\0 version %.1s.
9812
+ >>>11 string >\0 %.1s
9813
+
9814
+ # .mps
9815
+ 0 string \0\0\001$ Maple something
9816
+ # from byte 4 it is either 'nul E' or 'soh R'
9817
+ # I think 'nul E' means a file that was saved as a different name
9818
+ # a sort of revision marking
9819
+ # 'soh R' means new
9820
+ >4 string \000\105 An old revision
9821
+ >4 string \001\122 The latest save
9822
+
9823
+ # .mpl
9824
+ # some of these are the same as .mps above
9825
+ #0000000 000 000 001 044 000 105 same as .mps
9826
+ #0000000 000 000 001 044 001 122 same as .mps
9827
+
9828
+ 0 string #\n##\ <SHAREFILE= Maple something
9829
+ 0 string \n#\n##\ <SHAREFILE= Maple something
9830
+ 0 string ##\ <SHAREFILE= Maple something
9831
+ 0 string #\r##\ <SHAREFILE= Maple something
9832
+ 0 string \r#\r##\ <SHAREFILE= Maple something
9833
+ 0 string #\ \r##\ <DESCRIBE> Maple something anomalous.
9834
+
9835
+ #------------------------------------------------------------------------------
9836
+ # mathcad: file(1) magic for Mathcad documents
9837
+ # URL: http://www.mathsoft.com/
9838
+ # From: Josh Triplett <josh@freedesktop.org>
9839
+
9840
+ 0 string .MCAD\t Mathcad document
9841
+ #------------------------------------------------------------------------------
9842
+ # mathematica: file(1) magic for mathematica files
9843
+ # "H. Nanosecond" <aldomel@ix.netcom.com>
9844
+ # Mathematica a multi-purpose math program
9845
+ # versions 2.2 and 3.0
9846
+
9847
+ #mathematica .mb
9848
+ 0 string \064\024\012\000\035\000\000\000 Mathematica version 2 notebook
9849
+ 0 string \064\024\011\000\035\000\000\000 Mathematica version 2 notebook
9850
+
9851
+ # .ma
9852
+ # multiple possibilites:
9853
+
9854
+ 0 string (*^\n\n::[\011frontEndVersion\ =\ Mathematica notebook
9855
+ #>41 string >\0 %s
9856
+
9857
+ #0 string (*^\n\n::[\011palette Mathematica notebook version 2.x
9858
+
9859
+ #0 string (*^\n\n::[\011Information Mathematica notebook version 2.x
9860
+ #>675 string >\0 %s #doesn't work well
9861
+
9862
+ # there may be 'cr' instread of 'nl' in some does this matter?
9863
+
9864
+ # generic:
9865
+ 0 string (*^\r\r::[\011 Mathematica notebook version 2.x
9866
+ 0 string (*^\r\n\r\n::[\011 Mathematica notebook version 2.x
9867
+ 0 string (*^\015 Mathematica notebook version 2.x
9868
+ 0 string (*^\n\r\n\r::[\011 Mathematica notebook version 2.x
9869
+ 0 string (*^\r::[\011 Mathematica notebook version 2.x
9870
+ 0 string (*^\r\n::[\011 Mathematica notebook version 2.x
9871
+ 0 string (*^\n\n::[\011 Mathematica notebook version 2.x
9872
+ 0 string (*^\n::[\011 Mathematica notebook version 2.x
9873
+
9874
+
9875
+ # Mathematica .mx files
9876
+
9877
+ #0 string (*This\ is\ a\ Mathematica\ binary\ dump\ file.\ It\ can\ be\ loaded\ with\ Get.*) Mathematica binary file
9878
+ 0 string (*This\ is\ a\ Mathematica\ binary\ Mathematica binary file
9879
+ #>71 string \000\010\010\010\010\000\000\000\000\000\000\010\100\010\000\000\000
9880
+ # >71... is optional
9881
+ >88 string >\0 from %s
9882
+
9883
+
9884
+ # Mathematica files PBF:
9885
+ # 115 115 101 120 102 106 000 001 000 000 000 203 000 001 000
9886
+ 0 string MMAPBF\000\001\000\000\000\203\000\001\000 Mathematica PBF (fonts I think)
9887
+
9888
+ # .ml files These are menu resources I think
9889
+ # these start with "[0-9][0-9][0-9]\ A~[0-9][0-9][0-9]\
9890
+ # how to put that into a magic rule?
9891
+ 4 string \ A~ MAthematica .ml file
9892
+
9893
+ # .nb files
9894
+ #too long 0 string (***********************************************************************\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Mathematica-Compatible Notebook Mathematica 3.0 notebook
9895
+ 0 string (*********************** Mathematica 3.0 notebook
9896
+
9897
+ # other (* matches it is a comment start in these langs
9898
+ # GRR: Too weak; also matches other languages e.g. ML
9899
+ #0 string (* Mathematica, or Pascal, Modula-2 or 3 code text
9900
+
9901
+ #########################
9902
+ # MatLab v5
9903
+ 0 string MATLAB Matlab v5 mat-file
9904
+ >126 short 0x494d (big endian)
9905
+ >>124 beshort x version 0x%04x
9906
+ >126 short 0x4d49 (little endian)
9907
+ >>124 leshort x version 0x%04x
9908
+
9909
+
9910
+ #------------------------------------------------------------------------------
9911
+ # matroska: file(1) magic for Matroska files
9912
+ #
9913
+ # See http://www.matroska.org/
9914
+ #
9915
+
9916
+ # EBML id:
9917
+ 0 belong 0x1a45dfa3
9918
+ # DocType id:
9919
+ >5 beshort 0x4282
9920
+ # DocType contents:
9921
+ >>8 string matroska Matroska data
9922
+
9923
+ #------------------------------------------------------------------------------
9924
+ # Mavroyanopoulos Nikos <nmav@hellug.gr>
9925
+ # mcrypt: file(1) magic for mcrypt 2.2.x;
9926
+ 0 string \0m\3 mcrypt 2.5 encrypted data,
9927
+ >4 string >\0 algorithm: %s,
9928
+ >>&1 leshort >0 keysize: %d bytes,
9929
+ >>>&0 string >\0 mode: %s,
9930
+
9931
+ 0 string \0m\2 mcrypt 2.2 encrypted data,
9932
+ >3 byte 0 algorithm: blowfish-448,
9933
+ >3 byte 1 algorithm: DES,
9934
+ >3 byte 2 algorithm: 3DES,
9935
+ >3 byte 3 algorithm: 3-WAY,
9936
+ >3 byte 4 algorithm: GOST,
9937
+ >3 byte 6 algorithm: SAFER-SK64,
9938
+ >3 byte 7 algorithm: SAFER-SK128,
9939
+ >3 byte 8 algorithm: CAST-128,
9940
+ >3 byte 9 algorithm: xTEA,
9941
+ >3 byte 10 algorithm: TWOFISH-128,
9942
+ >3 byte 11 algorithm: RC2,
9943
+ >3 byte 12 algorithm: TWOFISH-192,
9944
+ >3 byte 13 algorithm: TWOFISH-256,
9945
+ >3 byte 14 algorithm: blowfish-128,
9946
+ >3 byte 15 algorithm: blowfish-192,
9947
+ >3 byte 16 algorithm: blowfish-256,
9948
+ >3 byte 100 algorithm: RC6,
9949
+ >3 byte 101 algorithm: IDEA,
9950
+ >4 byte 0 mode: CBC,
9951
+ >4 byte 1 mode: ECB,
9952
+ >4 byte 2 mode: CFB,
9953
+ >4 byte 3 mode: OFB,
9954
+ >4 byte 4 mode: nOFB,
9955
+ >5 byte 0 keymode: 8bit
9956
+ >5 byte 1 keymode: 4bit
9957
+ >5 byte 2 keymode: SHA-1 hash
9958
+ >5 byte 3 keymode: MD5 hash
9959
+
9960
+ #------------------------------------------------------------------------------
9961
+ # mercurial: file(1) magic for Mercurial changeset bundles
9962
+ # http://www.selenic.com/mercurial/wiki/
9963
+ #
9964
+ # Jesse Glick (jesse.glick@sun.com)
9965
+ #
9966
+
9967
+ 0 string HG10 Mercurial changeset bundle
9968
+ >4 string UN (uncompressed)
9969
+ >4 string GZ (gzip compressed)
9970
+ >4 string BZ (bzip2 compressed)
9971
+ #------------------------------------------------------------------------------
9972
+ # mime: file(1) magic for MIME encoded files
9973
+ #
9974
+ 0 string Content-Type:\
9975
+ >14 string >\0 %s
9976
+ 0 string Content-Type:
9977
+ >13 string >\0 %s
9978
+
9979
+ #------------------------------------------------------------------------------
9980
+ # mips: file(1) magic for Silicon Graphics (MIPS, IRIS, IRIX, etc.)
9981
+ # Dec Ultrix (MIPS)
9982
+ # all of SGI's *current* machines and OSes run in big-endian mode on the
9983
+ # MIPS machines, as far as I know.
9984
+ #
9985
+ # XXX - what is the blank "-" line?
9986
+ #
9987
+ # kbd file definitions
9988
+ 0 string kbd!map kbd map file
9989
+ >8 byte >0 Ver %d:
9990
+ >10 short >0 with %d table(s)
9991
+ 0 belong 0407 old SGI 68020 executable
9992
+ 0 belong 0410 old SGI 68020 pure executable
9993
+ 0 beshort 0x8765 disk quotas file
9994
+ 0 beshort 0x0506 IRIS Showcase file
9995
+ >2 byte 0x49 -
9996
+ >3 byte x - version %ld
9997
+ 0 beshort 0x0226 IRIS Showcase template
9998
+ >2 byte 0x63 -
9999
+ >3 byte x - version %ld
10000
+ 0 belong 0x5343464d IRIS Showcase file
10001
+ >4 byte x - version %ld
10002
+ 0 belong 0x5443464d IRIS Showcase template
10003
+ >4 byte x - version %ld
10004
+ 0 belong 0xdeadbabe IRIX Parallel Arena
10005
+ >8 belong >0 - version %ld
10006
+ #
10007
+ 0 beshort 0x0160 MIPSEB ECOFF executable
10008
+ >20 beshort 0407 (impure)
10009
+ >20 beshort 0410 (swapped)
10010
+ >20 beshort 0413 (paged)
10011
+ >8 belong >0 not stripped
10012
+ >8 belong 0 stripped
10013
+ >22 byte x - version %ld
10014
+ >23 byte x .%ld
10015
+ #
10016
+ 0 beshort 0x0162 MIPSEL-BE ECOFF executable
10017
+ >20 beshort 0407 (impure)
10018
+ >20 beshort 0410 (swapped)
10019
+ >20 beshort 0413 (paged)
10020
+ >8 belong >0 not stripped
10021
+ >8 belong 0 stripped
10022
+ >23 byte x - version %d
10023
+ >22 byte x .%ld
10024
+ #
10025
+ 0 beshort 0x6001 MIPSEB-LE ECOFF executable
10026
+ >20 beshort 03401 (impure)
10027
+ >20 beshort 04001 (swapped)
10028
+ >20 beshort 05401 (paged)
10029
+ >8 belong >0 not stripped
10030
+ >8 belong 0 stripped
10031
+ >23 byte x - version %d
10032
+ >22 byte x .%ld
10033
+ #
10034
+ 0 beshort 0x6201 MIPSEL ECOFF executable
10035
+ >20 beshort 03401 (impure)
10036
+ >20 beshort 04001 (swapped)
10037
+ >20 beshort 05401 (paged)
10038
+ >8 belong >0 not stripped
10039
+ >8 belong 0 stripped
10040
+ >23 byte x - version %ld
10041
+ >22 byte x .%ld
10042
+ #
10043
+ # MIPS 2 additions
10044
+ #
10045
+ 0 beshort 0x0163 MIPSEB MIPS-II ECOFF executable
10046
+ >20 beshort 0407 (impure)
10047
+ >20 beshort 0410 (swapped)
10048
+ >20 beshort 0413 (paged)
10049
+ >8 belong >0 not stripped
10050
+ >8 belong 0 stripped
10051
+ >22 byte x - version %ld
10052
+ >23 byte x .%ld
10053
+ #
10054
+ 0 beshort 0x0166 MIPSEL-BE MIPS-II ECOFF executable
10055
+ >20 beshort 0407 (impure)
10056
+ >20 beshort 0410 (swapped)
10057
+ >20 beshort 0413 (paged)
10058
+ >8 belong >0 not stripped
10059
+ >8 belong 0 stripped
10060
+ >22 byte x - version %ld
10061
+ >23 byte x .%ld
10062
+ #
10063
+ 0 beshort 0x6301 MIPSEB-LE MIPS-II ECOFF executable
10064
+ >20 beshort 03401 (impure)
10065
+ >20 beshort 04001 (swapped)
10066
+ >20 beshort 05401 (paged)
10067
+ >8 belong >0 not stripped
10068
+ >8 belong 0 stripped
10069
+ >23 byte x - version %ld
10070
+ >22 byte x .%ld
10071
+ #
10072
+ 0 beshort 0x6601 MIPSEL MIPS-II ECOFF executable
10073
+ >20 beshort 03401 (impure)
10074
+ >20 beshort 04001 (swapped)
10075
+ >20 beshort 05401 (paged)
10076
+ >8 belong >0 not stripped
10077
+ >8 belong 0 stripped
10078
+ >23 byte x - version %ld
10079
+ >22 byte x .%ld
10080
+ #
10081
+ # MIPS 3 additions
10082
+ #
10083
+ 0 beshort 0x0140 MIPSEB MIPS-III ECOFF executable
10084
+ >20 beshort 0407 (impure)
10085
+ >20 beshort 0410 (swapped)
10086
+ >20 beshort 0413 (paged)
10087
+ >8 belong >0 not stripped
10088
+ >8 belong 0 stripped
10089
+ >22 byte x - version %ld
10090
+ >23 byte x .%ld
10091
+ #
10092
+ 0 beshort 0x0142 MIPSEL-BE MIPS-III ECOFF executable
10093
+ >20 beshort 0407 (impure)
10094
+ >20 beshort 0410 (swapped)
10095
+ >20 beshort 0413 (paged)
10096
+ >8 belong >0 not stripped
10097
+ >8 belong 0 stripped
10098
+ >22 byte x - version %ld
10099
+ >23 byte x .%ld
10100
+ #
10101
+ 0 beshort 0x4001 MIPSEB-LE MIPS-III ECOFF executable
10102
+ >20 beshort 03401 (impure)
10103
+ >20 beshort 04001 (swapped)
10104
+ >20 beshort 05401 (paged)
10105
+ >8 belong >0 not stripped
10106
+ >8 belong 0 stripped
10107
+ >23 byte x - version %ld
10108
+ >22 byte x .%ld
10109
+ #
10110
+ 0 beshort 0x4201 MIPSEL MIPS-III ECOFF executable
10111
+ >20 beshort 03401 (impure)
10112
+ >20 beshort 04001 (swapped)
10113
+ >20 beshort 05401 (paged)
10114
+ >8 belong >0 not stripped
10115
+ >8 belong 0 stripped
10116
+ >23 byte x - version %ld
10117
+ >22 byte x .%ld
10118
+ #
10119
+ 0 beshort 0x180 MIPSEB Ucode
10120
+ 0 beshort 0x182 MIPSEL-BE Ucode
10121
+ # 32bit core file
10122
+ 0 belong 0xdeadadb0 IRIX core dump
10123
+ >4 belong 1 of
10124
+ >16 string >\0 '%s'
10125
+ # 64bit core file
10126
+ 0 belong 0xdeadad40 IRIX 64-bit core dump
10127
+ >4 belong 1 of
10128
+ >16 string >\0 '%s'
10129
+ # N32bit core file
10130
+ 0 belong 0xbabec0bb IRIX N32 core dump
10131
+ >4 belong 1 of
10132
+ >16 string >\0 '%s'
10133
+ # New style crash dump file
10134
+ 0 string \x43\x72\x73\x68\x44\x75\x6d\x70 IRIX vmcore dump of
10135
+ >36 string >\0 '%s'
10136
+ # Trusted IRIX info
10137
+ 0 string SGIAUDIT SGI Audit file
10138
+ >8 byte x - version %d
10139
+ >9 byte x .%ld
10140
+ #
10141
+ 0 string WNGZWZSC Wingz compiled script
10142
+ 0 string WNGZWZSS Wingz spreadsheet
10143
+ 0 string WNGZWZHP Wingz help file
10144
+ #
10145
+ 0 string #Inventor V IRIS Inventor 1.0 file
10146
+ 0 string #Inventor V2 Open Inventor 2.0 file
10147
+ # GLF is OpenGL stream encoding
10148
+ 0 string glfHeadMagic(); GLF_TEXT
10149
+ 4 belong 0x7d000000 GLF_BINARY_LSB_FIRST
10150
+ 4 belong 0x0000007d GLF_BINARY_MSB_FIRST
10151
+ # GLS is OpenGL stream encoding; GLS is the successor of GLF
10152
+ 0 string glsBeginGLS( GLS_TEXT
10153
+ 4 belong 0x10000000 GLS_BINARY_LSB_FIRST
10154
+ 4 belong 0x00000010 GLS_BINARY_MSB_FIRST
10155
+
10156
+ #------------------------------------------------------------------------------
10157
+ # mirage: file(1) magic for Mirage executables
10158
+ #
10159
+ # XXX - byte order?
10160
+ #
10161
+ 0 long 31415 Mirage Assembler m.out executable
10162
+ #-----------------------------------------------------------------------------
10163
+ # misctools: file(1) magic for miscellaneous UNIX tools.
10164
+ #
10165
+ 0 search/1 %%!! X-Post-It-Note text
10166
+ 0 string/c BEGIN:VCALENDAR vCalendar calendar file
10167
+ 0 string/c BEGIN:VCARD vCard visiting card
10168
+ !:mime text/x-vcard
10169
+
10170
+ # From: Alex Beregszaszi <alex@fsn.hu>
10171
+ 4 string gtktalog GNOME Catalogue (gtktalog)
10172
+ >13 string >\0 version %s
10173
+
10174
+ # Summary: Libtool library file
10175
+ # Extension: .la
10176
+ # Submitted by: Tomasz Trojanowski <tomek@uninet.com.pl>
10177
+ 0 search/80 .la\ -\ a\ libtool\ library\ file libtool library file
10178
+
10179
+ # Summary: Libtool object file
10180
+ # Extension: .lo
10181
+ # Submitted by: Abel Cheung <abelcheung@gmail.com>
10182
+ 0 search/80 .lo\ -\ a\ libtool\ object\ file libtool object file
10183
+
10184
+ #------------------------------------------------------------------------------
10185
+ # mkid: file(1) magic for mkid(1) databases
10186
+ #
10187
+ # ID is the binary tags database produced by mkid(1).
10188
+ #
10189
+ # XXX - byte order?
10190
+ #
10191
+ 0 string \311\304 ID tags data
10192
+ >2 short >0 version %d
10193
+
10194
+ #------------------------------------------------------------------------------
10195
+ # mlssa: file(1) magic for MLSSA datafiles
10196
+ #
10197
+ 0 lelong 0xffffabcd MLSSA datafile,
10198
+ >4 leshort x algorithm %d,
10199
+ >10 lelong x %d samples
10200
+
10201
+ #------------------------------------------------------------------------------
10202
+ # mmdf: file(1) magic for MMDF mail files
10203
+ #
10204
+ 0 string \001\001\001\001 MMDF mailbox
10205
+ #------------------------------------------------------------------------------
10206
+ # modem: file(1) magic for modem programs
10207
+ #
10208
+ # From: Florian La Roche <florian@knorke.saar.de>
10209
+ 1 string PC\ Research,\ Inc Digifax-G3-File
10210
+ >29 byte 1 \b, fine resolution
10211
+ >29 byte 0 \b, normal resolution
10212
+
10213
+ 0 short 0x0100 raw G3 data, byte-padded
10214
+ 0 short 0x1400 raw G3 data
10215
+ #
10216
+ # Magic data for vgetty voice formats
10217
+ # (Martin Seine & Marc Eberhard)
10218
+
10219
+ #
10220
+ # raw modem data version 1
10221
+ #
10222
+ 0 string RMD1 raw modem data
10223
+ >4 string >\0 (%s /
10224
+ >20 short >0 compression type 0x%04x)
10225
+
10226
+ #
10227
+ # portable voice format 1
10228
+ #
10229
+ 0 string PVF1\n portable voice format
10230
+ >5 string >\0 (binary %s)
10231
+
10232
+ #
10233
+ # portable voice format 2
10234
+ #
10235
+ 0 string PVF2\n portable voice format
10236
+ >5 string >\0 (ascii %s)
10237
+
10238
+
10239
+ #------------------------------------------------------------------------------
10240
+ # motorola: file(1) magic for Motorola 68K and 88K binaries
10241
+ #
10242
+ # 68K
10243
+ #
10244
+ 0 beshort 0520 mc68k COFF
10245
+ >18 beshort ^00000020 object
10246
+ >18 beshort &00000020 executable
10247
+ >12 belong >0 not stripped
10248
+ >168 string .lowmem Apple toolbox
10249
+ >20 beshort 0407 (impure)
10250
+ >20 beshort 0410 (pure)
10251
+ >20 beshort 0413 (demand paged)
10252
+ >20 beshort 0421 (standalone)
10253
+ 0 beshort 0521 mc68k executable (shared)
10254
+ >12 belong >0 not stripped
10255
+ 0 beshort 0522 mc68k executable (shared demand paged)
10256
+ >12 belong >0 not stripped
10257
+ #
10258
+ # Motorola/UniSoft 68K Binary Compatibility Standard (BCS)
10259
+ #
10260
+ 0 beshort 0554 68K BCS executable
10261
+ #
10262
+ # 88K
10263
+ #
10264
+ # Motorola/88Open BCS
10265
+ #
10266
+ 0 beshort 0555 88K BCS executable
10267
+ #
10268
+ # Motorola S-Records, from Gerd Truschinski <gt@freebsd.first.gmd.de>
10269
+ 0 string S0 Motorola S-Record; binary data in text format
10270
+
10271
+ # ATARI ST relocatable PRG
10272
+ #
10273
+ # from Oskar Schirmer <schirmer@scara.com> Feb 3, 2001
10274
+ # (according to Roland Waldi, Oct 21, 1987)
10275
+ # besides the magic 0x601a, the text segment size is checked to be
10276
+ # not larger than 1 MB (which is a lot on ST).
10277
+ # The additional 0x601b distinction I took from Doug Lee's magic.
10278
+ 0 belong&0xFFFFFFF0 0x601A0000 Atari ST M68K contiguous executable
10279
+ >2 belong x (txt=%ld,
10280
+ >6 belong x dat=%ld,
10281
+ >10 belong x bss=%ld,
10282
+ >14 belong x sym=%ld)
10283
+ 0 belong&0xFFFFFFF0 0x601B0000 Atari ST M68K non-contig executable
10284
+ >2 belong x (txt=%ld,
10285
+ >6 belong x dat=%ld,
10286
+ >10 belong x bss=%ld,
10287
+ >14 belong x sym=%ld)
10288
+
10289
+ # Atari ST/TT... program format (sent by Wolfram Kleff <kleff@cs.uni-bonn.de>)
10290
+ 0 beshort 0x601A Atari 68xxx executable,
10291
+ >2 belong x text len %lu,
10292
+ >6 belong x data len %lu,
10293
+ >10 belong x BSS len %lu,
10294
+ >14 belong x symboltab len %lu,
10295
+ >18 belong 0
10296
+ >22 belong &0x01 fastload flag,
10297
+ >22 belong &0x02 may be loaded to alternate RAM,
10298
+ >22 belong &0x04 malloc may be from alternate RAM,
10299
+ >22 belong x flags: 0x%lX,
10300
+ >26 beshort 0 no relocation tab
10301
+ >26 beshort !0 + relocation tab
10302
+ >30 string SFX [Self-Extracting LZH SFX archive]
10303
+ >38 string SFX [Self-Extracting LZH SFX archive]
10304
+ >44 string ZIP! [Self-Extracting ZIP SFX archive]
10305
+
10306
+ 0 beshort 0x0064 Atari 68xxx CPX file
10307
+ >8 beshort x (version %04lx)
10308
+
10309
+ #------------------------------------------------------------------------------
10310
+ # mozilla: file(1) magic for Mozilla XUL fastload files
10311
+ # (XUL.mfasl and XPC.mfasl)
10312
+ # URL: http://www.mozilla.org/
10313
+ # From: Josh Triplett <josh@freedesktop.org>
10314
+
10315
+ 0 string XPCOM\nMozFASL\r\n\x1A Mozilla XUL fastload data
10316
+
10317
+ #------------------------------------------------------------------------------
10318
+ # msdos: file(1) magic for MS-DOS files
10319
+ #
10320
+
10321
+ # .BAT files (Daniel Quinlan, quinlan@yggdrasil.com)
10322
+ # updated by Joerg Jenderek at Oct 2008
10323
+ 0 string @
10324
+ >1 string/cB \ echo\ off DOS batch file text
10325
+ !:mime text/x-msdos-batch
10326
+ >1 string/cB echo\ off DOS batch file text
10327
+ !:mime text/x-msdos-batch
10328
+ >1 string/cB rem\ DOS batch file text
10329
+ !:mime text/x-msdos-batch
10330
+ >1 string/cB set\ DOS batch file text
10331
+ !:mime text/x-msdos-batch
10332
+
10333
+
10334
+ # OS/2 batch files are REXX. the second regex is a bit generic, oh well
10335
+ # the matched commands seem to be common in REXX and uncommon elsewhere
10336
+ 100 search/0xffff rxfuncadd
10337
+ >100 regex/c =^[\ \t]{0,10}call[\ \t]{1,10}rxfunc OS/2 REXX batch file text
10338
+ 100 search/0xffff say
10339
+ >100 regex/c =^[\ \t]{0,10}say\ ['"] OS/2 REXX batch file text
10340
+
10341
+ 0 leshort 0x14c MS Windows COFF Intel 80386 object file
10342
+ #>4 ledate x stamp %s
10343
+ 0 leshort 0x166 MS Windows COFF MIPS R4000 object file
10344
+ #>4 ledate x stamp %s
10345
+ 0 leshort 0x184 MS Windows COFF Alpha object file
10346
+ #>4 ledate x stamp %s
10347
+ 0 leshort 0x268 MS Windows COFF Motorola 68000 object file
10348
+ #>4 ledate x stamp %s
10349
+ 0 leshort 0x1f0 MS Windows COFF PowerPC object file
10350
+ #>4 ledate x stamp %s
10351
+ 0 leshort 0x290 MS Windows COFF PA-RISC object file
10352
+ #>4 ledate x stamp %s
10353
+
10354
+ # XXX - according to Microsoft's spec, at an offset of 0x3c in a
10355
+ # PE-format executable is the offset in the file of the PE header;
10356
+ # unfortunately, that's a little-endian offset, and there's no way
10357
+ # to specify an indirect offset with a specified byte order.
10358
+ # So, for now, we assume the standard MS-DOS stub, which puts the
10359
+ # PE header at 0x80 = 128.
10360
+ #
10361
+ # Required OS version and subsystem version were 4.0 on some NT 3.51
10362
+ # executables built with Visual C++ 4.0, so it's not clear that
10363
+ # they're interesting. The user version was 0.0, but there's
10364
+ # probably some linker directive to set it. The linker version was
10365
+ # 3.0, except for one ".exe" which had it as 4.20 (same damn linker!).
10366
+ #
10367
+ # many of the compressed formats were extraced from IDARC 1.23 source code
10368
+ #
10369
+ 0 string MZ
10370
+ !:mime application/x-dosexec
10371
+ >0x18 leshort <0x40 MS-DOS executable
10372
+ >0 string MZ\0\0\0\0\0\0\0\0\0\0PE\0\0 \b, PE for MS Windows
10373
+ >>&18 leshort&0x2000 >0 (DLL)
10374
+ >>&88 leshort 0 (unknown subsystem)
10375
+ >>&88 leshort 1 (native)
10376
+ >>&88 leshort 2 (GUI)
10377
+ >>&88 leshort 3 (console)
10378
+ >>&88 leshort 7 (POSIX)
10379
+ >>&0 leshort 0x0 unknown processor
10380
+ >>&0 leshort 0x14c Intel 80386
10381
+ >>&0 leshort 0x166 MIPS R4000
10382
+ >>&0 leshort 0x184 Alpha
10383
+ >>&0 leshort 0x268 Motorola 68000
10384
+ >>&0 leshort 0x1f0 PowerPC
10385
+ >>&0 leshort 0x290 PA-RISC
10386
+ >>&18 leshort&0x0100 >0 32-bit
10387
+ >>&18 leshort&0x1000 >0 system file
10388
+ >>&228 lelong >0 \b, Mono/.Net assembly
10389
+ >>&0xf4 search/0x140 \x0\x40\x1\x0
10390
+ >>>(&0.l+(4)) string MSCF \b, WinHKI CAB self-extracting archive
10391
+ >30 string Copyright\ 1989-1990\ PKWARE\ Inc. Self-extracting PKZIP archive
10392
+ !:mime application/zip
10393
+ # Is next line correct? One might expect "Corp." not "Copr." If it is right, add a note to that effect.
10394
+ >30 string PKLITE\ Copr. Self-extracting PKZIP archive
10395
+ !:mime application/zip
10396
+
10397
+ >0x18 leshort >0x3f
10398
+ >>(0x3c.l) string PE\0\0 PE
10399
+ >>>(0x3c.l+25) byte 1 \b32 executable
10400
+ >>>(0x3c.l+25) byte 2 \b32+ executable
10401
+ # hooray, there's a DOS extender using the PE format, with a valid PE
10402
+ # executable inside (which just prints a message and exits if run in win)
10403
+ >>>(0x3c.l+92) leshort <10
10404
+ >>>>(8.s*16) string 32STUB for MS-DOS, 32rtm DOS extender
10405
+ >>>>(8.s*16) string !32STUB for MS Windows
10406
+ >>>>>(0x3c.l+22) leshort&0x2000 >0 (DLL)
10407
+ >>>>>(0x3c.l+92) leshort 0 (unknown subsystem)
10408
+ >>>>>(0x3c.l+92) leshort 1 (native)
10409
+ >>>>>(0x3c.l+92) leshort 2 (GUI)
10410
+ >>>>>(0x3c.l+92) leshort 3 (console)
10411
+ >>>>>(0x3c.l+92) leshort 7 (POSIX)
10412
+ >>>(0x3c.l+92) leshort 10 (EFI application)
10413
+ >>>(0x3c.l+92) leshort 11 (EFI boot service driver)
10414
+ >>>(0x3c.l+92) leshort 12 (EFI runtime driver)
10415
+ >>>(0x3c.l+92) leshort 13 (XBOX)
10416
+ >>>(0x3c.l+4) leshort 0x0 unknown processor
10417
+ >>>(0x3c.l+4) leshort 0x14c Intel 80386
10418
+ >>>(0x3c.l+4) leshort 0x166 MIPS R4000
10419
+ >>>(0x3c.l+4) leshort 0x184 Alpha
10420
+ >>>(0x3c.l+4) leshort 0x268 Motorola 68000
10421
+ >>>(0x3c.l+4) leshort 0x1f0 PowerPC
10422
+ >>>(0x3c.l+4) leshort 0x290 PA-RISC
10423
+ >>>(0x3c.l+4) leshort 0x200 Intel Itanium
10424
+ >>>(0x3c.l+22) leshort&0x0100 >0 32-bit
10425
+ >>>(0x3c.l+22) leshort&0x1000 >0 system file
10426
+ >>>(0x3c.l+232) lelong >0 Mono/.Net assembly
10427
+
10428
+ >>>>(0x3c.l+0xf8) string UPX0 \b, UPX compressed
10429
+ >>>>(0x3c.l+0xf8) search/0x140 PEC2 \b, PECompact2 compressed
10430
+ >>>>(0x3c.l+0xf8) search/0x140 UPX2
10431
+ >>>>>(&0x10.l+(-4)) string PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
10432
+ >>>>(0x3c.l+0xf8) search/0x140 .idata
10433
+ >>>>>(&0xe.l+(-4)) string PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
10434
+ >>>>>(&0xe.l+(-4)) string ZZ0 \b, ZZip self-extracting archive
10435
+ >>>>>(&0xe.l+(-4)) string ZZ1 \b, ZZip self-extracting archive
10436
+ >>>>(0x3c.l+0xf8) search/0x140 .rsrc
10437
+ >>>>>(&0x0f.l+(-4)) string a\\\4\5 \b, WinHKI self-extracting archive
10438
+ >>>>>(&0x0f.l+(-4)) string Rar! \b, RAR self-extracting archive
10439
+ >>>>>(&0x0f.l+(-4)) search/0x3000 MSCF \b, InstallShield self-extracting archive
10440
+ >>>>>(&0x0f.l+(-4)) search/32 Nullsoft \b, Nullsoft Installer self-extracting archive
10441
+ >>>>(0x3c.l+0xf8) search/0x140 .data
10442
+ >>>>>(&0x0f.l) string WEXTRACT \b, MS CAB-Installer self-extracting archive
10443
+ >>>>(0x3c.l+0xf8) search/0x140 .petite\0 \b, Petite compressed
10444
+ >>>>>(0x3c.l+0xf7) byte x
10445
+ >>>>>>(&0x104.l+(-4)) string =!sfx! \b, ACE self-extracting archive
10446
+ >>>>(0x3c.l+0xf8) search/0x140 .WISE \b, WISE installer self-extracting archive
10447
+ >>>>(0x3c.l+0xf8) search/0x140 .dz\0\0\0 \b, Dzip self-extracting archive
10448
+ >>>>(0x3c.l+0xf8) search/0x140 .reloc
10449
+ >>>>>(&0xe.l+(-4)) search/0x180 PK\3\4 \b, ZIP self-extracting archive (WinZip)
10450
+
10451
+ >>>>&(0x3c.l+0xf8) search/0x100 _winzip_ \b, ZIP self-extracting archive (WinZip)
10452
+ >>>>&(0x3c.l+0xf8) search/0x100 SharedD \b, Microsoft Installer self-extracting archive
10453
+ >>>>0x30 string Inno \b, InnoSetup self-extracting archive
10454
+
10455
+ >>(0x3c.l) string !PE\0\0 MS-DOS executable
10456
+
10457
+ >>(0x3c.l) string NE \b, NE
10458
+ >>>(0x3c.l+0x36) byte 0 (unknown OS)
10459
+ >>>(0x3c.l+0x36) byte 1 for OS/2 1.x
10460
+ >>>(0x3c.l+0x36) byte 2 for MS Windows 3.x
10461
+ >>>(0x3c.l+0x36) byte 3 for MS-DOS
10462
+ >>>(0x3c.l+0x36) byte >3 (unknown OS)
10463
+ >>>(0x3c.l+0x36) byte 0x81 for MS-DOS, Phar Lap DOS extender
10464
+ >>>(0x3c.l+0x0c) leshort&0x8003 0x8002 (DLL)
10465
+ >>>(0x3c.l+0x0c) leshort&0x8003 0x8001 (driver)
10466
+ >>>&(&0x24.s-1) string ARJSFX \b, ARJ self-extracting archive
10467
+ >>>(0x3c.l+0x70) search/0x80 WinZip(R)\ Self-Extractor \b, ZIP self-extracting archive (WinZip)
10468
+
10469
+ >>(0x3c.l) string LX\0\0 \b, LX
10470
+ >>>(0x3c.l+0x0a) leshort <1 (unknown OS)
10471
+ >>>(0x3c.l+0x0a) leshort 1 for OS/2
10472
+ >>>(0x3c.l+0x0a) leshort 2 for MS Windows
10473
+ >>>(0x3c.l+0x0a) leshort 3 for DOS
10474
+ >>>(0x3c.l+0x0a) leshort >3 (unknown OS)
10475
+ >>>(0x3c.l+0x10) lelong&0x28000 =0x8000 (DLL)
10476
+ >>>(0x3c.l+0x10) lelong&0x20000 >0 (device driver)
10477
+ >>>(0x3c.l+0x10) lelong&0x300 0x300 (GUI)
10478
+ >>>(0x3c.l+0x10) lelong&0x28300 <0x300 (console)
10479
+ >>>(0x3c.l+0x08) leshort 1 i80286
10480
+ >>>(0x3c.l+0x08) leshort 2 i80386
10481
+ >>>(0x3c.l+0x08) leshort 3 i80486
10482
+ >>>(8.s*16) string emx \b, emx
10483
+ >>>>&1 string x %s
10484
+ >>>&(&0x54.l-3) string arjsfx \b, ARJ self-extracting archive
10485
+
10486
+ # MS Windows system file, supposedly a collection of LE executables
10487
+ >>(0x3c.l) string W3 \b, W3 for MS Windows
10488
+
10489
+ >>(0x3c.l) string LE\0\0 \b, LE executable
10490
+ >>>(0x3c.l+0x0a) leshort 1
10491
+ # some DOS extenders use LE files with OS/2 header
10492
+ >>>>0x240 search/0x100 DOS/4G for MS-DOS, DOS4GW DOS extender
10493
+ >>>>0x240 search/0x200 WATCOM\ C/C++ for MS-DOS, DOS4GW DOS extender
10494
+ >>>>0x440 search/0x100 CauseWay\ DOS\ Extender for MS-DOS, CauseWay DOS extender
10495
+ >>>>0x40 search/0x40 PMODE/W for MS-DOS, PMODE/W DOS extender
10496
+ >>>>0x40 search/0x40 STUB/32A for MS-DOS, DOS/32A DOS extender (stub)
10497
+ >>>>0x40 search/0x80 STUB/32C for MS-DOS, DOS/32A DOS extender (configurable stub)
10498
+ >>>>0x40 search/0x80 DOS/32A for MS-DOS, DOS/32A DOS extender (embedded)
10499
+ # this is a wild guess; hopefully it is a specific signature
10500
+ >>>>&0x24 lelong <0x50
10501
+ >>>>>(&0x4c.l) string \xfc\xb8WATCOM
10502
+ >>>>>>&0 search/8 3\xdbf\xb9 \b, 32Lite compressed
10503
+ # another wild guess: if real OS/2 LE executables exist, they probably have higher start EIP
10504
+ #>>>>(0x3c.l+0x1c) lelong >0x10000 for OS/2
10505
+ # fails with DOS-Extenders.
10506
+ >>>(0x3c.l+0x0a) leshort 2 for MS Windows
10507
+ >>>(0x3c.l+0x0a) leshort 3 for DOS
10508
+ >>>(0x3c.l+0x0a) leshort 4 for MS Windows (VxD)
10509
+ >>>(&0x7c.l+0x26) string UPX \b, UPX compressed
10510
+ >>>&(&0x54.l-3) string UNACE \b, ACE self-extracting archive
10511
+
10512
+ # looks like ASCII, probably some embedded copyright message.
10513
+ # and definitely not NE/LE/LX/PE
10514
+ >>0x3c lelong >0x20000000
10515
+ >>>(4.s*512) leshort !0x014c \b, MZ for MS-DOS
10516
+ # header data too small for extended executable
10517
+ >2 long !0
10518
+ >>0x18 leshort <0x40
10519
+ >>>(4.s*512) leshort !0x014c
10520
+
10521
+ >>>>&(2.s-514) string !LE
10522
+ >>>>>&-2 string !BW \b, MZ for MS-DOS
10523
+ >>>>&(2.s-514) string LE \b, LE
10524
+ >>>>>0x240 search/0x100 DOS/4G for MS-DOS, DOS4GW DOS extender
10525
+ # educated guess since indirection is still not capable enough for complex offset
10526
+ # calculations (next embedded executable would be at &(&2*512+&0-2)
10527
+ # I suspect there are only LE executables in these multi-exe files
10528
+ >>>>&(2.s-514) string BW
10529
+ >>>>>0x240 search/0x100 DOS/4G ,\b LE for MS-DOS, DOS4GW DOS extender (embedded)
10530
+ >>>>>0x240 search/0x100 !DOS/4G ,\b BW collection for MS-DOS
10531
+
10532
+ # This sequence skips to the first COFF segment, usually .text
10533
+ >(4.s*512) leshort 0x014c \b, COFF
10534
+ >>(8.s*16) string go32stub for MS-DOS, DJGPP go32 DOS extender
10535
+ >>(8.s*16) string emx
10536
+ >>>&1 string x for DOS, Win or OS/2, emx %s
10537
+ >>&(&0x42.l-3) byte x
10538
+ >>>&0x26 string UPX \b, UPX compressed
10539
+ # and yet another guess: small .text, and after large .data is unusal, could be 32lite
10540
+ >>&0x2c search/0xa0 .text
10541
+ >>>&0x0b lelong <0x2000
10542
+ >>>>&0 lelong >0x6000 \b, 32lite compressed
10543
+
10544
+ >(8.s*16) string $WdX \b, WDos/X DOS extender
10545
+
10546
+ # .EXE formats (Greg Roelofs, newt@uchicago.edu)
10547
+ #
10548
+ >0x35 string \x8e\xc0\xb9\x08\x00\xf3\xa5\x4a\x75\xeb\x8e\xc3\x8e\xd8\x33\xff\xbe\x30\x00\x05 \b, aPack compressed
10549
+ >0xe7 string LH/2\ Self-Extract \b, %s
10550
+ >0x1c string diet \b, diet compressed
10551
+ >0x1c string LZ09 \b, LZEXE v0.90 compressed
10552
+ >0x1c string LZ91 \b, LZEXE v0.91 compressed
10553
+ >0x1c string tz \b, TinyProg compressed
10554
+ >0x1e string PKLITE \b, %s compressed
10555
+ >0x64 string W\ Collis\0\0 \b, Compack compressed
10556
+ >0x24 string LHa's\ SFX \b, LHa self-extracting archive
10557
+ !:mime application/x-lha
10558
+ >0x24 string LHA's\ SFX \b, LHa self-extracting archive
10559
+ !:mime application/x-lha
10560
+ >0x24 string \ $ARX \b, ARX self-extracting archive
10561
+ >0x24 string \ $LHarc \b, LHarc self-extracting archive
10562
+ >0x20 string SFX\ by\ LARC \b, LARC self-extracting archive
10563
+ >1638 string -lh5- \b, LHa self-extracting archive v2.13S
10564
+ >0x17888 string Rar! \b, RAR self-extracting archive
10565
+ >0x40 string aPKG \b, aPackage self-extracting archive
10566
+
10567
+ >32 string AIN
10568
+ >>35 string 2 \b, AIN 2.x compressed
10569
+ >>35 string <2 \b, AIN 1.x compressed
10570
+ >>35 string >2 \b, AIN 1.x compressed
10571
+ >28 string UC2X \b, UCEXE compressed
10572
+ >28 string WWP\ \b, WWPACK compressed
10573
+
10574
+ # skip to the end of the exe
10575
+ >(4.s*512) long x
10576
+ >>&(2.s-517) byte x
10577
+ >>>&0 string PK\3\4 \b, ZIP self-extracting archive
10578
+ >>>&0 string Rar! \b, RAR self-extracting archive
10579
+ >>>&0 string =!\x11 \b, AIN 2.x self-extracting archive
10580
+ >>>&0 string =!\x12 \b, AIN 2.x self-extracting archive
10581
+ >>>&0 string =!\x17 \b, AIN 1.x self-extracting archive
10582
+ >>>&0 string =!\x18 \b, AIN 1.x self-extracting archive
10583
+ >>>&7 search/400 **ACE** \b, ACE self-extracting archive
10584
+ >>>&0 search/0x480 UC2SFX\ Header \b, UC2 self-extracting archive
10585
+
10586
+ >0x1c string RJSX \b, ARJ self-extracting archive
10587
+ # winarj stores a message in the stub instead of the sig in the MZ header
10588
+ >0x20 search/0xe0 aRJsfX \b, ARJ self-extracting archive
10589
+
10590
+ # a few unknown ZIP sfxes, no idea if they are needed or if they are
10591
+ # already captured by the generic patterns above
10592
+ >0x7a string Windows\ self-extracting\ ZIP \b, ZIP self-extracting archive
10593
+ >(8.s*16) search/0x20 PKSFX \b, ZIP self-extracting archive (PKZIP)
10594
+ # TODO: how to add this? >FileSize-34 string Windows\ Self-Installing\ Executable \b, ZIP self-extracting archive
10595
+ #
10596
+
10597
+ # TELVOX Teleinformatica CODEC self-extractor for OS/2:
10598
+ >49801 string \x79\xff\x80\xff\x76\xff \b, CODEC archive v3.21
10599
+ >>49824 leshort =1 \b, 1 file
10600
+ >>49824 leshort >1 \b, %u files
10601
+
10602
+ # .COM formats (Daniel Quinlan, quinlan@yggdrasil.com)
10603
+ # Uncommenting only the first two lines will cover about 2/3 of COM files,
10604
+ # but it isn't feasible to match all COM files since there must be at least
10605
+ # two dozen different one-byte "magics".
10606
+ # test too generic ?
10607
+ 0 byte 0xe9 DOS executable (COM)
10608
+ >0x1FE leshort 0xAA55 \b, boot code
10609
+ >6 string SFX\ of\ LHarc (%s)
10610
+ 0 belong 0xffffffff DOS executable (device driver)
10611
+ #CMD640X2.SYS
10612
+ >10 string >\x23
10613
+ >>10 string !\x2e
10614
+ >>>17 string <\x5B
10615
+ >>>>10 string x \b, name: %.8s
10616
+ #UDMA.SYS KEYB.SYS CMD640X2.SYS
10617
+ >10 string <\x41
10618
+ >>12 string >\x40
10619
+ >>>10 string !$
10620
+ >>>>12 string x \b, name: %.8s
10621
+ #BTCDROM.SYS ASPICD.SYS
10622
+ >22 string >\x40
10623
+ >>22 string <\x5B
10624
+ >>>23 string <\x5B
10625
+ >>>>22 string x \b, name: %.8s
10626
+ #ATAPICD.SYS
10627
+ >76 string \0
10628
+ >>77 string >\x40
10629
+ >>>77 string <\x5B
10630
+ >>>>77 string x \b, name: %.8s
10631
+ # test too generic ?
10632
+ 0 byte 0x8c DOS executable (COM)
10633
+ # updated by Joerg Jenderek at Oct 2008
10634
+ 0 ulelong 0xffff10eb DR-DOS executable (COM)
10635
+ # byte 0xeb conflicts with "sequent" magic leshort 0xn2eb
10636
+ 0 ubeshort&0xeb8d >0xeb00
10637
+ # DR-DOS STACKER.COM SCREATE.SYS missed
10638
+ >0 byte 0xeb DOS executable (COM)
10639
+ >>0x1FE leshort 0xAA55 \b, boot code
10640
+ >>85 string UPX \b, UPX compressed
10641
+ >>4 string \ $ARX \b, ARX self-extracting archive
10642
+ >>4 string \ $LHarc \b, LHarc self-extracting archive
10643
+ >>0x20e string SFX\ by\ LARC \b, LARC self-extracting archive
10644
+ # updated by Joerg Jenderek at Oct 2008
10645
+ #0 byte 0xb8 COM executable
10646
+ 0 uleshort&0x80ff 0x00b8
10647
+ # modified by Joerg Jenderek
10648
+ >1 lelong !0x21cd4cff COM executable for DOS
10649
+ # http://syslinux.zytor.com/comboot.php
10650
+ # (32-bit COMBOOT) programs *.C32 contain 32-bit code and run in flat-memory 32-bit protected mode
10651
+ # start with assembler instructions mov eax,21cd4cffh
10652
+ 0 uleshort&0xc0ff 0xc0b8
10653
+ >1 lelong 0x21cd4cff COM executable (32-bit COMBOOT)
10654
+ 0 string \x81\xfc
10655
+ >4 string \x77\x02\xcd\x20\xb9
10656
+ >>36 string UPX! FREE-DOS executable (COM), UPX compressed
10657
+ 252 string Must\ have\ DOS\ version DR-DOS executable (COM)
10658
+ # added by Joerg Jenderek at Oct 2008
10659
+ # GRR search is not working
10660
+ #34 search/2 UPX! FREE-DOS executable (COM), UPX compressed
10661
+ 34 string UPX! FREE-DOS executable (COM), UPX compressed
10662
+ 35 string UPX! FREE-DOS executable (COM), UPX compressed
10663
+ # GRR search is not working
10664
+ #2 search/28 \xcd\x21 COM executable for MS-DOS
10665
+ #WHICHFAT.cOM
10666
+ 2 string \xcd\x21 COM executable for DOS
10667
+ #DELTREE.cOM DELTREE2.cOM
10668
+ 4 string \xcd\x21 COM executable for DOS
10669
+ #IFMEMDSK.cOM ASSIGN.cOM COMP.cOM
10670
+ 5 string \xcd\x21 COM executable for DOS
10671
+ #DELTMP.COm HASFAT32.cOM
10672
+ 7 string \xcd\x21
10673
+ >0 byte !0xb8 COM executable for DOS
10674
+ #COMP.cOM MORE.COm
10675
+ 10 string \xcd\x21
10676
+ >5 string !\xcd\x21 COM executable for DOS
10677
+ #comecho.com
10678
+ 13 string \xcd\x21 COM executable for DOS
10679
+ #HELP.COm EDIT.coM
10680
+ 18 string \xcd\x21 COM executable for MS-DOS
10681
+ #NWRPLTRM.COm
10682
+ 23 string \xcd\x21 COM executable for MS-DOS
10683
+ #LOADFIX.cOm LOADFIX.cOm
10684
+ 30 string \xcd\x21 COM executable for MS-DOS
10685
+ #syslinux.com 3.11
10686
+ 70 string \xcd\x21 COM executable for DOS
10687
+ # many compressed/converted COMs start with a copy loop instead of a jump
10688
+ 0x6 search/0xa \xfc\x57\xf3\xa5\xc3 COM executable for MS-DOS
10689
+ 0x6 search/0xa \xfc\x57\xf3\xa4\xc3 COM executable for DOS
10690
+ >0x18 search/0x10 \x50\xa4\xff\xd5\x73 \b, aPack compressed
10691
+ 0x3c string W\ Collis\0\0 COM executable for MS-DOS, Compack compressed
10692
+ # FIXME: missing diet .com compression
10693
+
10694
+ # miscellaneous formats
10695
+ 0 string LZ MS-DOS executable (built-in)
10696
+ #0 byte 0xf0 MS-DOS program library data
10697
+ #
10698
+
10699
+ # AAF files:
10700
+ # <stuartc@rd.bbc.co.uk> Stuart Cunningham
10701
+ 0 string \320\317\021\340\241\261\032\341AAFB\015\000OM\006\016\053\064\001\001\001\377 AAF legacy file using MS Structured Storage
10702
+ >30 byte 9 (512B sectors)
10703
+ >30 byte 12 (4kB sectors)
10704
+ 0 string \320\317\021\340\241\261\032\341\001\002\001\015\000\002\000\000\006\016\053\064\003\002\001\001 AAF file using MS Structured Storage
10705
+ >30 byte 9 (512B sectors)
10706
+ >30 byte 12 (4kB sectors)
10707
+
10708
+ # Popular applications
10709
+ 2080 string Microsoft\ Word\ 6.0\ Document %s
10710
+ !:mime application/msword
10711
+ 2080 string Documento\ Microsoft\ Word\ 6 Spanish Microsoft Word 6 document data
10712
+ !:mime application/msword
10713
+ # Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Word)
10714
+ 2112 string MSWordDoc Microsoft Word document data
10715
+ !:mime application/msword
10716
+ #
10717
+ 0 belong 0x31be0000 Microsoft Word Document
10718
+ !:mime application/msword
10719
+ #
10720
+ 0 string PO^Q` Microsoft Word 6.0 Document
10721
+ !:mime application/msword
10722
+ #
10723
+ 0 string \376\067\0\043 Microsoft Office Document
10724
+ !:mime application/msword
10725
+ 0 string \333\245-\0\0\0 Microsoft Office Document
10726
+ !:mime application/msword
10727
+ 512 string \354\245\301 Microsoft Word Document
10728
+ !:mime application/msword
10729
+ #
10730
+ 2080 string Microsoft\ Excel\ 5.0\ Worksheet %s
10731
+ !:mime application/vnd.ms-excel
10732
+
10733
+ 2080 string Foglio\ di\ lavoro\ Microsoft\ Exce %s
10734
+ !:mime application/vnd.ms-excel
10735
+ #
10736
+ # Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Excel)
10737
+ 2114 string Biff5 Microsoft Excel 5.0 Worksheet
10738
+ !:mime application/vnd.ms-excel
10739
+ # Italian MS-Excel
10740
+ 2121 string Biff5 Microsoft Excel 5.0 Worksheet
10741
+ !:mime application/vnd.ms-excel
10742
+ 0 string \x09\x04\x06\x00\x00\x00\x10\x00 Microsoft Excel Worksheet
10743
+ !:mime application/vnd.ms-excel
10744
+ #
10745
+ 0 belong 0x00001a00 Lotus 1-2-3
10746
+ !:mime application/x-123
10747
+ >4 belong 0x00100400 wk3 document data
10748
+ >4 belong 0x02100400 wk4 document data
10749
+ >4 belong 0x07800100 fm3 or fmb document data
10750
+ >4 belong 0x07800000 fm3 or fmb document data
10751
+ #
10752
+ 0 belong 0x00000200 Lotus 1-2-3
10753
+ !:mime application/x-123
10754
+ >4 belong 0x06040600 wk1 document data
10755
+ >4 belong 0x06800200 fmt document data
10756
+ 0 string WordPro\0 Lotus WordPro
10757
+ !:mime application/vnd.lotus-wordpro
10758
+ 0 string WordPro\r\373 Lotus WordPro
10759
+ !:mime application/vnd.lotus-wordpro
10760
+
10761
+
10762
+ # Summary: Script used by InstallScield to uninstall applications
10763
+ # Extension: .isu
10764
+ # Submitted by: unknown
10765
+ # Modified by (1): Abel Cheung <abelcheung@gmail.com> (replace useless entry)
10766
+ 0 string \x71\xa8\x00\x00\x01\x02
10767
+ >12 string Stirling\ Technologies, InstallShield Uninstall Script
10768
+
10769
+ # Winamp .avs
10770
+ #0 string Nullsoft\ AVS\ Preset\ \060\056\061\032 A plug in for Winamp ms-windows Freeware media player
10771
+ 0 string Nullsoft\ AVS\ Preset\ Winamp plug in
10772
+
10773
+ # Windows Metafont .WMF
10774
+ 0 string \327\315\306\232 ms-windows metafont .wmf
10775
+ 0 string \002\000\011\000 ms-windows metafont .wmf
10776
+ 0 string \001\000\011\000 ms-windows metafont .wmf
10777
+
10778
+ #tz3 files whatever that is (MS Works files)
10779
+ 0 string \003\001\001\004\070\001\000\000 tz3 ms-works file
10780
+ 0 string \003\002\001\004\070\001\000\000 tz3 ms-works file
10781
+ 0 string \003\003\001\004\070\001\000\000 tz3 ms-works file
10782
+
10783
+ # PGP sig files .sig
10784
+ #0 string \211\000\077\003\005\000\063\237\127 065 to \027\266\151\064\005\045\101\233\021\002 PGP sig
10785
+ 0 string \211\000\077\003\005\000\063\237\127\065\027\266\151\064\005\045\101\233\021\002 PGP sig
10786
+ 0 string \211\000\077\003\005\000\063\237\127\066\027\266\151\064\005\045\101\233\021\002 PGP sig
10787
+ 0 string \211\000\077\003\005\000\063\237\127\067\027\266\151\064\005\045\101\233\021\002 PGP sig
10788
+ 0 string \211\000\077\003\005\000\063\237\127\070\027\266\151\064\005\045\101\233\021\002 PGP sig
10789
+ 0 string \211\000\077\003\005\000\063\237\127\071\027\266\151\064\005\045\101\233\021\002 PGP sig
10790
+ 0 string \211\000\225\003\005\000\062\122\207\304\100\345\042 PGP sig
10791
+
10792
+ # windows zips files .dmf
10793
+ 0 string MDIF\032\000\010\000\000\000\372\046\100\175\001\000\001\036\001\000 MS Windows special zipped file
10794
+
10795
+
10796
+ #ico files
10797
+ 0 string \102\101\050\000\000\000\056\000\000\000\000\000\000\000 Icon for MS Windows
10798
+
10799
+ # Windows icons (Ian Springer <ips@fpk.hp.com>)
10800
+ 0 string \000\000\001\000 MS Windows icon resource
10801
+ !:mime image/x-ico
10802
+ >4 byte 1 - 1 icon
10803
+ >4 byte >1 - %d icons
10804
+ >>6 byte >0 \b, %dx
10805
+ >>>7 byte >0 \b%d
10806
+ >>8 byte 0 \b, 256-colors
10807
+ >>8 byte >0 \b, %d-colors
10808
+
10809
+
10810
+ # .chr files
10811
+ 0 string PK\010\010BGI Borland font
10812
+ >4 string >\0 %s
10813
+ # then there is a copyright notice
10814
+
10815
+
10816
+ # .bgi files
10817
+ 0 string pk\010\010BGI Borland device
10818
+ >4 string >\0 %s
10819
+ # then there is a copyright notice
10820
+
10821
+
10822
+ # Windows Recycle Bin record file (named INFO2)
10823
+ # By Abel Cheung (abelcheung AT gmail dot com)
10824
+ # Version 4 always has 280 bytes (0x118) per record, version 5 has 800 bytes
10825
+ # Since Vista uses another structure, INFO2 structure probably won't change
10826
+ # anymore. Detailed analysis in:
10827
+ # http://www.cybersecurityinstitute.biz/downloads/INFO2.pdf
10828
+ 0 lelong 0x00000004
10829
+ >12 lelong 0x00000118 Windows Recycle Bin INFO2 file (Win98 or below)
10830
+
10831
+ 0 lelong 0x00000005
10832
+ >12 lelong 0x00000320 Windows Recycle Bin INFO2 file (Win2k - WinXP)
10833
+
10834
+
10835
+ ##### put in Either Magic/font or Magic/news
10836
+ # Acroread or something files wrongly identified as G3 .pfm
10837
+ # these have the form \000 \001 any? \002 \000 \000
10838
+ # or \000 \001 any? \022 \000 \000
10839
+ 0 belong&0xffff00ff 0x00010012 PFM data
10840
+ >4 string \000\000
10841
+ >6 string >\060 - %s
10842
+
10843
+ 0 belong&0xffff00ff 0x00010002 PFM data
10844
+ >4 string \000\000
10845
+ >6 string >\060 - %s
10846
+ #0 string \000\001 pfm?
10847
+ #>3 string \022\000\000Copyright\ yes
10848
+ #>3 string \002\000\000Copyright\ yes
10849
+ #>3 string >\0 oops, not a font file. Cancel that.
10850
+ #it clashes with ttf files so put it lower down.
10851
+
10852
+ # From Doug Lee via a FreeBSD pr
10853
+ 9 string GERBILDOC First Choice document
10854
+ 9 string GERBILDB First Choice database
10855
+ 9 string GERBILCLIP First Choice database
10856
+ 0 string GERBIL First Choice device file
10857
+ 9 string RABBITGRAPH RabbitGraph file
10858
+ 0 string DCU1 Borland Delphi .DCU file
10859
+ 0 string =!<spell> MKS Spell hash list (old format)
10860
+ 0 string =!<spell2> MKS Spell hash list
10861
+ # Too simple - MPi
10862
+ #0 string AH Halo(TM) bitmapped font file
10863
+ 0 lelong 0x08086b70 TurboC BGI file
10864
+ 0 lelong 0x08084b50 TurboC Font file
10865
+
10866
+ # WARNING: below line conflicts with Infocom game data Z-machine 3
10867
+ 0 byte 0x03 DBase 3 data file
10868
+ >0x04 lelong 0 (no records)
10869
+ >0x04 lelong >0 (%ld records)
10870
+ 0 byte 0x83 DBase 3 data file with memo(s)
10871
+ >0x04 lelong 0 (no records)
10872
+ >0x04 lelong >0 (%ld records)
10873
+ 0 leshort 0x0006 DBase 3 index file
10874
+ 0 string PMCC Windows 3.x .GRP file
10875
+ 1 string RDC-meg MegaDots
10876
+ >8 byte >0x2F version %c
10877
+ >9 byte >0x2F \b.%c file
10878
+ 0 lelong 0x4C
10879
+ >4 lelong 0x00021401 Windows shortcut file
10880
+
10881
+ # DOS EPS Binary File Header
10882
+ # From: Ed Sznyter <ews@Black.Market.NET>
10883
+ 0 belong 0xC5D0D3C6 DOS EPS Binary File
10884
+ >4 long >0 Postscript starts at byte %d
10885
+ >>8 long >0 length %d
10886
+ >>>12 long >0 Metafile starts at byte %d
10887
+ >>>>16 long >0 length %d
10888
+ >>>20 long >0 TIFF starts at byte %d
10889
+ >>>>24 long >0 length %d
10890
+
10891
+ # TNEF magic From "Joomy" <joomy@se-ed.net>
10892
+ # Microsoft Outlook's Transport Neutral Encapsulation Format (TNEF)
10893
+ 0 leshort 0x223e9f78 TNEF
10894
+ !:mime application/vnd.ms-tnef
10895
+
10896
+ # HtmlHelp files (.chm)
10897
+ 0 string ITSF\003\000\000\000\x60\000\000\000\001\000\000\000 MS Windows HtmlHelp Data
10898
+
10899
+ # GFA-BASIC (Wolfram Kleff)
10900
+ 2 string GFA-BASIC3 GFA-BASIC 3 data
10901
+
10902
+ #------------------------------------------------------------------------------
10903
+ # From Stuart Caie <kyzer@4u.net> (developer of cabextract)
10904
+ # Microsoft Cabinet files
10905
+ 0 string MSCF\0\0\0\0 Microsoft Cabinet archive data
10906
+ !:mime application/vnd.ms-cab-compressed
10907
+ >8 lelong x \b, %u bytes
10908
+ >28 leshort 1 \b, 1 file
10909
+ >28 leshort >1 \b, %u files
10910
+
10911
+ # InstallShield Cabinet files
10912
+ 0 string ISc( InstallShield Cabinet archive data
10913
+ >5 byte&0xf0 =0x60 version 6,
10914
+ >5 byte&0xf0 !0x60 version 4/5,
10915
+ >(12.l+40) lelong x %u files
10916
+
10917
+ # Windows CE package files
10918
+ 0 string MSCE\0\0\0\0 Microsoft WinCE install header
10919
+ >20 lelong 0 \b, architecture-independent
10920
+ >20 lelong 103 \b, Hitachi SH3
10921
+ >20 lelong 104 \b, Hitachi SH4
10922
+ >20 lelong 0xA11 \b, StrongARM
10923
+ >20 lelong 4000 \b, MIPS R4000
10924
+ >20 lelong 10003 \b, Hitachi SH3
10925
+ >20 lelong 10004 \b, Hitachi SH3E
10926
+ >20 lelong 10005 \b, Hitachi SH4
10927
+ >20 lelong 70001 \b, ARM 7TDMI
10928
+ >52 leshort 1 \b, 1 file
10929
+ >52 leshort >1 \b, %u files
10930
+ >56 leshort 1 \b, 1 registry entry
10931
+ >56 leshort >1 \b, %u registry entries
10932
+
10933
+
10934
+ # Windows Enhanced Metafile (EMF)
10935
+ # See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp
10936
+ # for further information.
10937
+ 0 ulelong 1
10938
+ >40 string \ EMF Windows Enhanced Metafile (EMF) image data
10939
+ >>44 ulelong x version 0x%x
10940
+
10941
+ # From: Alex Beregszaszi <alex@fsn.hu>
10942
+ 0 string COWD VMWare3
10943
+ >4 byte 3 disk image
10944
+ >>32 lelong x (%d/
10945
+ >>36 lelong x \b%d/
10946
+ >>40 lelong x \b%d)
10947
+ >4 byte 2 undoable disk image
10948
+ >>32 string >\0 (%s)
10949
+
10950
+ 0 string VMDK VMware4 disk image
10951
+ 0 string KDMV VMware4 disk image
10952
+
10953
+ #--------------------------------------------------------------------
10954
+ # Qemu Emulator Images
10955
+ # Lines written by Friedrich Schwittay (f.schwittay@yousable.de)
10956
+ # Made by reading sources and doing trial and error on existing
10957
+ # qcow files
10958
+ 0 string QFI Qemu Image, Format: Qcow
10959
+
10960
+ # Uncomment the following line to display Magic (only used for debugging
10961
+ # this magic number)
10962
+ #>0 string x , Magic: %s
10963
+
10964
+ # There are currently 2 Versions: "1" and "2"
10965
+ # I do not use Version 2 and therefor branch here
10966
+ # but can assure: it works (tested on both versions)
10967
+ # Also my Qemu 0.9.0 which uses this Version 2 refuses
10968
+ # to start in its bios
10969
+ >0x04 belong 2 , Version: 2
10970
+ >0x04 belong 1 , Version: 1
10971
+
10972
+ # Using the existence of the Backing File Offset to Branch or not
10973
+ # to read Backing File Information
10974
+ >>0xc belong >0 , Backing File( Offset: %lu
10975
+ >>>(0xc.L) string >\0 , Path: %s
10976
+
10977
+ # Didn't get the trick here how qemu stores the "Size" at this Position
10978
+ # There is actually something stored but nothing makes sense
10979
+ # The header in the sources talks about it
10980
+ #>>>16 lelong x , Size: %lu
10981
+
10982
+ # Modification time of the Backing File
10983
+ # Really useful if you want to know if your backing
10984
+ # file is still usable together with this image
10985
+ >>>20 bedate x , Mtime: %s )
10986
+
10987
+ # Don't know how to calculate in Magicfiles
10988
+ # Also: this Information is not reliably
10989
+ # stored in image-files
10990
+ >>24 lelong x , Disk Size could be: %d * 256 bytes
10991
+
10992
+ 0 string QEVM QEMU's suspend to disk image
10993
+
10994
+ 0 string Bochs\ Virtual\ HD\ Image Bochs disk image,
10995
+ >32 string x type %s,
10996
+ >48 string x subtype %s
10997
+
10998
+ 0 lelong 0x02468ace Bochs Sparse disk image
10999
+
11000
+ # from http://filext.com by Derek M Jones <derek@knosof.co.uk>
11001
+ # False positive with PPT (also currently this string is too long)
11002
+ #0 string \xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3E\x00\x03\x00\xFE\xFF\x09\x00\x06 Microsoft Installer
11003
+ 0 string \320\317\021\340\241\261\032\341 Microsoft Office Document
11004
+ #>48 byte 0x1B Excel Document
11005
+ #!:mime application/vnd.ms-excel
11006
+ >546 string bjbj Microsoft Word Document
11007
+ !:mime application/msword
11008
+ >546 string jbjb Microsoft Word Document
11009
+ !:mime application/msword
11010
+
11011
+ 0 string \224\246\056 Microsoft Word Document
11012
+ !:mime application/msword
11013
+
11014
+ 512 string R\0o\0o\0t\0\ \0E\0n\0t\0r\0y Microsoft Word Document
11015
+ !:mime application/msword
11016
+
11017
+ # From: "Nelson A. de Oliveira" <naoliv@gmail.com>
11018
+ # Magic type for Dell's BIOS .hdr files
11019
+ # Dell's .hdr
11020
+ 0 string $RBU
11021
+ >23 string Dell %s system BIOS
11022
+ >48 string x version %.3s
11023
+
11024
+ # Type: Microsoft DirectDraw Surface
11025
+ # URL: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp
11026
+ # From: Morten Hustveit <morten@debian.org>
11027
+ 0 string DDS\040\174\000\000\000 Microsoft DirectDraw Surface (DDS),
11028
+ >16 lelong >0 %hd x
11029
+ >12 lelong >0 %hd,
11030
+ >84 string x %.4s
11031
+
11032
+ # Type: Microsoft Document Imaging Format (.mdi)
11033
+ # URL: http://en.wikipedia.org/wiki/Microsoft_Document_Imaging_Format
11034
+ # From: Daniele Sempione <scrows@oziosi.org>
11035
+ 0 short 0x5045 Microsoft Document Imaging Format
11036
+
11037
+ # MS eBook format (.lit)
11038
+ 0 string ITOLITLS Microsoft Reader eBook Data
11039
+ >8 lelong x \b, version %u
11040
+ !:mime application/x-ms-reader
11041
+
11042
+ #------------------------------------------------------------------------------
11043
+ # msvc: file(1) magic for msvc
11044
+ # "H. Nanosecond" <aldomel@ix.netcom.com>
11045
+ # Microsoft visual C
11046
+ #
11047
+ # I have version 1.0
11048
+
11049
+ # .aps
11050
+ 0 string HWB\000\377\001\000\000\000 Microsoft Visual C .APS file
11051
+
11052
+ # .ide
11053
+ #too long 0 string \102\157\162\154\141\156\144\040\103\053\053\040\120\162\157\152\145\143\164\040\106\151\154\145\012\000\032\000\002\000\262\000\272\276\372\316 MSVC .ide
11054
+ 0 string \102\157\162\154\141\156\144\040\103\053\053\040\120\162\157 MSVC .ide
11055
+
11056
+ # .res
11057
+ 0 string \000\000\000\000\040\000\000\000\377 MSVC .res
11058
+ 0 string \377\003\000\377\001\000\020\020\350 MSVC .res
11059
+ 0 string \377\003\000\377\001\000\060\020\350 MSVC .res
11060
+
11061
+ #.lib
11062
+ 0 string \360\015\000\000 Microsoft Visual C library
11063
+ 0 string \360\075\000\000 Microsoft Visual C library
11064
+ 0 string \360\175\000\000 Microsoft Visual C library
11065
+
11066
+ #.pch
11067
+ 0 string DTJPCH0\000\022\103\006\200 Microsoft Visual C .pch
11068
+
11069
+ # .pdb
11070
+ # too long 0 string Microsoft\ C/C++\ program\ database\
11071
+ 0 string Microsoft\ C/C++\ MSVC program database
11072
+ >18 string program\ database\
11073
+ >33 string >\0 ver %s
11074
+
11075
+ #.sbr
11076
+ 0 string \000\002\000\007\000 MSVC .sbr
11077
+ >5 string >\0 %s
11078
+
11079
+ #.bsc
11080
+ 0 string \002\000\002\001 MSVC .bsc
11081
+
11082
+ #.wsp
11083
+ 0 string 1.00\ .0000.0000\000\003 MSVC .wsp version 1.0000.0000
11084
+ # these seem to start with the version and contain menus
11085
+ # ------------------------------------------------------------------------
11086
+ # mup: file(1) magic for Mup (Music Publisher) input file.
11087
+ #
11088
+ # From: Abel Cheung <abel (@) oaka.org>
11089
+ #
11090
+ # NOTE: This header is mainly proposed in the Arkkra mailing list,
11091
+ # and is not a mandatory header because of old mup input file
11092
+ # compatibility. Noteedit also use mup format, but is not forcing
11093
+ # user to use any header as well.
11094
+ #
11095
+ 0 search/1 //!Mup Mup music publication program input text
11096
+ >6 string -Arkkra (Arkkra)
11097
+ >>13 string -
11098
+ >>>16 string .
11099
+ >>>>14 string x \b, need V%.4s
11100
+ >>>15 string .
11101
+ >>>>14 string x \b, need V%.3s
11102
+ >6 string -
11103
+ >>9 string .
11104
+ >>>7 string x \b, need V%.4s
11105
+ >>8 string .
11106
+ >>>7 string x \b, need V%.3s
11107
+
11108
+ #-----------------------------------------------------------------------------
11109
+ # natinst: file(1) magic for National Instruments Code Files
11110
+
11111
+ #
11112
+ # From <egamez@fcfm.buap.mx> Enrique G�mez-Flores
11113
+ # version 1
11114
+ # Many formats still missing, we use, for the moment LabVIEW
11115
+ # We guess VXI format file. VISA, LabWindowsCVI, BridgeVIEW, etc, are missing
11116
+ #
11117
+ 0 string RSRC National Instruments,
11118
+ # Check if it's a LabVIEW File
11119
+ >8 string LV LabVIEW File,
11120
+ # Check wich kind of file is
11121
+ >>10 string SB Code Resource File, data
11122
+ >>10 string IN Virtual Instrument Program, data
11123
+ >>10 string AR VI Library, data
11124
+ # This is for Menu Libraries
11125
+ >8 string LMNULBVW Portable File Names, data
11126
+ # This is for General Resources
11127
+ >8 string rsc Resources File, data
11128
+ # This is for VXI Package
11129
+ 0 string VMAP National Instruments, VXI File, data
11130
+
11131
+ #------------------------------------------------------------------------------
11132
+ # ncr: file(1) magic for NCR Tower objects
11133
+ #
11134
+ # contributed by
11135
+ # Michael R. Wayne *** TMC & Associates *** INTERNET: wayne@ford-vax.arpa
11136
+ # uucp: {philabs | pyramid} !fmsrl7!wayne OR wayne@fmsrl7.UUCP
11137
+ #
11138
+ 0 beshort 000610 Tower/XP rel 2 object
11139
+ >12 belong >0 not stripped
11140
+ >20 beshort 0407 executable
11141
+ >20 beshort 0410 pure executable
11142
+ >22 beshort >0 - version %ld
11143
+ 0 beshort 000615 Tower/XP rel 2 object
11144
+ >12 belong >0 not stripped
11145
+ >20 beshort 0407 executable
11146
+ >20 beshort 0410 pure executable
11147
+ >22 beshort >0 - version %ld
11148
+ 0 beshort 000620 Tower/XP rel 3 object
11149
+ >12 belong >0 not stripped
11150
+ >20 beshort 0407 executable
11151
+ >20 beshort 0410 pure executable
11152
+ >22 beshort >0 - version %ld
11153
+ 0 beshort 000625 Tower/XP rel 3 object
11154
+ >12 belong >0 not stripped
11155
+ >20 beshort 0407 executable
11156
+ >20 beshort 0410 pure executable
11157
+ >22 beshort >0 - version %ld
11158
+ 0 beshort 000630 Tower32/600/400 68020 object
11159
+ >12 belong >0 not stripped
11160
+ >20 beshort 0407 executable
11161
+ >20 beshort 0410 pure executable
11162
+ >22 beshort >0 - version %ld
11163
+ 0 beshort 000640 Tower32/800 68020
11164
+ >18 beshort &020000 w/68881 object
11165
+ >18 beshort &040000 compatible object
11166
+ >18 beshort &060000 object
11167
+ >20 beshort 0407 executable
11168
+ >20 beshort 0413 pure executable
11169
+ >12 belong >0 not stripped
11170
+ >22 beshort >0 - version %ld
11171
+ 0 beshort 000645 Tower32/800 68010
11172
+ >18 beshort &040000 compatible object
11173
+ >18 beshort &060000 object
11174
+ >20 beshort 0407 executable
11175
+ >20 beshort 0413 pure executable
11176
+ >12 belong >0 not stripped
11177
+ >22 beshort >0 - version %ld
11178
+
11179
+ #------------------------------------------------------------------------------
11180
+ # netbsd: file(1) magic for NetBSD objects
11181
+ #
11182
+ # All new-style magic numbers are in network byte order.
11183
+ #
11184
+
11185
+ 0 lelong 000000407 a.out NetBSD little-endian object file
11186
+ >16 lelong >0 not stripped
11187
+ 0 belong 000000407 a.out NetBSD big-endian object file
11188
+ >16 belong >0 not stripped
11189
+
11190
+ 0 belong&0377777777 041400413 a.out NetBSD/i386 demand paged
11191
+ >0 byte &0x80
11192
+ >>20 lelong <4096 shared library
11193
+ >>20 lelong =4096 dynamically linked executable
11194
+ >>20 lelong >4096 dynamically linked executable
11195
+ >0 byte ^0x80 executable
11196
+ >16 lelong >0 not stripped
11197
+ 0 belong&0377777777 041400410 a.out NetBSD/i386 pure
11198
+ >0 byte &0x80 dynamically linked executable
11199
+ >0 byte ^0x80 executable
11200
+ >16 lelong >0 not stripped
11201
+ 0 belong&0377777777 041400407 a.out NetBSD/i386
11202
+ >0 byte &0x80 dynamically linked executable
11203
+ >0 byte ^0x80
11204
+ >>0 byte &0x40 position independent
11205
+ >>20 lelong !0 executable
11206
+ >>20 lelong =0 object file
11207
+ >16 lelong >0 not stripped
11208
+ 0 belong&0377777777 041400507 a.out NetBSD/i386 core
11209
+ >12 string >\0 from '%s'
11210
+ >32 lelong !0 (signal %d)
11211
+
11212
+ 0 belong&0377777777 041600413 a.out NetBSD/m68k demand paged
11213
+ >0 byte &0x80
11214
+ >>20 belong <8192 shared library
11215
+ >>20 belong =8192 dynamically linked executable
11216
+ >>20 belong >8192 dynamically linked executable
11217
+ >0 byte ^0x80 executable
11218
+ >16 belong >0 not stripped
11219
+ 0 belong&0377777777 041600410 a.out NetBSD/m68k pure
11220
+ >0 byte &0x80 dynamically linked executable
11221
+ >0 byte ^0x80 executable
11222
+ >16 belong >0 not stripped
11223
+ 0 belong&0377777777 041600407 a.out NetBSD/m68k
11224
+ >0 byte &0x80 dynamically linked executable
11225
+ >0 byte ^0x80
11226
+ >>0 byte &0x40 position independent
11227
+ >>20 belong !0 executable
11228
+ >>20 belong =0 object file
11229
+ >16 belong >0 not stripped
11230
+ 0 belong&0377777777 041600507 a.out NetBSD/m68k core
11231
+ >12 string >\0 from '%s'
11232
+ >32 belong !0 (signal %d)
11233
+
11234
+ 0 belong&0377777777 042000413 a.out NetBSD/m68k4k demand paged
11235
+ >0 byte &0x80
11236
+ >>20 belong <4096 shared library
11237
+ >>20 belong =4096 dynamically linked executable
11238
+ >>20 belong >4096 dynamically linked executable
11239
+ >0 byte ^0x80 executable
11240
+ >16 belong >0 not stripped
11241
+ 0 belong&0377777777 042000410 a.out NetBSD/m68k4k pure
11242
+ >0 byte &0x80 dynamically linked executable
11243
+ >0 byte ^0x80 executable
11244
+ >16 belong >0 not stripped
11245
+ 0 belong&0377777777 042000407 a.out NetBSD/m68k4k
11246
+ >0 byte &0x80 dynamically linked executable
11247
+ >0 byte ^0x80
11248
+ >>0 byte &0x40 position independent
11249
+ >>20 belong !0 executable
11250
+ >>20 belong =0 object file
11251
+ >16 belong >0 not stripped
11252
+ 0 belong&0377777777 042000507 a.out NetBSD/m68k4k core
11253
+ >12 string >\0 from '%s'
11254
+ >32 belong !0 (signal %d)
11255
+
11256
+ 0 belong&0377777777 042200413 a.out NetBSD/ns32532 demand paged
11257
+ >0 byte &0x80
11258
+ >>20 lelong <4096 shared library
11259
+ >>20 lelong =4096 dynamically linked executable
11260
+ >>20 lelong >4096 dynamically linked executable
11261
+ >0 byte ^0x80 executable
11262
+ >16 lelong >0 not stripped
11263
+ 0 belong&0377777777 042200410 a.out NetBSD/ns32532 pure
11264
+ >0 byte &0x80 dynamically linked executable
11265
+ >0 byte ^0x80 executable
11266
+ >16 lelong >0 not stripped
11267
+ 0 belong&0377777777 042200407 a.out NetBSD/ns32532
11268
+ >0 byte &0x80 dynamically linked executable
11269
+ >0 byte ^0x80
11270
+ >>0 byte &0x40 position independent
11271
+ >>20 lelong !0 executable
11272
+ >>20 lelong =0 object file
11273
+ >16 lelong >0 not stripped
11274
+ 0 belong&0377777777 042200507 a.out NetBSD/ns32532 core
11275
+ >12 string >\0 from '%s'
11276
+ >32 lelong !0 (signal %d)
11277
+
11278
+ 0 belong&0377777777 045200507 a.out NetBSD/powerpc core
11279
+ >12 string >\0 from '%s'
11280
+
11281
+ 0 belong&0377777777 042400413 a.out NetBSD/sparc demand paged
11282
+ >0 byte &0x80
11283
+ >>20 belong <8192 shared library
11284
+ >>20 belong =8192 dynamically linked executable
11285
+ >>20 belong >8192 dynamically linked executable
11286
+ >0 byte ^0x80 executable
11287
+ >16 belong >0 not stripped
11288
+ 0 belong&0377777777 042400410 a.out NetBSD/sparc pure
11289
+ >0 byte &0x80 dynamically linked executable
11290
+ >0 byte ^0x80 executable
11291
+ >16 belong >0 not stripped
11292
+ 0 belong&0377777777 042400407 a.out NetBSD/sparc
11293
+ >0 byte &0x80 dynamically linked executable
11294
+ >0 byte ^0x80
11295
+ >>0 byte &0x40 position independent
11296
+ >>20 belong !0 executable
11297
+ >>20 belong =0 object file
11298
+ >16 belong >0 not stripped
11299
+ 0 belong&0377777777 042400507 a.out NetBSD/sparc core
11300
+ >12 string >\0 from '%s'
11301
+ >32 belong !0 (signal %d)
11302
+
11303
+ 0 belong&0377777777 042600413 a.out NetBSD/pmax demand paged
11304
+ >0 byte &0x80
11305
+ >>20 lelong <4096 shared library
11306
+ >>20 lelong =4096 dynamically linked executable
11307
+ >>20 lelong >4096 dynamically linked executable
11308
+ >0 byte ^0x80 executable
11309
+ >16 lelong >0 not stripped
11310
+ 0 belong&0377777777 042600410 a.out NetBSD/pmax pure
11311
+ >0 byte &0x80 dynamically linked executable
11312
+ >0 byte ^0x80 executable
11313
+ >16 lelong >0 not stripped
11314
+ 0 belong&0377777777 042600407 a.out NetBSD/pmax
11315
+ >0 byte &0x80 dynamically linked executable
11316
+ >0 byte ^0x80
11317
+ >>0 byte &0x40 position independent
11318
+ >>20 lelong !0 executable
11319
+ >>20 lelong =0 object file
11320
+ >16 lelong >0 not stripped
11321
+ 0 belong&0377777777 042600507 a.out NetBSD/pmax core
11322
+ >12 string >\0 from '%s'
11323
+ >32 lelong !0 (signal %d)
11324
+
11325
+ 0 belong&0377777777 043000413 a.out NetBSD/vax 1k demand paged
11326
+ >0 byte &0x80
11327
+ >>20 lelong <4096 shared library
11328
+ >>20 lelong =4096 dynamically linked executable
11329
+ >>20 lelong >4096 dynamically linked executable
11330
+ >0 byte ^0x80 executable
11331
+ >16 lelong >0 not stripped
11332
+ 0 belong&0377777777 043000410 a.out NetBSD/vax 1k pure
11333
+ >0 byte &0x80 dynamically linked executable
11334
+ >0 byte ^0x80 executable
11335
+ >16 lelong >0 not stripped
11336
+ 0 belong&0377777777 043000407 a.out NetBSD/vax 1k
11337
+ >0 byte &0x80 dynamically linked executable
11338
+ >0 byte ^0x80
11339
+ >>0 byte &0x40 position independent
11340
+ >>20 lelong !0 executable
11341
+ >>20 lelong =0 object file
11342
+ >16 lelong >0 not stripped
11343
+ 0 belong&0377777777 043000507 a.out NetBSD/vax 1k core
11344
+ >12 string >\0 from '%s'
11345
+ >32 lelong !0 (signal %d)
11346
+
11347
+ 0 belong&0377777777 045400413 a.out NetBSD/vax 4k demand paged
11348
+ >0 byte &0x80
11349
+ >>20 lelong <4096 shared library
11350
+ >>20 lelong =4096 dynamically linked executable
11351
+ >>20 lelong >4096 dynamically linked executable
11352
+ >0 byte ^0x80 executable
11353
+ >16 lelong >0 not stripped
11354
+ 0 belong&0377777777 045400410 a.out NetBSD/vax 4k pure
11355
+ >0 byte &0x80 dynamically linked executable
11356
+ >0 byte ^0x80 executable
11357
+ >16 lelong >0 not stripped
11358
+ 0 belong&0377777777 045400407 a.out NetBSD/vax 4k
11359
+ >0 byte &0x80 dynamically linked executable
11360
+ >0 byte ^0x80
11361
+ >>0 byte &0x40 position independent
11362
+ >>20 lelong !0 executable
11363
+ >>20 lelong =0 object file
11364
+ >16 lelong >0 not stripped
11365
+ 0 belong&0377777777 045400507 a.out NetBSD/vax 4k core
11366
+ >12 string >\0 from '%s'
11367
+ >32 lelong !0 (signal %d)
11368
+
11369
+ # NetBSD/alpha does not support (and has never supported) a.out objects,
11370
+ # so no rules are provided for them. NetBSD/alpha ELF objects are
11371
+ # dealt with in "elf".
11372
+ 0 lelong 0x00070185 ECOFF NetBSD/alpha binary
11373
+ >10 leshort 0x0001 not stripped
11374
+ >10 leshort 0x0000 stripped
11375
+ 0 belong&0377777777 043200507 a.out NetBSD/alpha core
11376
+ >12 string >\0 from '%s'
11377
+ >32 lelong !0 (signal %d)
11378
+
11379
+ 0 belong&0377777777 043400413 a.out NetBSD/mips demand paged
11380
+ >0 byte &0x80
11381
+ >>20 belong <8192 shared library
11382
+ >>20 belong =8192 dynamically linked executable
11383
+ >>20 belong >8192 dynamically linked executable
11384
+ >0 byte ^0x80 executable
11385
+ >16 belong >0 not stripped
11386
+ 0 belong&0377777777 043400410 a.out NetBSD/mips pure
11387
+ >0 byte &0x80 dynamically linked executable
11388
+ >0 byte ^0x80 executable
11389
+ >16 belong >0 not stripped
11390
+ 0 belong&0377777777 043400407 a.out NetBSD/mips
11391
+ >0 byte &0x80 dynamically linked executable
11392
+ >0 byte ^0x80
11393
+ >>0 byte &0x40 position independent
11394
+ >>20 belong !0 executable
11395
+ >>20 belong =0 object file
11396
+ >16 belong >0 not stripped
11397
+ 0 belong&0377777777 043400507 a.out NetBSD/mips core
11398
+ >12 string >\0 from '%s'
11399
+ >32 belong !0 (signal %d)
11400
+
11401
+ 0 belong&0377777777 043600413 a.out NetBSD/arm32 demand paged
11402
+ >0 byte &0x80
11403
+ >>20 lelong <4096 shared library
11404
+ >>20 lelong =4096 dynamically linked executable
11405
+ >>20 lelong >4096 dynamically linked executable
11406
+ >0 byte ^0x80 executable
11407
+ >16 lelong >0 not stripped
11408
+ 0 belong&0377777777 043600410 a.out NetBSD/arm32 pure
11409
+ >0 byte &0x80 dynamically linked executable
11410
+ >0 byte ^0x80 executable
11411
+ >16 lelong >0 not stripped
11412
+ 0 belong&0377777777 043600407 a.out NetBSD/arm32
11413
+ >0 byte &0x80 dynamically linked executable
11414
+ >0 byte ^0x80
11415
+ >>0 byte &0x40 position independent
11416
+ >>20 lelong !0 executable
11417
+ >>20 lelong =0 object file
11418
+ >16 lelong >0 not stripped
11419
+ # NetBSD/arm26 has always used ELF objects, but it shares a core file
11420
+ # format with NetBSD/arm32.
11421
+ 0 belong&0377777777 043600507 a.out NetBSD/arm core
11422
+ >12 string >\0 from '%s'
11423
+ >32 lelong !0 (signal %d)
11424
+
11425
+ #------------------------------------------------------------------------------
11426
+ # netscape: file(1) magic for Netscape files
11427
+ # "H. Nanosecond" <aldomel@ix.netcom.com>
11428
+ # version 3 and 4 I think
11429
+ #
11430
+
11431
+ # Netscape Address book .nab
11432
+ 0 string \000\017\102\104\000\000\000\000\000\000\001\000\000\000\000\002\000\000\000\002\000\000\004\000 Netscape Address book
11433
+
11434
+ # Netscape Communicator address book
11435
+ 0 string \000\017\102\111 Netscape Communicator address book
11436
+
11437
+ # .snm Caches
11438
+ 0 string #\ Netscape\ folder\ cache Netscape folder cache
11439
+ 0 string \000\036\204\220\000 Netscape folder cache
11440
+ # .n2p
11441
+ # Net 2 Phone
11442
+ #0 string 123\130\071\066\061\071\071\071\060\070\061\060\061\063\060
11443
+ 0 string SX961999 Net2phone
11444
+
11445
+ #
11446
+ #This is files ending in .art, FIXME add more rules
11447
+ 0 string JG\004\016\0\0\0\0 ART
11448
+
11449
+ #------------------------------------------------------------------------------
11450
+ # netware: file(1) magic for NetWare Loadable Modules (NLMs)
11451
+ # From: Mads Martin Joergensen <mmj@suse.de>
11452
+
11453
+ 0 string NetWare\ Loadable\ Module NetWare Loadable Module
11454
+
11455
+ #------------------------------------------------------------------------------
11456
+ # news: file(1) magic for SunOS NeWS fonts (not "news" as in "netnews")
11457
+ #
11458
+ 0 string StartFontMetrics ASCII font metrics
11459
+ 0 string StartFont ASCII font bits
11460
+ 0 belong 0x137A2944 NeWS bitmap font
11461
+ 0 belong 0x137A2947 NeWS font family
11462
+ 0 belong 0x137A2950 scalable OpenFont binary
11463
+ 0 belong 0x137A2951 encrypted scalable OpenFont binary
11464
+ 8 belong 0x137A2B45 X11/NeWS bitmap font
11465
+ 8 belong 0x137A2B48 X11/NeWS font family
11466
+ #------------------------------------------------------------------------------
11467
+ # nitpicker: file(1) magic for Flowfiles.
11468
+ # From: Christian Jachmann <C.Jachmann@gmx.net> http://www.nitpicker.de
11469
+ 0 string NPFF NItpicker Flow File
11470
+ >4 byte x V%d.
11471
+ >5 byte x %d
11472
+ >6 bedate x started: %s
11473
+ >10 bedate x stopped: %s
11474
+ >14 belong x Bytes: %u
11475
+ >18 belong x Bytes1: %u
11476
+ >22 belong x Flows: %u
11477
+ >26 belong x Pkts: %u
11478
+
11479
+ #------------------------------------------------------------------------------
11480
+ # ocaml: file(1) magic for Objective Caml files.
11481
+ 0 string Caml1999 OCaml
11482
+ >8 string X exec file
11483
+ >8 string I interface file (.cmi)
11484
+ >8 string O object file (.cmo)
11485
+ >8 string A library file (.cma)
11486
+ >8 string Y native object file (.cmx)
11487
+ >8 string Z native library file (.cmxa)
11488
+ >8 string M abstract syntax tree implementation file
11489
+ >8 string N abstract syntax tree interface file
11490
+ >9 string >\0 (Version %3.3s)
11491
+ #------------------------------------------------------------------------------
11492
+ # octave binary data file(1) magic, from Dirk Eddelbuettel <edd@debian.org>
11493
+ 0 string Octave-1-L Octave binary data (little endian)
11494
+ 0 string Octave-1-B Octave binary data (big endian)
11495
+
11496
+ #------------------------------------------------------------------------------
11497
+ # Microsoft OLE 2 Compound Documents : file(1) magic for Microsoft Structured
11498
+ # storage (http://en.wikipedia.org/wiki/Structured_Storage)
11499
+ # Additional tests for OLE 2 Compound Documents should be under this recipe.
11500
+
11501
+ 0 string \320\317\021\340\241\261\032\341 OLE 2 Compound Document
11502
+ # - Microstation V8 DGN files (www.bentley.com)
11503
+ # Last update on 10/23/2006 by Lester Hightower
11504
+ > 0x480 string D\000g\000n\000~\000H : Microstation V8 DGN
11505
+ # - Visio documents
11506
+ # Last update on 10/23/2006 by Lester Hightower
11507
+ > 0x480 string V\000i\000s\000i\000o\000D\000o\000c : Visio Document
11508
+
11509
+ #------------------------------------------------------------------------------
11510
+ # olf: file(1) magic for OLF executables
11511
+ #
11512
+ # We have to check the byte order flag to see what byte order all the
11513
+ # other stuff in the header is in.
11514
+ #
11515
+ # MIPS R3000 may also be for MIPS R2000.
11516
+ # What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
11517
+ #
11518
+ # Created by Erik Theisen <etheisen@openbsd.org>
11519
+ # Based on elf from Daniel Quinlan <quinlan@yggdrasil.com>
11520
+ 0 string \177OLF OLF
11521
+ >4 byte 0 invalid class
11522
+ >4 byte 1 32-bit
11523
+ >4 byte 2 64-bit
11524
+ >7 byte 0 invalid os
11525
+ >7 byte 1 OpenBSD
11526
+ >7 byte 2 NetBSD
11527
+ >7 byte 3 FreeBSD
11528
+ >7 byte 4 4.4BSD
11529
+ >7 byte 5 Linux
11530
+ >7 byte 6 SVR4
11531
+ >7 byte 7 esix
11532
+ >7 byte 8 Solaris
11533
+ >7 byte 9 Irix
11534
+ >7 byte 10 SCO
11535
+ >7 byte 11 Dell
11536
+ >7 byte 12 NCR
11537
+ >5 byte 0 invalid byte order
11538
+ >5 byte 1 LSB
11539
+ >>16 leshort 0 no file type,
11540
+ >>16 leshort 1 relocatable,
11541
+ >>16 leshort 2 executable,
11542
+ >>16 leshort 3 shared object,
11543
+ # Core handling from Peter Tobias <tobias@server.et-inf.fho-emden.de>
11544
+ # corrections by Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de>
11545
+ >>16 leshort 4 core file
11546
+ >>>(0x38+0xcc) string >\0 of '%s'
11547
+ >>>(0x38+0x10) lelong >0 (signal %d),
11548
+ >>16 leshort &0xff00 processor-specific,
11549
+ >>18 leshort 0 no machine,
11550
+ >>18 leshort 1 AT&T WE32100 - invalid byte order,
11551
+ >>18 leshort 2 SPARC - invalid byte order,
11552
+ >>18 leshort 3 Intel 80386,
11553
+ >>18 leshort 4 Motorola 68000 - invalid byte order,
11554
+ >>18 leshort 5 Motorola 88000 - invalid byte order,
11555
+ >>18 leshort 6 Intel 80486,
11556
+ >>18 leshort 7 Intel 80860,
11557
+ >>18 leshort 8 MIPS R3000_BE - invalid byte order,
11558
+ >>18 leshort 9 Amdahl - invalid byte order,
11559
+ >>18 leshort 10 MIPS R3000_LE,
11560
+ >>18 leshort 11 RS6000 - invalid byte order,
11561
+ >>18 leshort 15 PA-RISC - invalid byte order,
11562
+ >>18 leshort 16 nCUBE,
11563
+ >>18 leshort 17 VPP500,
11564
+ >>18 leshort 18 SPARC32PLUS,
11565
+ >>18 leshort 20 PowerPC,
11566
+ >>18 leshort 0x9026 Alpha,
11567
+ >>20 lelong 0 invalid version
11568
+ >>20 lelong 1 version 1
11569
+ >>36 lelong 1 MathCoPro/FPU/MAU Required
11570
+ >8 string >\0 (%s)
11571
+ >5 byte 2 MSB
11572
+ >>16 beshort 0 no file type,
11573
+ >>16 beshort 1 relocatable,
11574
+ >>16 beshort 2 executable,
11575
+ >>16 beshort 3 shared object,
11576
+ >>16 beshort 4 core file,
11577
+ >>>(0x38+0xcc) string >\0 of '%s'
11578
+ >>>(0x38+0x10) belong >0 (signal %d),
11579
+ >>16 beshort &0xff00 processor-specific,
11580
+ >>18 beshort 0 no machine,
11581
+ >>18 beshort 1 AT&T WE32100,
11582
+ >>18 beshort 2 SPARC,
11583
+ >>18 beshort 3 Intel 80386 - invalid byte order,
11584
+ >>18 beshort 4 Motorola 68000,
11585
+ >>18 beshort 5 Motorola 88000,
11586
+ >>18 beshort 6 Intel 80486 - invalid byte order,
11587
+ >>18 beshort 7 Intel 80860,
11588
+ >>18 beshort 8 MIPS R3000_BE,
11589
+ >>18 beshort 9 Amdahl,
11590
+ >>18 beshort 10 MIPS R3000_LE - invalid byte order,
11591
+ >>18 beshort 11 RS6000,
11592
+ >>18 beshort 15 PA-RISC,
11593
+ >>18 beshort 16 nCUBE,
11594
+ >>18 beshort 17 VPP500,
11595
+ >>18 beshort 18 SPARC32PLUS,
11596
+ >>18 beshort 20 PowerPC or cisco 4500,
11597
+ >>18 beshort 21 cisco 7500,
11598
+ >>18 beshort 24 cisco SVIP,
11599
+ >>18 beshort 25 cisco 7200,
11600
+ >>18 beshort 36 cisco 12000,
11601
+ >>18 beshort 0x9026 Alpha,
11602
+ >>20 belong 0 invalid version
11603
+ >>20 belong 1 version 1
11604
+ >>36 belong 1 MathCoPro/FPU/MAU Required
11605
+ #------------------------------------------------------------------------------
11606
+ # os2: file(1) magic for OS/2 files
11607
+ #
11608
+
11609
+ # Provided 1998/08/22 by
11610
+ # David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net>
11611
+ 1 search/1 InternetShortcut MS Windows 95 Internet shortcut text
11612
+ >24 search/1 >\ (URL=<%s>)
11613
+
11614
+ # OS/2 URL objects
11615
+ # Provided 1998/08/22 by
11616
+ # David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net>
11617
+ #0 string http: OS/2 URL object text
11618
+ #>5 string >\ (WWW) <http:%s>
11619
+ #0 string mailto: OS/2 URL object text
11620
+ #>7 string >\ (email) <%s>
11621
+ #0 string news: OS/2 URL object text
11622
+ #>5 string >\ (Usenet) <%s>
11623
+ #0 string ftp: OS/2 URL object text
11624
+ #>4 string >\ (FTP) <ftp:%s>
11625
+ #0 string file: OS/2 URL object text
11626
+ #>5 string >\ (Local file) <%s>
11627
+
11628
+ # >>>>> OS/2 INF/HLP <<<<< (source: Daniel Dissett ddissett@netcom.com)
11629
+ # Carl Hauser (chauser.parc@xerox.com) and
11630
+ # Marcus Groeber (marcusg@ph-cip.uni-koeln.de)
11631
+ # list the following header format in inf02a.doc:
11632
+ #
11633
+ # int16 ID; // ID magic word (5348h = "HS")
11634
+ # int8 unknown1; // unknown purpose, could be third letter of ID
11635
+ # int8 flags; // probably a flag word...
11636
+ # // bit 0: set if INF style file
11637
+ # // bit 4: set if HLP style file
11638
+ # // patching this byte allows reading HLP files
11639
+ # // using the VIEW command, while help files
11640
+ # // seem to work with INF settings here as well.
11641
+ # int16 hdrsize; // total size of header
11642
+ # int16 unknown2; // unknown purpose
11643
+ #
11644
+ 0 string HSP\x01\x9b\x00 OS/2 INF
11645
+ >107 string >0 (%s)
11646
+ 0 string HSP\x10\x9b\x00 OS/2 HLP
11647
+ >107 string >0 (%s)
11648
+
11649
+ # OS/2 INI (this is a guess)
11650
+ 0 string \xff\xff\xff\xff\x14\0\0\0 OS/2 INI
11651
+ #------------------------------------------------------------------------------
11652
+ # os400: file(1) magic for IBM OS/400 files
11653
+ #
11654
+ # IBM OS/400 (i5/OS) Save file (SAVF) - gerardo.cacciari@gmail.com
11655
+ # In spite of its quite variable format (due to internal memory page
11656
+ # length differences between CISC and RISC versions of the OS) the
11657
+ # SAVF structure hasn't suitable offsets to identify the catalog
11658
+ # header in the first descriptor where there are some useful infos,
11659
+ # so we must search in a somewhat large area for a particular string
11660
+ # that represents the EBCDIC encoding of 'QSRDSSPC' (save/restore
11661
+ # descriptor space) preceded by a two byte constant.
11662
+ #
11663
+ 1090 search/7393 \x19\xDB\xD8\xE2\xD9\xC4\xE2\xE2\xD7\xC3 IBM OS/400 save file data
11664
+ >&212 byte 0x01 \b, created with SAVOBJ
11665
+ >&212 byte 0x02 \b, created with SAVLIB
11666
+ >&212 byte 0x07 \b, created with SAVCFG
11667
+ >&212 byte 0x08 \b, created with SAVSECDTA
11668
+ >&212 byte 0x0A \b, created with SAVSECDTA
11669
+ >&212 byte 0x0B \b, created with SAVDLO
11670
+ >&212 byte 0x0D \b, created with SAVLICPGM
11671
+ >&212 byte 0x11 \b, created with SAVCHGOBJ
11672
+ >&213 byte 0x44 \b, at least V5R4 to open
11673
+ >&213 byte 0x43 \b, at least V5R3 to open
11674
+ >&213 byte 0x42 \b, at least V5R2 to open
11675
+ >&213 byte 0x41 \b, at least V5R1 to open
11676
+ >&213 byte 0x40 \b, at least V4R5 to open
11677
+ >&213 byte 0x3F \b, at least V4R4 to open
11678
+ >&213 byte 0x3E \b, at least V4R3 to open
11679
+ >&213 byte 0x3C \b, at least V4R2 to open
11680
+ >&213 byte 0x3D \b, at least V4R1M4 to open
11681
+ >&213 byte 0x3B \b, at least V4R1 to open
11682
+ >&213 byte 0x3A \b, at least V3R7 to open
11683
+ >&213 byte 0x35 \b, at least V3R6 to open
11684
+ >&213 byte 0x36 \b, at least V3R2 to open
11685
+ >&213 byte 0x34 \b, at least V3R1 to open
11686
+ >&213 byte 0x31 \b, at least V3R0M5 to open
11687
+ >&213 byte 0x30 \b, at least V2R3 to open
11688
+ #
11689
+ # Copyright (c) 1996 Ignatios Souvatzis. All rights reserved.
11690
+ #
11691
+ # Redistribution and use in source and binary forms, with or without
11692
+ # modification, are permitted provided that the following conditions
11693
+ # are met:
11694
+ # 1. Redistributions of source code must retain the above copyright
11695
+ # notice, this list of conditions and the following disclaimer.
11696
+ # 2. Redistributions in binary form must reproduce the above copyright
11697
+ # notice, this list of conditions and the following disclaimer in the
11698
+ # documentation and/or other materials provided with the distribution.
11699
+ # 3. All advertising materials mentioning features or use of this software
11700
+ # must display the following acknowledgement:
11701
+ # This product includes software developed by Ignatios Souvatzis for
11702
+ # the NetBSD project.
11703
+ # 4. The name of the author may not be used to endorse or promote products
11704
+ # derived from this software without specific prior written permission.
11705
+ #
11706
+ #
11707
+ # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
11708
+ # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
11709
+ # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11710
+ # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
11711
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
11712
+ # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
11713
+ # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
11714
+ # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
11715
+ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
11716
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
11717
+ #
11718
+ #
11719
+ #
11720
+ # OS9/6809 module descriptions:
11721
+ #
11722
+ 0 beshort 0x87CD OS9/6809 module:
11723
+ #
11724
+ >6 byte&0x0f 0x00 non-executable
11725
+ >6 byte&0x0f 0x01 machine language
11726
+ >6 byte&0x0f 0x02 BASIC I-code
11727
+ >6 byte&0x0f 0x03 Pascal P-code
11728
+ >6 byte&0x0f 0x04 C I-code
11729
+ >6 byte&0x0f 0x05 COBOL I-code
11730
+ >6 byte&0x0f 0x06 Fortran I-code
11731
+ #
11732
+ >6 byte&0xf0 0x10 program executable
11733
+ >6 byte&0xf0 0x20 subroutine
11734
+ >6 byte&0xf0 0x30 multi-module
11735
+ >6 byte&0xf0 0x40 data module
11736
+ #
11737
+ >6 byte&0xf0 0xC0 system module
11738
+ >6 byte&0xf0 0xD0 file manager
11739
+ >6 byte&0xf0 0xE0 device driver
11740
+ >6 byte&0xf0 0xF0 device descriptor
11741
+ #
11742
+ # OS9/m68k stuff (to be continued)
11743
+ #
11744
+ 0 beshort 0x4AFC OS9/68K module:
11745
+ #
11746
+ # attr
11747
+ >0x14 byte&0x80 0x80 re-entrant
11748
+ >0x14 byte&0x40 0x40 ghost
11749
+ >0x14 byte&0x20 0x20 system-state
11750
+ #
11751
+ # lang:
11752
+ #
11753
+ >0x13 byte 1 machine language
11754
+ >0x13 byte 2 BASIC I-code
11755
+ >0x13 byte 3 Pascal P-code
11756
+ >0x13 byte 4 C I-code
11757
+ >0x13 byte 5 COBOL I-code
11758
+ >0x13 byte 6 Fortran I-code
11759
+ #
11760
+ #
11761
+ # type:
11762
+ #
11763
+ >0x12 byte 1 program executable
11764
+ >0x12 byte 2 subroutine
11765
+ >0x12 byte 3 multi-module
11766
+ >0x12 byte 4 data module
11767
+ >0x12 byte 11 trap library
11768
+ >0x12 byte 12 system module
11769
+ >0x12 byte 13 file manager
11770
+ >0x12 byte 14 device driver
11771
+ >0x12 byte 15 device descriptor
11772
+ #
11773
+ # Mach magic number info
11774
+ #
11775
+ 0 long 0xefbe OSF/Rose object
11776
+ # I386 magic number info
11777
+ #
11778
+ 0 short 0565 i386 COFF object
11779
+
11780
+ #------------------------------------------------------------------------------
11781
+ # palm: file(1) magic for PalmOS {.prc,.pdb}: applications, docfiles, and hacks
11782
+ #
11783
+ # Brian Lalor <blalor@hcirisc.cs.binghamton.edu>
11784
+
11785
+ # appl
11786
+ 60 belong 0x6170706c PalmOS application
11787
+ >0 string >\0 "%s"
11788
+ # TEXt
11789
+ 60 belong 0x54455874 AportisDoc file
11790
+ >0 string >\0 "%s"
11791
+ # HACK
11792
+ 60 belong 0x4841434b HackMaster hack
11793
+ >0 string >\0 "%s"
11794
+
11795
+ # Variety of PalmOS document types
11796
+ # Michael-John Turner <mj@debian.org>
11797
+ # Thanks to Hasan Umit Ezerce <humit@tr-net.net.tr> for his DocType
11798
+ 60 string BVokBDIC BDicty PalmOS document
11799
+ >0 string >\0 "%s"
11800
+ 60 string DB99DBOS DB PalmOS document
11801
+ >0 string >\0 "%s"
11802
+ 60 string vIMGView FireViewer/ImageViewer PalmOS document
11803
+ >0 string >\0 "%s"
11804
+ 60 string PmDBPmDB HanDBase PalmOS document
11805
+ >0 string >\0 "%s"
11806
+ 60 string InfoINDB InfoView PalmOS document
11807
+ >0 string >\0 "%s"
11808
+ 60 string ToGoToGo iSilo PalmOS document
11809
+ >0 string >\0 "%s"
11810
+ 60 string JfDbJBas JFile PalmOS document
11811
+ >0 string >\0 "%s"
11812
+ 60 string JfDbJFil JFile Pro PalmOS document
11813
+ >0 string >\0 "%s"
11814
+ 60 string DATALSdb List PalmOS document
11815
+ >0 string >\0 "%s"
11816
+ 60 string Mdb1Mdb1 MobileDB PalmOS document
11817
+ >0 string >\0 "%s"
11818
+ 60 string PNRdPPrs PeanutPress PalmOS document
11819
+ >0 string >\0 "%s"
11820
+ 60 string DataPlkr Plucker PalmOS document
11821
+ >0 string >\0 "%s"
11822
+ 60 string DataSprd QuickSheet PalmOS document
11823
+ >0 string >\0 "%s"
11824
+ 60 string SM01SMem SuperMemo PalmOS document
11825
+ >0 string >\0 "%s"
11826
+ 60 string TEXtTlDc TealDoc PalmOS document
11827
+ >0 string >\0 "%s"
11828
+ 60 string InfoTlIf TealInfo PalmOS document
11829
+ >0 string >\0 "%s"
11830
+ 60 string DataTlMl TealMeal PalmOS document
11831
+ >0 string >\0 "%s"
11832
+ 60 string DataTlPt TealPaint PalmOS document
11833
+ >0 string >\0 "%s"
11834
+ 60 string dataTDBP ThinkDB PalmOS document
11835
+ >0 string >\0 "%s"
11836
+ 60 string TdatTide Tides PalmOS document
11837
+ >0 string >\0 "%s"
11838
+ 60 string ToRaTRPW TomeRaider PalmOS document
11839
+ >0 string >\0 "%s"
11840
+
11841
+ # A GutenPalm zTXT etext for use on Palm Pilots (http://gutenpalm.sf.net)
11842
+ # For version 1.xx zTXTs, outputs version and numbers of bookmarks and
11843
+ # annotations.
11844
+ # For other versions, just outputs version.
11845
+ #
11846
+ 60 string zTXT A GutenPalm zTXT e-book
11847
+ >0 string >\0 "%s"
11848
+ >(0x4E.L) byte 0
11849
+ >>(0x4E.L+1) byte x (v0.%02d)
11850
+ >(0x4E.L) byte 1
11851
+ >>(0x4E.L+1) byte x (v1.%02d)
11852
+ >>>(0x4E.L+10) beshort >0
11853
+ >>>>(0x4E.L+10) beshort <2 - 1 bookmark
11854
+ >>>>(0x4E.L+10) beshort >1 - %d bookmarks
11855
+ >>>(0x4E.L+14) beshort >0
11856
+ >>>>(0x4E.L+14) beshort <2 - 1 annotation
11857
+ >>>>(0x4E.L+14) beshort >1 - %d annotations
11858
+ >(0x4E.L) byte >1 (v%d.
11859
+ >>(0x4E.L+1) byte x %02d)
11860
+
11861
+ # Palm OS .prc file types
11862
+ 60 string libr Palm OS dynamic library data
11863
+ >0 string >\0 "%s"
11864
+ 60 string ptch Palm OS operating system patch data
11865
+ >0 string >\0 "%s"
11866
+
11867
+ # Mobipocket (www.mobipocket.com), donated by Carl Witty
11868
+ 60 string BOOKMOBI Mobipocket E-book
11869
+ >0 string >\0 "%s"
11870
+
11871
+ #------------------------------------------------------------------------------
11872
+ #
11873
+ # Parix COFF executables
11874
+ # From: Ignatios Souvatzis <ignatios@cs.uni-bonn.de>
11875
+ #
11876
+ 0 beshort&0xfff 0xACE PARIX
11877
+ >0 byte&0xf0 0x80 T800
11878
+ >0 byte&0xf0 0x90 T9000
11879
+ >19 byte&0x02 0x02 executable
11880
+ >19 byte&0x02 0x00 object
11881
+ >19 byte&0x0c 0x00 not stripped
11882
+
11883
+ #------------------------------------------------------------------------------
11884
+ # pbm: file(1) magic for Portable Bitmap files
11885
+ #
11886
+ # XXX - byte order?
11887
+ #
11888
+ 0 short 0x2a17 "compact bitmap" format (Poskanzer)
11889
+ #------------------------------------------------------------------------------
11890
+ # pdf: file(1) magic for Portable Document Format
11891
+ #
11892
+
11893
+ 0 string %PDF- PDF document
11894
+ !:mime application/pdf
11895
+ >5 byte x \b, version %c
11896
+ >7 byte x \b.%c
11897
+
11898
+ # From: Nick Schmalenberger <nick@schmalenberger.us>
11899
+ # Forms Data Format
11900
+ 0 string %FDF- FDF document
11901
+ >5 byte x \b, version %c
11902
+ >7 byte x \b.%c
11903
+
11904
+ #------------------------------------------------------------------------------
11905
+ # pdp: file(1) magic for PDP-11 executable/object and APL workspace
11906
+ #
11907
+ 0 lelong 0101555 PDP-11 single precision APL workspace
11908
+ 0 lelong 0101554 PDP-11 double precision APL workspace
11909
+ #
11910
+ # PDP-11 a.out
11911
+ #
11912
+ 0 leshort 0407 PDP-11 executable
11913
+ >8 leshort >0 not stripped
11914
+ >15 byte >0 - version %ld
11915
+
11916
+ 0 leshort 0401 PDP-11 UNIX/RT ldp
11917
+ 0 leshort 0405 PDP-11 old overlay
11918
+
11919
+ 0 leshort 0410 PDP-11 pure executable
11920
+ >8 leshort >0 not stripped
11921
+ >15 byte >0 - version %ld
11922
+
11923
+ 0 leshort 0411 PDP-11 separate I&D executable
11924
+ >8 leshort >0 not stripped
11925
+ >15 byte >0 - version %ld
11926
+
11927
+ 0 leshort 0437 PDP-11 kernel overlay
11928
+
11929
+ # These last three are derived from 2.11BSD file(1)
11930
+ 0 leshort 0413 PDP-11 demand-paged pure executable
11931
+ >8 leshort >0 not stripped
11932
+
11933
+ 0 leshort 0430 PDP-11 overlaid pure executable
11934
+ >8 leshort >0 not stripped
11935
+
11936
+ 0 leshort 0431 PDP-11 overlaid separate executable
11937
+ >8 leshort >0 not stripped
11938
+ #------------------------------------------------------------------------------
11939
+ # perl: file(1) magic for Larry Wall's perl language.
11940
+ #
11941
+ # The `eval' lines recognizes an outrageously clever hack.
11942
+ # Keith Waclena <keith@cerberus.uchicago.edu>
11943
+ # Send additions to <perl5-porters@perl.org>
11944
+ 0 search/1/b #!\ /bin/perl Perl script text executable
11945
+ !:mime text/x-perl
11946
+ 0 search/1 eval\ "exec\ /bin/perl Perl script text
11947
+ !:mime text/x-perl
11948
+ 0 search/1/b #!\ /usr/bin/perl Perl script text executable
11949
+ !:mime text/x-perl
11950
+ 0 search/1 eval\ "exec\ /usr/bin/perl Perl script text
11951
+ !:mime text/x-perl
11952
+ 0 search/1/b #!\ /usr/local/bin/perl Perl script text executable
11953
+ !:mime text/x-perl
11954
+ 0 search/1 eval\ "exec\ /usr/local/bin/perl Perl script text
11955
+ !:mime text/x-perl
11956
+ 0 search/1 eval\ '(exit\ $?0)'\ &&\ eval\ 'exec Perl script text
11957
+ !:mime text/x-perl
11958
+
11959
+
11960
+ # by Dmitry V. Levin and Alexey Tourbin
11961
+ # check the first line
11962
+ 0 search/1 package
11963
+ >0 regex \^package[\ \t]+[0-9A-Za-z_:]+\ *; Perl5 module source text
11964
+ # not 'p', check other lines
11965
+ 0 search/1 !p
11966
+ >0 regex \^package[\ \t]+[0-9A-Za-z_:]+\ *;
11967
+ >>0 regex \^1\ *;|\^(use|sub|my)\ .*[(;{=] Perl5 module source text
11968
+
11969
+
11970
+
11971
+ # Perl POD documents
11972
+ # From: Tom Hukins <tom@eborcom.com>
11973
+ 0 search/1/B \=pod\n Perl POD document text
11974
+ 0 search/1/B \n\=pod\n Perl POD document text
11975
+ 0 search/1/B \=head1\ Perl POD document text
11976
+ 0 search/1/B \n\=head1\ Perl POD document text
11977
+ 0 search/1/B \=head2\ Perl POD document text
11978
+ 0 search/1/B \n\=head2\ Perl POD document text
11979
+
11980
+ # Perl Storable data files.
11981
+ 0 string perl-store perl Storable (v0.6) data
11982
+ >4 byte >0 (net-order %d)
11983
+ >>4 byte &01 (network-ordered)
11984
+ >>4 byte =3 (major 1)
11985
+ >>4 byte =2 (major 1)
11986
+
11987
+ 0 string pst0 perl Storable (v0.7) data
11988
+ >4 byte >0
11989
+ >>4 byte &01 (network-ordered)
11990
+ >>4 byte =5 (major 2)
11991
+ >>4 byte =4 (major 2)
11992
+ >>5 byte >0 (minor %d)
11993
+
11994
+ #------------------------------------------------------------------------------
11995
+ # pgp: file(1) magic for Pretty Good Privacy
11996
+ # see http://lists.gnupg.org/pipermail/gnupg-devel/1999-September/016052.html
11997
+ #
11998
+ 0 beshort 0x9900 PGP key public ring
11999
+ !:mime application/x-pgp-keyring
12000
+ 0 beshort 0x9501 PGP key security ring
12001
+ !:mime application/x-pgp-keyring
12002
+ 0 beshort 0x9500 PGP key security ring
12003
+ !:mime application/x-pgp-keyring
12004
+ 0 beshort 0xa600 PGP encrypted data
12005
+ #!:mime application/pgp-encrypted
12006
+ #0 string -----BEGIN\040PGP text/PGP armored data
12007
+ !:mime text/PGP # encoding: armored data
12008
+ #>15 string PUBLIC\040KEY\040BLOCK- public key block
12009
+ #>15 string MESSAGE- message
12010
+ #>15 string SIGNED\040MESSAGE- signed message
12011
+ #>15 string PGP\040SIGNATURE- signature
12012
+
12013
+ 2 string ---BEGIN\ PGP\ PUBLIC\ KEY\ BLOCK- PGP public key block
12014
+ !:mime application/pgp-keys
12015
+ 0 string -----BEGIN\040PGP\40MESSAGE- PGP message
12016
+ !:mime application/pgp
12017
+ 0 string -----BEGIN\040PGP\40SIGNATURE- PGP signature
12018
+ !:mime application/pgp-signature
12019
+
12020
+ #------------------------------------------------------------------------------
12021
+ # pkgadd: file(1) magic for SysV R4 PKG Datastreams
12022
+ #
12023
+ 0 string #\ PaCkAgE\ DaTaStReAm pkg Datastream (SVR4)
12024
+ !:mime application/x-svr4-package
12025
+
12026
+ #------------------------------------------------------------------------------
12027
+ # plan9: file(1) magic for AT&T Bell Labs' Plan 9 executables
12028
+ # From: "Stefan A. Haubenthal" <polluks@web.de>
12029
+ #
12030
+ 0 belong 0x00000107 Plan 9 executable, Motorola 68k
12031
+ 0 belong 0x000001EB Plan 9 executable, Intel 386
12032
+ 0 belong 0x00000247 Plan 9 executable, Intel 960
12033
+ 0 belong 0x000002AB Plan 9 executable, SPARC
12034
+ 0 belong 0x00000407 Plan 9 executable, MIPS R3000
12035
+ 0 belong 0x0000048B Plan 9 executable, AT&T DSP 3210
12036
+ 0 belong 0x00000517 Plan 9 executable, MIPS R4000 BE
12037
+ 0 belong 0x000005AB Plan 9 executable, AMD 29000
12038
+ 0 belong 0x00000647 Plan 9 executable, ARM 7-something
12039
+ 0 belong 0x000006EB Plan 9 executable, PowerPC
12040
+ 0 belong 0x00000797 Plan 9 executable, MIPS R4000 LE
12041
+ 0 belong 0x0000084B Plan 9 executable, DEC Alpha
12042
+
12043
+ #------------------------------------------------------------------------------
12044
+ # plus5: file(1) magic for Plus Five's UNIX MUMPS
12045
+ #
12046
+ # XXX - byte order? Paging Hokey....
12047
+ #
12048
+ 0 short 0x259 mumps avl global
12049
+ >2 byte >0 (V%d)
12050
+ >6 byte >0 with %d byte name
12051
+ >7 byte >0 and %d byte data cells
12052
+ 0 short 0x25a mumps blt global
12053
+ >2 byte >0 (V%d)
12054
+ >8 short >0 - %d byte blocks
12055
+ >15 byte 0x00 - P/D format
12056
+ >15 byte 0x01 - P/K/D format
12057
+ >15 byte 0x02 - K/D format
12058
+ >15 byte >0x02 - Bad Flags
12059
+
12060
+ #------------------------------------------------------------------------------
12061
+ # printer: file(1) magic for printer-formatted files
12062
+ #
12063
+
12064
+ # PostScript, updated by Daniel Quinlan (quinlan@yggdrasil.com)
12065
+ 0 string %! PostScript document text
12066
+ !:mime application/postscript
12067
+ !:apple ASPSTEXT
12068
+ >2 string PS-Adobe- conforming
12069
+ >>11 string >\0 DSC level %.3s
12070
+ >>>15 string EPS \b, type %s
12071
+ >>>15 string Query \b, type %s
12072
+ >>>15 string ExitServer \b, type %s
12073
+ >>>15 search/1000 %%LanguageLevel:\
12074
+ >>>>&0 string >\0 \b, Level %s
12075
+ # Some PCs have the annoying habit of adding a ^D as a document separator
12076
+ 0 string \004%! PostScript document text
12077
+ !:mime application/postscript
12078
+ !:apple ASPSTEXT
12079
+ >3 string PS-Adobe- conforming
12080
+ >>12 string >\0 DSC level %.3s
12081
+ >>>16 string EPS \b, type %s
12082
+ >>>16 string Query \b, type %s
12083
+ >>>16 string ExitServer \b, type %s
12084
+ >>>16 search/1000 %%LanguageLevel:\
12085
+ >>>>&0 string >\0 \b, Level %s
12086
+ 0 string \033%-12345X%!PS PostScript document
12087
+
12088
+ # DOS EPS Binary File Header
12089
+ # From: Ed Sznyter <ews@Black.Market.NET>
12090
+ 0 belong 0xC5D0D3C6 DOS EPS Binary File
12091
+ >4 long >0 Postscript starts at byte %d
12092
+ >>8 long >0 length %d
12093
+ >>>12 long >0 Metafile starts at byte %d
12094
+ >>>>16 long >0 length %d
12095
+ >>>20 long >0 TIFF starts at byte %d
12096
+ >>>>24 long >0 length %d
12097
+
12098
+ # Summary: Adobe's PostScript Printer Description File
12099
+ # Extension: .ppd
12100
+ # Reference: http://partners.adobe.com/public/developer/en/ps/5003.PPD_Spec_v4.3.pdf, Section 3.8
12101
+ # Submitted by: Yves Arrouye <arrouye@marin.fdn.fr>
12102
+ #
12103
+ 0 string *PPD-Adobe:\x20 PPD file
12104
+ >&0 string x \b, version %s
12105
+
12106
+ # HP Printer Job Language
12107
+ 0 string \033%-12345X@PJL HP Printer Job Language data
12108
+ # HP Printer Job Language
12109
+ # The header found on Win95 HP plot files is the "Silliest Thing possible"
12110
+ # (TM)
12111
+ # Every driver puts the language at some random position, with random case
12112
+ # (LANGUAGE and Language)
12113
+ # For example the LaserJet 5L driver puts the "PJL ENTER LANGUAGE" in line 10
12114
+ # From: Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
12115
+ #
12116
+ 0 string \033%-12345X@PJL HP Printer Job Language data
12117
+ >&0 string >\0 %s
12118
+ >>&0 string >\0 %s
12119
+ >>>&0 string >\0 %s
12120
+ >>>>&0 string >\0 %s
12121
+ #>15 string \ ENTER\ LANGUAGE\ =
12122
+ #>31 string PostScript PostScript
12123
+
12124
+ # HP Printer Control Language, Daniel Quinlan (quinlan@yggdrasil.com)
12125
+ 0 string \033E\033 HP PCL printer data
12126
+ >3 string \&l0A - default page size
12127
+ >3 string \&l1A - US executive page size
12128
+ >3 string \&l2A - US letter page size
12129
+ >3 string \&l3A - US legal page size
12130
+ >3 string \&l26A - A4 page size
12131
+ >3 string \&l80A - Monarch envelope size
12132
+ >3 string \&l81A - No. 10 envelope size
12133
+ >3 string \&l90A - Intl. DL envelope size
12134
+ >3 string \&l91A - Intl. C5 envelope size
12135
+ >3 string \&l100A - Intl. B5 envelope size
12136
+ >3 string \&l-81A - No. 10 envelope size (landscape)
12137
+ >3 string \&l-90A - Intl. DL envelope size (landscape)
12138
+
12139
+ # IMAGEN printer-ready files:
12140
+ 0 string @document( Imagen printer
12141
+ # this only works if "language xxx" is first item in Imagen header.
12142
+ >10 string language\ impress (imPRESS data)
12143
+ >10 string language\ daisy (daisywheel text)
12144
+ >10 string language\ diablo (daisywheel text)
12145
+ >10 string language\ printer (line printer emulation)
12146
+ >10 string language\ tektronix (Tektronix 4014 emulation)
12147
+ # Add any other languages that your Imagen uses - remember
12148
+ # to keep the word `text' if the file is human-readable.
12149
+ # [GRR 950115: missing "postscript" or "ultrascript" (whatever it was called)]
12150
+ #
12151
+ # Now magic for IMAGEN font files...
12152
+ 0 string Rast RST-format raster font data
12153
+ >45 string >0 face %s
12154
+ # From Jukka Ukkonen
12155
+ 0 string \033[K\002\0\0\017\033(a\001\0\001\033(g Canon Bubble Jet BJC formatted data
12156
+
12157
+ # From <mike@flyn.org>
12158
+ # These are the /etc/magic entries to decode data sent to an Epson printer.
12159
+ 0 string \x1B\x40\x1B\x28\x52\x08\x00\x00REMOTE1P Epson Stylus Color 460 data
12160
+
12161
+
12162
+ #------------------------------------------------------------------------------
12163
+ # zenographics: file(1) magic for Zenographics ZjStream printer data
12164
+ # Rick Richardson rickr@mn.rr.com
12165
+ 0 string JZJZ
12166
+ >0x12 string ZZ Zenographics ZjStream printer data (big-endian)
12167
+ 0 string ZJZJ
12168
+ >0x12 string ZZ Zenographics ZjStream printer data (little-endian)
12169
+
12170
+
12171
+ #------------------------------------------------------------------------------
12172
+ # Oak Technologies printer stream
12173
+ # Rick Richardson <rickr@mn.rr.com>
12174
+ 0 string OAK
12175
+ >0x07 byte 0
12176
+ >0x0b byte 0 Oak Technologies printer stream
12177
+
12178
+ # This would otherwise be recognized as PostScript - nick@debian.org
12179
+ 0 string %!VMF SunClock's Vector Map Format data
12180
+
12181
+ #------------------------------------------------------------------------------
12182
+ # HP LaserJet 1000 series downloadable firmware file
12183
+ 0 string \xbe\xefABCDEFGH HP LaserJet 1000 series downloadable firmware
12184
+
12185
+ # From: Paolo <oopla@users.sf.net>
12186
+ # Epson ESC/Page, ESC/PageColor
12187
+ 0 string \x1b\x01@EJL Epson ESC/Page language printer data
12188
+
12189
+ #------------------------------------------------------------------------------
12190
+ # project: file(1) magic for Project management
12191
+ #
12192
+ # Magic strings for ftnchek project files. Alexander Mai
12193
+ 0 string FTNCHEK_\ P project file for ftnchek
12194
+ >10 string 1 version 2.7
12195
+ >10 string 2 version 2.8 to 2.10
12196
+ >10 string 3 version 2.11 or later
12197
+
12198
+ #------------------------------------------------------------------------------
12199
+ # psdbms: file(1) magic for psdatabase
12200
+ #
12201
+ 0 belong&0xff00ffff 0x56000000 ps database
12202
+ >1 string >\0 version %s
12203
+ >4 string >\0 from kernel %s
12204
+ #------------------------------------------------------------------------------
12205
+ # psion: file(1) magic for Psion handhelds data
12206
+ # from: Peter Breitenlohner <peb@mppmu.mpg.de>
12207
+ #
12208
+ 0 lelong 0x10000037 Psion Series 5
12209
+ >4 lelong 0x10000039 font file
12210
+ >4 lelong 0x1000003A printer driver
12211
+ >4 lelong 0x1000003B clipboard
12212
+ >4 lelong 0x10000042 multi-bitmap image
12213
+ >4 lelong 0x1000006A application information file
12214
+ >4 lelong 0x1000006D
12215
+ >>8 lelong 0x1000007D sketch image
12216
+ !:mime image/x-psion-sketch
12217
+ >>8 lelong 0x1000007E voice note
12218
+ >>8 lelong 0x1000007F word file
12219
+ >>8 lelong 0x10000085 OPL program
12220
+ >>8 lelong 0x10000088 sheet file
12221
+ >>8 lelong 0x100001C4 EasyFax initialisation file
12222
+ >4 lelong 0x10000073 OPO module
12223
+ >4 lelong 0x10000074 OPL application
12224
+ >4 lelong 0x1000008A exported multi-bitmap image
12225
+
12226
+ 0 lelong 0x10000041 Psion Series 5 ROM multi-bitmap image
12227
+
12228
+ 0 lelong 0x10000050 Psion Series 5
12229
+ >4 lelong 0x1000006D database
12230
+ >4 lelong 0x100000E4 ini file
12231
+
12232
+ 0 lelong 0x10000079 Psion Series 5 binary:
12233
+ >4 lelong 0x00000000 DLL
12234
+ >4 lelong 0x10000049 comms hardware library
12235
+ >4 lelong 0x1000004A comms protocol library
12236
+ >4 lelong 0x1000005D OPX
12237
+ >4 lelong 0x1000006C application
12238
+ >4 lelong 0x1000008D DLL
12239
+ >4 lelong 0x100000AC logical device driver
12240
+ >4 lelong 0x100000AD physical device driver
12241
+ >4 lelong 0x100000E5 file transfer protocol
12242
+ >4 lelong 0x100000E5 file transfer protocol
12243
+ >4 lelong 0x10000140 printer definition
12244
+ >4 lelong 0x10000141 printer definition
12245
+
12246
+ 0 lelong 0x1000007A Psion Series 5 executable
12247
+
12248
+ #------------------------------------------------------------------------------
12249
+ # pulsar: file(1) magic for Pulsar POP3 daemon binary files
12250
+ #
12251
+ # http://pulsar.sourceforge.net
12252
+ # mailto:rok.papez@lugos.si
12253
+ #
12254
+
12255
+ 0 belong 0x1ee7f11e Pulsar POP3 daemon mailbox cache file.
12256
+ >4 ubelong x Version: %d.
12257
+ >8 ubelong x \b%d
12258
+
12259
+
12260
+ #------------------------------------------------------------------------------
12261
+ # pyramid: file(1) magic for Pyramids
12262
+ #
12263
+ # XXX - byte order?
12264
+ #
12265
+ 0 long 0x50900107 Pyramid 90x family executable
12266
+ 0 long 0x50900108 Pyramid 90x family pure executable
12267
+ >16 long >0 not stripped
12268
+ 0 long 0x5090010b Pyramid 90x family demand paged pure executable
12269
+ >16 long >0 not stripped
12270
+
12271
+ #------------------------------------------------------------------------------
12272
+ # python: file(1) magic for python
12273
+ #
12274
+ # From: David Necas <yeti@physics.muni.cz>
12275
+ # often the module starts with a multiline string
12276
+ 0 string """ a python script text executable
12277
+ # MAGIC as specified in Python/import.c (1.5 to 2.3.0a)
12278
+ # 20121 ( YEAR - 1995 ) + MONTH + DAY (little endian followed by "\r\n"
12279
+ 0 belong 0x994e0d0a python 1.5/1.6 byte-compiled
12280
+ 0 belong 0x87c60d0a python 2.0 byte-compiled
12281
+ 0 belong 0x2aeb0d0a python 2.1 byte-compiled
12282
+ 0 belong 0x2ded0d0a python 2.2 byte-compiled
12283
+ 0 belong 0x3bf20d0a python 2.3 byte-compiled
12284
+ 0 belong 0x6df20d0a python 2.4 byte-compiled
12285
+ 0 belong 0xb3f20d0a python 2.5 byte-compiled
12286
+ 0 belong 0xd1f20d0a python 2.6 byte-compiled
12287
+
12288
+
12289
+ 0 string/b #!\ /usr/bin/python python script text executable
12290
+
12291
+
12292
+ #------------------------------------------------------------------------------
12293
+ # file(1) magic for revision control files
12294
+ # From Hendrik Scholz <hendrik@scholz.net>
12295
+ 0 string /1\ :pserver: cvs password text file
12296
+
12297
+ # Conary changesets
12298
+ # From: Jonathan Smith <smithj@rpath.com>
12299
+ 0 belong 0xea3f81bb Conary changeset data
12300
+
12301
+ # Type: Git bundles (git-bundle)
12302
+ # From: Josh Triplett <josh@freedesktop.org>
12303
+ 0 string #\ v2\ git\ bundle\n Git bundle
12304
+
12305
+ # Type: Git pack
12306
+ # From: Adam Buchbinder <adam.buchbinder@gmail.com>
12307
+ # The actual magic is 'PACK', but that clashes with Doom/Quake packs. However,
12308
+ # those have a little-endian offset immediately following the magic 'PACK',
12309
+ # the first byte of which is never 0, while the first byte of the Git pack
12310
+ # version, since it's a tiny number stored in big-endian format, is always 0.
12311
+ 0 string PACK\0 Git pack
12312
+ >4 belong >0 \b, version %d
12313
+ >>8 belong >0 \b, %d objects
12314
+
12315
+ # Type: Git pack index
12316
+ # From: Adam Buchbinder <adam.buchbinder@gmail.com>
12317
+ 0 string \377tOc Git pack index
12318
+ >4 belong =2 \b, version 2
12319
+
12320
+ # Type: Mercurial bundles
12321
+ # From: Seo Sanghyeon <tinuviel@sparcs.kaist.ac.kr>
12322
+ 0 string HG10 Mercurial bundle,
12323
+ >4 string UN uncompressed
12324
+ >4 string BZ bzip2 compressed
12325
+
12326
+ # Type: Subversion (SVN) dumps
12327
+ # From: Uwe Zeisberger <zeisberg@informatik.uni-freiburg.de>
12328
+ 0 string SVN-fs-dump-format-version: Subversion dumpfile
12329
+ >28 string >\0 (version: %s)
12330
+
12331
+ # Type: Bazaar revision bundles and merge requests
12332
+ # URL: http://www.bazaar-vcs.org/
12333
+ # From: Jelmer Vernooij <jelmer@samba.org>
12334
+ 0 string #\ Bazaar\ revision\ bundle\ v Bazaar Bundle
12335
+ 0 string #\ Bazaar\ merge\ directive\ format Bazaar merge directive
12336
+
12337
+ #------------------------------------------------------------------------------
12338
+ # riff: file(1) magic for RIFF format
12339
+ # See
12340
+ #
12341
+ # http://www.seanet.com/users/matts/riffmci/riffmci.htm
12342
+ #
12343
+ # AVI section extended by Patrik R�dman <patrik+file-magic@iki.fi>
12344
+ #
12345
+ 0 string RIFF RIFF (little-endian) data
12346
+ # RIFF Palette format
12347
+ >8 string PAL \b, palette
12348
+ >>16 leshort x \b, version %d
12349
+ >>18 leshort x \b, %d entries
12350
+ # RIFF Device Independent Bitmap format
12351
+ >8 string RDIB \b, device-independent bitmap
12352
+ >>16 string BM
12353
+ >>>30 leshort 12 \b, OS/2 1.x format
12354
+ >>>>34 leshort x \b, %d x
12355
+ >>>>36 leshort x %d
12356
+ >>>30 leshort 64 \b, OS/2 2.x format
12357
+ >>>>34 leshort x \b, %d x
12358
+ >>>>36 leshort x %d
12359
+ >>>30 leshort 40 \b, Windows 3.x format
12360
+ >>>>34 lelong x \b, %d x
12361
+ >>>>38 lelong x %d x
12362
+ >>>>44 leshort x %d
12363
+ # RIFF MIDI format
12364
+ >8 string RMID \b, MIDI
12365
+ # RIFF Multimedia Movie File format
12366
+ >8 string RMMP \b, multimedia movie
12367
+ # RIFF wrapper for MP3
12368
+ >8 string RMP3 \b, MPEG Layer 3 audio
12369
+ # Microsoft WAVE format (*.wav)
12370
+ >8 string WAVE \b, WAVE audio
12371
+ !:mime audio/x-wav
12372
+ >>20 leshort 1 \b, Microsoft PCM
12373
+ >>>34 leshort >0 \b, %d bit
12374
+ >>20 leshort 2 \b, Microsoft ADPCM
12375
+ >>20 leshort 6 \b, ITU G.711 A-law
12376
+ >>20 leshort 7 \b, ITU G.711 mu-law
12377
+ >>20 leshort 8 \b, Microsoft DTS
12378
+ >>20 leshort 17 \b, IMA ADPCM
12379
+ >>20 leshort 20 \b, ITU G.723 ADPCM (Yamaha)
12380
+ >>20 leshort 49 \b, GSM 6.10
12381
+ >>20 leshort 64 \b, ITU G.721 ADPCM
12382
+ >>20 leshort 80 \b, MPEG
12383
+ >>20 leshort 85 \b, MPEG Layer 3
12384
+ >>20 leshort 0x2001 \b, DTS
12385
+ >>22 leshort =1 \b, mono
12386
+ >>22 leshort =2 \b, stereo
12387
+ >>22 leshort >2 \b, %d channels
12388
+ >>24 lelong >0 %d Hz
12389
+ # Corel Draw Picture
12390
+ >8 string CDRA \b, Corel Draw Picture
12391
+ !:mime image/x-coreldraw
12392
+ # AVI == Audio Video Interleave
12393
+ >8 string AVI\040 \b, AVI
12394
+ !:mime video/x-msvideo
12395
+ >>12 string LIST
12396
+ >>>20 string hdrlavih
12397
+ >>>>&36 lelong x \b, %lu x
12398
+ >>>>&40 lelong x %lu,
12399
+ >>>>&4 lelong >1000000 <1 fps,
12400
+ >>>>&4 lelong 1000000 1.00 fps,
12401
+ >>>>&4 lelong 500000 2.00 fps,
12402
+ >>>>&4 lelong 333333 3.00 fps,
12403
+ >>>>&4 lelong 250000 4.00 fps,
12404
+ >>>>&4 lelong 200000 5.00 fps,
12405
+ >>>>&4 lelong 166667 6.00 fps,
12406
+ >>>>&4 lelong 142857 7.00 fps,
12407
+ >>>>&4 lelong 125000 8.00 fps,
12408
+ >>>>&4 lelong 111111 9.00 fps,
12409
+ >>>>&4 lelong 100000 10.00 fps,
12410
+ # ]9.9,10.1[
12411
+ >>>>&4 lelong <101010
12412
+ >>>>>&-4 lelong >99010
12413
+ >>>>>>&-4 lelong !100000 ~10 fps,
12414
+ >>>>&4 lelong 83333 12.00 fps,
12415
+ # ]11.9,12.1[
12416
+ >>>>&4 lelong <84034
12417
+ >>>>>&-4 lelong >82645
12418
+ >>>>>>&-4 lelong !83333 ~12 fps,
12419
+ >>>>&4 lelong 66667 15.00 fps,
12420
+ # ]14.9,15.1[
12421
+ >>>>&4 lelong <67114
12422
+ >>>>>&-4 lelong >66225
12423
+ >>>>>>&-4 lelong !66667 ~15 fps,
12424
+ >>>>&4 lelong 50000 20.00 fps,
12425
+ >>>>&4 lelong 41708 23.98 fps,
12426
+ >>>>&4 lelong 41667 24.00 fps,
12427
+ # ]23.9,24.1[
12428
+ >>>>&4 lelong <41841
12429
+ >>>>>&-4 lelong >41494
12430
+ >>>>>>&-4 lelong !41708
12431
+ >>>>>>>&-4 lelong !41667 ~24 fps,
12432
+ >>>>&4 lelong 40000 25.00 fps,
12433
+ # ]24.9,25.1[
12434
+ >>>>&4 lelong <40161
12435
+ >>>>>&-4 lelong >39841
12436
+ >>>>>>&-4 lelong !40000 ~25 fps,
12437
+ >>>>&4 lelong 33367 29.97 fps,
12438
+ >>>>&4 lelong 33333 30.00 fps,
12439
+ # ]29.9,30.1[
12440
+ >>>>&4 lelong <33445
12441
+ >>>>>&-4 lelong >33223
12442
+ >>>>>>&-4 lelong !33367
12443
+ >>>>>>>&-4 lelong !33333 ~30 fps,
12444
+ >>>>&4 lelong <32224 >30 fps,
12445
+ ##>>>>&4 lelong x (%lu)
12446
+ ##>>>>&20 lelong x %lu frames,
12447
+ # Note: The tests below assume that the AVI has 1 or 2 streams,
12448
+ # "vids" optionally followed by "auds".
12449
+ # (Should cover 99.9% of all AVIs.)
12450
+ # assuming avih length = 56
12451
+ >>>88 string LIST
12452
+ >>>>96 string strlstrh
12453
+ >>>>>108 string vids video:
12454
+ >>>>>>&0 lelong 0 uncompressed
12455
+ # skip past vids strh
12456
+ >>>>>>(104.l+108) string strf
12457
+ >>>>>>>(104.l+132) lelong 1 RLE 8bpp
12458
+ >>>>>>>(104.l+132) string/c cvid Cinepak
12459
+ >>>>>>>(104.l+132) string/c i263 Intel I.263
12460
+ >>>>>>>(104.l+132) string/c iv32 Indeo 3.2
12461
+ >>>>>>>(104.l+132) string/c iv41 Indeo 4.1
12462
+ >>>>>>>(104.l+132) string/c iv50 Indeo 5.0
12463
+ >>>>>>>(104.l+132) string/c mp42 Microsoft MPEG-4 v2
12464
+ >>>>>>>(104.l+132) string/c mp43 Microsoft MPEG-4 v3
12465
+ >>>>>>>(104.l+132) string/c fmp4 FFMpeg MPEG-4
12466
+ >>>>>>>(104.l+132) string/c mjpg Motion JPEG
12467
+ >>>>>>>(104.l+132) string/c div3 DivX 3
12468
+ >>>>>>>>112 string/c div3 Low-Motion
12469
+ >>>>>>>>112 string/c div4 Fast-Motion
12470
+ >>>>>>>(104.l+132) string/c divx DivX 4
12471
+ >>>>>>>(104.l+132) string/c dx50 DivX 5
12472
+ >>>>>>>(104.l+132) string/c xvid XviD
12473
+ >>>>>>>(104.l+132) string/c h264 H.264
12474
+ >>>>>>>(104.l+132) string/c wmv3 Windows Media Video 9
12475
+ >>>>>>>(104.l+132) string/c h264 X.264 or H.264
12476
+ >>>>>>>(104.l+132) lelong 0
12477
+ ##>>>>>>>(104.l+132) string x (%.4s)
12478
+ # skip past first (video) LIST
12479
+ >>>>(92.l+96) string LIST
12480
+ >>>>>(92.l+104) string strlstrh
12481
+ >>>>>>(92.l+116) string auds \b, audio:
12482
+ # auds strh length = 56:
12483
+ >>>>>>>(92.l+172) string strf
12484
+ >>>>>>>>(92.l+180) leshort 0x0001 uncompressed PCM
12485
+ >>>>>>>>(92.l+180) leshort 0x0002 ADPCM
12486
+ >>>>>>>>(92.l+180) leshort 0x0006 aLaw
12487
+ >>>>>>>>(92.l+180) leshort 0x0007 uLaw
12488
+ >>>>>>>>(92.l+180) leshort 0x0050 MPEG-1 Layer 1 or 2
12489
+ >>>>>>>>(92.l+180) leshort 0x0055 MPEG-1 Layer 3
12490
+ >>>>>>>>(92.l+180) leshort 0x2000 Dolby AC3
12491
+ >>>>>>>>(92.l+180) leshort 0x0161 DivX
12492
+ ##>>>>>>>>(92.l+180) leshort x (0x%.4x)
12493
+ >>>>>>>>(92.l+182) leshort 1 (mono,
12494
+ >>>>>>>>(92.l+182) leshort 2 (stereo,
12495
+ >>>>>>>>(92.l+182) leshort >2 (%d channels,
12496
+ >>>>>>>>(92.l+184) lelong x %d Hz)
12497
+ # auds strh length = 64:
12498
+ >>>>>>>(92.l+180) string strf
12499
+ >>>>>>>>(92.l+188) leshort 0x0001 uncompressed PCM
12500
+ >>>>>>>>(92.l+188) leshort 0x0002 ADPCM
12501
+ >>>>>>>>(92.l+188) leshort 0x0055 MPEG-1 Layer 3
12502
+ >>>>>>>>(92.l+188) leshort 0x2000 Dolby AC3
12503
+ >>>>>>>>(92.l+188) leshort 0x0161 DivX
12504
+ ##>>>>>>>>(92.l+188) leshort x (0x%.4x)
12505
+ >>>>>>>>(92.l+190) leshort 1 (mono,
12506
+ >>>>>>>>(92.l+190) leshort 2 (stereo,
12507
+ >>>>>>>>(92.l+190) leshort >2 (%d channels,
12508
+ >>>>>>>>(92.l+192) lelong x %d Hz)
12509
+ # Animated Cursor format
12510
+ >8 string ACON \b, animated cursor
12511
+ # SoundFont 2 <mpruett@sgi.com>
12512
+ >8 string sfbk SoundFont/Bank
12513
+ # MPEG-1 wrapped in a RIFF, apparently
12514
+ >8 string CDXA \b, wrapped MPEG-1 (CDXA)
12515
+ >8 string 4XMV \b, 4X Movie file
12516
+
12517
+ #
12518
+ # XXX - some of the below may only appear in little-endian form.
12519
+ #
12520
+ # Also "MV93" appears to be for one form of Macromedia Director
12521
+ # files, and "GDMF" appears to be another multimedia format.
12522
+ #
12523
+ 0 string RIFX RIFF (big-endian) data
12524
+ # RIFF Palette format
12525
+ >8 string PAL \b, palette
12526
+ >>16 beshort x \b, version %d
12527
+ >>18 beshort x \b, %d entries
12528
+ # RIFF Device Independent Bitmap format
12529
+ >8 string RDIB \b, device-independent bitmap
12530
+ >>16 string BM
12531
+ >>>30 beshort 12 \b, OS/2 1.x format
12532
+ >>>>34 beshort x \b, %d x
12533
+ >>>>36 beshort x %d
12534
+ >>>30 beshort 64 \b, OS/2 2.x format
12535
+ >>>>34 beshort x \b, %d x
12536
+ >>>>36 beshort x %d
12537
+ >>>30 beshort 40 \b, Windows 3.x format
12538
+ >>>>34 belong x \b, %d x
12539
+ >>>>38 belong x %d x
12540
+ >>>>44 beshort x %d
12541
+ # RIFF MIDI format
12542
+ >8 string RMID \b, MIDI
12543
+ # RIFF Multimedia Movie File format
12544
+ >8 string RMMP \b, multimedia movie
12545
+ # Microsoft WAVE format (*.wav)
12546
+ >8 string WAVE \b, WAVE audio
12547
+ >>20 leshort 1 \b, Microsoft PCM
12548
+ >>>34 leshort >0 \b, %d bit
12549
+ >>22 beshort =1 \b, mono
12550
+ >>22 beshort =2 \b, stereo
12551
+ >>22 beshort >2 \b, %d channels
12552
+ >>24 belong >0 %d Hz
12553
+ # Corel Draw Picture
12554
+ >8 string CDRA \b, Corel Draw Picture
12555
+ # AVI == Audio Video Interleave
12556
+ >8 string AVI\040 \b, AVI
12557
+ # Animated Cursor format
12558
+ >8 string ACON \b, animated cursor
12559
+ # Notation Interchange File Format (big-endian only)
12560
+ >8 string NIFF \b, Notation Interchange File Format
12561
+ # SoundFont 2 <mpruett@sgi.com>
12562
+ >8 string sfbk SoundFont/Bank
12563
+ #------------------------------------------------------------------------------
12564
+ #
12565
+ # RPM: file(1) magic for Red Hat Packages Erik Troan (ewt@redhat.com)
12566
+ #
12567
+ 0 beshort 0xedab
12568
+ >2 beshort 0xeedb RPM
12569
+ !:mime application/x-rpm
12570
+ >>4 byte x v%d
12571
+ >>6 beshort 0 bin
12572
+ >>6 beshort 1 src
12573
+ >>8 beshort 1 i386
12574
+ >>8 beshort 2 Alpha
12575
+ >>8 beshort 3 Sparc
12576
+ >>8 beshort 4 MIPS
12577
+ >>8 beshort 5 PowerPC
12578
+ >>8 beshort 6 68000
12579
+ >>8 beshort 7 SGI
12580
+ >>8 beshort 8 RS6000
12581
+ >>8 beshort 9 IA64
12582
+ >>8 beshort 10 Sparc64
12583
+ >>8 beshort 11 MIPSel
12584
+ >>8 beshort 12 ARM
12585
+ >>10 string x %s
12586
+
12587
+ #------------------------------------------------------------------------------
12588
+ # rtf: file(1) magic for Rich Text Format (RTF)
12589
+ #
12590
+ # Duncan P. Simpson, D.P.Simpson@dcs.warwick.ac.uk
12591
+ #
12592
+ 0 string {\\rtf Rich Text Format data,
12593
+ !:mime text/rtf
12594
+ >5 string 1 version 1,
12595
+ >>6 string \\ansi ANSI
12596
+ >>6 string \\mac Apple Macintosh
12597
+ >>6 string \\pc IBM PC, code page 437
12598
+ >>6 string \\pca IBM PS/2, code page 850
12599
+ >>6 default x unknown character set
12600
+ >5 default x unknown version
12601
+ #------------------------------------------------------------------------------
12602
+ # ruby: file(1) magic for Lua scripting language
12603
+ # URL: http://www.ruby-lang.org/
12604
+ # From: Reuben Thomas <rrt@sc3d.org>
12605
+
12606
+ # Ruby scripts
12607
+ 0 search/1/b #!\ /usr/bin/ruby Ruby script text executable
12608
+ !:mime application/x-ruby
12609
+ 0 search/1/b #!\ /usr/local/bin/ruby Ruby script text executable
12610
+ !:mime application/x-ruby
12611
+ 0 search/1 #!/usr/bin/env\ ruby Ruby script text executable
12612
+ !:mime application/x-ruby
12613
+ 0 search/1 #!\ /usr/bin/env\ ruby Ruby script text executable
12614
+ !:mime application/x-ruby
12615
+
12616
+ #------------------------------------------------------------------------------
12617
+ # sc: file(1) magic for "sc" spreadsheet
12618
+ #
12619
+ 38 string Spreadsheet sc spreadsheet file
12620
+ !:mime application/x-sc
12621
+
12622
+ #------------------------------------------------------------------------------
12623
+ # sccs: file(1) magic for SCCS archives
12624
+ #
12625
+ # SCCS archive structure:
12626
+ # \001h01207
12627
+ # \001s 00276/00000/00000
12628
+ # \001d D 1.1 87/09/23 08:09:20 ian 1 0
12629
+ # \001c date and time created 87/09/23 08:09:20 by ian
12630
+ # \001e
12631
+ # \001u
12632
+ # \001U
12633
+ # ... etc.
12634
+ # Now '\001h' happens to be the same as the 3B20's a.out magic number (0550).
12635
+ # *Sigh*. And these both came from various parts of the USG.
12636
+ # Maybe we should just switch everybody from SCCS to RCS!
12637
+ # Further, you can't just say '\001h0', because the five-digit number
12638
+ # is a checksum that could (presumably) have any leading digit,
12639
+ # and we don't have regular expression matching yet.
12640
+ # Hence the following official kludge:
12641
+ 8 string \001s\ SCCS archive data
12642
+ #------------------------------------------------------------------------------
12643
+ # scientific: file(1) magic for scientific formats
12644
+ #
12645
+ # From: Joe Krahn <krahn@niehs.nih.gov>
12646
+
12647
+ ########################################################
12648
+ # CCP4 data and plot files:
12649
+ 0 string MTZ\040 MTZ reflection file
12650
+
12651
+ 92 string PLOT%%84 Plot84 plotting file
12652
+ >52 byte 1 , Little-endian
12653
+ >55 byte 1 , Big-endian
12654
+
12655
+ ########################################################
12656
+ # Electron density MAP/MASK formats
12657
+
12658
+ 0 string EZD_MAP NEWEZD Electron Density Map
12659
+ 109 string MAP\040( Old EZD Electron Density Map
12660
+
12661
+ 0 string/c :-)\040Origin BRIX Electron Density Map
12662
+ >170 string >0 , Sigma:%.12s
12663
+ #>4 string >0 %.178s
12664
+ #>4 addr x %.178s
12665
+
12666
+ 7 string 18\040!NTITLE XPLOR ASCII Electron Density Map
12667
+ 9 string \040!NTITLE\012\040REMARK CNS ASCII electron density map
12668
+
12669
+ 208 string MAP\040 CCP4 Electron Density Map
12670
+ # Assumes same stamp for float and double (normal case)
12671
+ >212 byte 17 \b, Big-endian
12672
+ >212 byte 34 \b, VAX format
12673
+ >212 byte 68 \b, Little-endian
12674
+ >212 byte 85 \b, Convex native
12675
+
12676
+ ############################################################
12677
+ # X-Ray Area Detector images
12678
+ 0 string R-AXIS4\ \ \ R-Axis Area Detector Image:
12679
+ >796 lelong <20 Little-endian, IP #%d,
12680
+ >>768 lelong >0 Size=%dx
12681
+ >>772 lelong >0 \b%d
12682
+ >796 belong <20 Big-endian, IP #%d,
12683
+ >>768 belong >0 Size=%dx
12684
+ >>772 belong >0 \b%d
12685
+
12686
+ 0 string RAXIS\ \ \ \ \ R-Axis Area Detector Image, Win32:
12687
+ >796 lelong <20 Little-endian, IP #%d,
12688
+ >>768 lelong >0 Size=%dx
12689
+ >>772 lelong >0 \b%d
12690
+ >796 belong <20 Big-endian, IP #%d,
12691
+ >>768 belong >0 Size=%dx
12692
+ >>772 belong >0 \b%d
12693
+
12694
+
12695
+ 1028 string MMX\000\000\000\000\000\000\000\000\000\000\000\000\000 MAR Area Detector Image,
12696
+ >1072 ulong >1 Compressed(%d),
12697
+ >1100 ulong >1 %d headers,
12698
+ >1104 ulong >0 %d x
12699
+ >1108 ulong >0 %d,
12700
+ >1120 ulong >0 %d bits/pixel
12701
+
12702
+ # Type: GEDCOM genealogical (family history) data
12703
+ # From: Giuseppe Bilotta
12704
+ 0 search/1/c 0\ HEAD GEDCOM genealogy text
12705
+ >&0 search 1\ GEDC
12706
+ >>&0 search 2\ VERS version
12707
+ >>>&1 search/1 >\0 %s
12708
+ # From: Phil Endecott <phil05@chezphil.org>
12709
+ 0 string \000\060\000\040\000\110\000\105\000\101\000\104 GEDCOM data
12710
+ 0 string \060\000\040\000\110\000\105\000\101\000\104\000 GEDCOM data
12711
+ 0 string \376\377\000\060\000\040\000\110\000\105\000\101\000\104 GEDCOM data
12712
+ 0 string \377\376\060\000\040\000\110\000\105\000\101\000\104\000 GEDCOM data
12713
+ 0 search/1 -----BEGIN\ CERTIFICATE------ RFC1421 Security Certificate text
12714
+ 0 search/1 -----BEGIN\ NEW\ CERTIFICATE RFC1421 Security Certificate Signing Request text
12715
+ 0 belong 0xedfeedfe Sun 'jks' Java Keystore File data
12716
+ # Type: SE Linux policy modules *.pp reference policy
12717
+ # for Fedora 5 to 9, RHEL5, and Debian Etch and Lenny.
12718
+ # URL: http://doc.coker.com.au/computers/selinux-magic
12719
+ # From: Russell Coker <russell@coker.com.au>
12720
+
12721
+ 0 lelong 0xf97cff8f SE Linux modular policy
12722
+ >4 lelong x version %d,
12723
+ >8 lelong x %d sections,
12724
+ >>(12.l) lelong 0xf97cff8d
12725
+ >>>(12.l+27) lelong x mod version %d,
12726
+ >>>(12.l+31) lelong 0 Not MLS,
12727
+ >>>(12.l+31) lelong 1 MLS,
12728
+ >>>(12.l+23) lelong 2
12729
+ >>>>(12.l+47) string >\0 module name %s
12730
+ >>>(12.l+23) lelong 1 base
12731
+
12732
+ 1 string policy_module( SE Linux policy module source
12733
+ 2 string policy_module( SE Linux policy module source
12734
+
12735
+ 0 string ##\ <summary> SE Linux policy interface source
12736
+
12737
+ #0 search gen_context( SE Linux policy file contexts
12738
+
12739
+ #0 search gen_sens( SE Linux policy MLS constraints source
12740
+
12741
+ #------------------------------------------------------------------------------
12742
+ # sendmail: file(1) magic for sendmail config files
12743
+ #
12744
+ # XXX - byte order?
12745
+ #
12746
+ 0 byte 046 Sendmail frozen configuration
12747
+ >16 string >\0 - version %s
12748
+ 0 short 0x271c Sendmail frozen configuration
12749
+ >16 string >\0 - version %s
12750
+
12751
+ #------------------------------------------------------------------------------
12752
+ # sendmail: file(1) magic for sendmail m4(1) files
12753
+ #
12754
+ # From Hendrik Scholz <hendrik@scholz.net>
12755
+ # i.e. files in /usr/share/sendmail/cf/
12756
+ #
12757
+ 0 string divert(-1)\n sendmail m4 text file
12758
+
12759
+
12760
+ #------------------------------------------------------------------------------
12761
+ # sequent: file(1) magic for Sequent machines
12762
+ #
12763
+ # Sequent information updated by Don Dwiggins <atsun!dwiggins>.
12764
+ # For Sequent's multiprocessor systems (incomplete).
12765
+ 0 lelong 0x00ea BALANCE NS32000 .o
12766
+ >16 lelong >0 not stripped
12767
+ >124 lelong >0 version %ld
12768
+ 0 lelong 0x10ea BALANCE NS32000 executable (0 @ 0)
12769
+ >16 lelong >0 not stripped
12770
+ >124 lelong >0 version %ld
12771
+ 0 lelong 0x20ea BALANCE NS32000 executable (invalid @ 0)
12772
+ >16 lelong >0 not stripped
12773
+ >124 lelong >0 version %ld
12774
+ 0 lelong 0x30ea BALANCE NS32000 standalone executable
12775
+ >16 lelong >0 not stripped
12776
+ >124 lelong >0 version %ld
12777
+ #
12778
+ # Symmetry information added by Jason Merrill <jason@jarthur.claremont.edu>.
12779
+ # Symmetry magic nums will not be reached if DOS COM comes before them;
12780
+ # byte 0xeb is matched before these get a chance.
12781
+ 0 leshort 0x12eb SYMMETRY i386 .o
12782
+ >16 lelong >0 not stripped
12783
+ >124 lelong >0 version %ld
12784
+ 0 leshort 0x22eb SYMMETRY i386 executable (0 @ 0)
12785
+ >16 lelong >0 not stripped
12786
+ >124 lelong >0 version %ld
12787
+ 0 leshort 0x32eb SYMMETRY i386 executable (invalid @ 0)
12788
+ >16 lelong >0 not stripped
12789
+ >124 lelong >0 version %ld
12790
+ 0 leshort 0x42eb SYMMETRY i386 standalone executable
12791
+ >16 lelong >0 not stripped
12792
+ >124 lelong >0 version %ld
12793
+
12794
+ #------------------------------------------------------------------------------
12795
+ # sgi: file(1) magic for Silicon Graphics applications
12796
+
12797
+ #
12798
+ #
12799
+ # Performance Co-Pilot file types
12800
+ 0 string PmNs PCP compiled namespace (V.0)
12801
+ 0 string PmN PCP compiled namespace
12802
+ >3 string >\0 (V.%1.1s)
12803
+ #3 lelong 0x84500526 PCP archive
12804
+ 3 belong 0x84500526 PCP archive
12805
+ >7 byte x (V.%d)
12806
+ #>20 lelong -2 temporal index
12807
+ #>20 lelong -1 metadata
12808
+ #>20 lelong 0 log volume #0
12809
+ #>20 lelong >0 log volume #%ld
12810
+ >20 belong -2 temporal index
12811
+ >20 belong -1 metadata
12812
+ >20 belong 0 log volume #0
12813
+ >20 belong >0 log volume #%ld
12814
+ >24 string >\0 host: %s
12815
+ 0 string PCPFolio PCP
12816
+ >9 string Version: Archive Folio
12817
+ >18 string >\0 (V.%s)
12818
+ 0 string #pmchart PCP pmchart view
12819
+ >9 string Version
12820
+ >17 string >\0 (V%-3.3s)
12821
+ 0 string #kmchart PCP kmchart view
12822
+ >9 string Version
12823
+ >17 string >\0 (V.%s)
12824
+ 0 string pmview PCP pmview config
12825
+ >7 string Version
12826
+ >15 string >\0 (V%-3.3s)
12827
+ 0 string #pmlogger PCP pmlogger config
12828
+ >10 string Version
12829
+ >18 string >\0 (V%1.1s)
12830
+ 0 string #pmdahotproc PCP pmdahotproc config
12831
+ >13 string Version
12832
+ >21 string >\0 (V%-3.3s)
12833
+ 0 string PcPh PCP Help
12834
+ >4 string 1 Index
12835
+ >4 string 2 Text
12836
+ >5 string >\0 (V.%1.1s)
12837
+ 0 string #pmieconf-rules PCP pmieconf rules
12838
+ >16 string >\0 (V.%1.1s)
12839
+ 3 string pmieconf-pmie PCP pmie config
12840
+ >17 string >\0 (V.%1.1s)
12841
+
12842
+ # SpeedShop data files
12843
+ 0 lelong 0x13130303 SpeedShop data file
12844
+
12845
+ # mdbm files
12846
+ 0 lelong 0x01023962 mdbm file, version 0 (obsolete)
12847
+ 0 string mdbm mdbm file,
12848
+ >5 byte x version %d,
12849
+ >6 byte x 2^%d pages,
12850
+ >7 byte x pagesize 2^%d,
12851
+ >17 byte x hash %d,
12852
+ >11 byte x dataformat %d
12853
+
12854
+ # Alias Maya files
12855
+ 0 string //Maya ASCII Alias Maya Ascii File,
12856
+ >13 string >\0 version %s
12857
+ 8 string MAYAFOR4 Alias Maya Binary File,
12858
+ >32 string >\0 version %s scene
12859
+ 8 string MayaFOR4 Alias Maya Binary File,
12860
+ >32 string >\0 version %s scene
12861
+ 8 string CIMG Alias Maya Image File
12862
+ 8 string DEEP Alias Maya Image File
12863
+ #------------------------------------------------------------------------------
12864
+ # Type: SVG Vectorial Graphics
12865
+ # From: Noel Torres <tecnico@ejerciciosresueltos.com>
12866
+ 0 string \<?xml\ version="
12867
+ >15 string >\0
12868
+ >>23 search/400 \<svg SVG Scalable Vector Graphics image
12869
+ !:mime image/svg+xml
12870
+ >>23 search/400 \<gnc-v2 GnuCash file
12871
+ !:mime application/x-gnucash
12872
+
12873
+ # Sitemap file
12874
+ 0 string \<?xml\ version="
12875
+ >15 string >\0
12876
+ >>23 search/400 \<urlset XML Sitemap document text
12877
+ !:mime application/xml-sitemap
12878
+
12879
+ #------------------------------------------------------------------------------
12880
+ # sgml: file(1) magic for Standard Generalized Markup Language
12881
+ # HyperText Markup Language (HTML) is an SGML document type,
12882
+ # from Daniel Quinlan (quinlan@yggdrasil.com)
12883
+ # adapted to string extenstions by Anthon van der Neut <anthon@mnt.org)
12884
+ 0 search/1/cB \<!doctype\ html HTML document text
12885
+ !:mime text/html
12886
+ 0 search/1/cb \<head HTML document text
12887
+ !:mime text/html
12888
+ 0 search/1/cb \<title HTML document text
12889
+ !:mime text/html
12890
+ 0 search/1/cb \<html HTML document text
12891
+ !:mime text/html
12892
+
12893
+ # Extensible markup language (XML), a subset of SGML
12894
+ # from Marc Prud'hommeaux (marc@apocalypse.org)
12895
+ 0 search/1/cb \<?xml XML document text
12896
+ !:mime application/xml
12897
+ 0 string \<?xml\ version\ " XML
12898
+ !:mime application/xml
12899
+ 0 string \<?xml\ version=" XML
12900
+ !:mime application/xml
12901
+ >15 search/1 >\0 %.3s document text
12902
+ >>23 search/1 \<xsl:stylesheet (XSL stylesheet)
12903
+ >>24 search/1 \<xsl:stylesheet (XSL stylesheet)
12904
+ 0 string \<?xml\ version=' XML
12905
+ !:mime application/xml
12906
+ >15 search/1 >\0 %.3s document text
12907
+ >>23 search/1 \<xsl:stylesheet (XSL stylesheet)
12908
+ >>24 search/1 \<xsl:stylesheet (XSL stylesheet)
12909
+ 0 search/1/b \<?xml XML document text
12910
+ !:mime application/xml
12911
+ 0 search/1/b \<?XML broken XML document text
12912
+ !:mime application/xml
12913
+
12914
+
12915
+ # SGML, mostly from rph@sq
12916
+ 0 search/1/cb \<!doctype exported SGML document text
12917
+ 0 search/1/cb \<!subdoc exported SGML subdocument text
12918
+ 0 search/1/cb \<!-- exported SGML document text
12919
+
12920
+ # Web browser cookie files
12921
+ # (Mozilla, Galeon, Netscape 4, Konqueror..)
12922
+ # Ulf Harnhammar <ulfh@update.uu.se>
12923
+ 0 search/1 #\ HTTP\ Cookie\ File Web browser cookie text
12924
+ 0 search/1 #\ Netscape\ HTTP\ Cookie\ File Netscape cookie text
12925
+ 0 search/1 #\ KDE\ Cookie\ File Konqueror cookie text
12926
+
12927
+ #------------------------------------------------------------------------
12928
+ # file(1) magic for sharc files
12929
+ #
12930
+ # SHARC DSP, MIDI SysEx and RiscOS filetype definitions added by
12931
+ # FutureGroove Music (dsp@futuregroove.de)
12932
+
12933
+ #------------------------------------------------------------------------
12934
+ #0 string Draw RiscOS Drawfile
12935
+ #0 string PACK RiscOS PackdDir archive
12936
+
12937
+ #------------------------------------------------------------------------
12938
+ # SHARC DSP stuff (based on the FGM SHARC DSP SDK)
12939
+
12940
+ #0 string =! Assembler source
12941
+ #0 string Analog ADi asm listing file
12942
+ 0 string .SYSTEM SHARC architecture file
12943
+ 0 string .system SHARC architecture file
12944
+
12945
+ 0 leshort 0x521C SHARC COFF binary
12946
+ >2 leshort >1 , %hd sections
12947
+ >>12 lelong >0 , not stripped
12948
+
12949
+ #------------------------------------------------------------------------------
12950
+ # sinclair: file(1) sinclair QL
12951
+
12952
+ # additions to /etc/magic by Thomas M. Ott (ThMO)
12953
+
12954
+ # Sinclair QL floppy disk formats (ThMO)
12955
+ 0 string =QL5 QL disk dump data,
12956
+ >3 string =A 720 KB,
12957
+ >3 string =B 1.44 MB,
12958
+ >3 string =C 3.2 MB,
12959
+ >4 string >\0 label:%.10s
12960
+
12961
+ # Sinclair QL OS dump (ThMO)
12962
+ # (NOTE: if `file' would be able to use indirect references in a endian format
12963
+ # differing from the natural host format, this could be written more
12964
+ # reliably and faster...)
12965
+ #
12966
+ # we *can't* lookup QL OS code dumps, because `file' is UNABLE to read more
12967
+ # than the first 8K of a file... #-(
12968
+ #
12969
+ #0 belong =0x30000
12970
+ #>49124 belong <47104
12971
+ #>>49128 belong <47104
12972
+ #>>>49132 belong <47104
12973
+ #>>>>49136 belong <47104 QL OS dump data,
12974
+ #>>>>>49148 string >\0 type %.3s,
12975
+ #>>>>>49142 string >\0 version %.4s
12976
+
12977
+ # Sinclair QL firmware executables (ThMO)
12978
+ 0 string NqNqNq`\004 QL firmware executable (BCPL)
12979
+
12980
+ # Sinclair QL libraries (was ThMO)
12981
+ 0 beshort 0xFB01 QDOS object
12982
+ >2 pstring x '%s'
12983
+
12984
+ # Sinclair QL executables (was ThMO)
12985
+ 4 belong 0x4AFB QDOS executable
12986
+ >9 pstring x '%s'
12987
+
12988
+ # Sinclair QL ROM (ThMO)
12989
+ 0 belong =0x4AFB0001 QL plugin-ROM data,
12990
+ >9 pstring =\0 un-named
12991
+ >9 pstring >\0 named: %s
12992
+ # Type: SiSU Markup Language
12993
+ # URL: http://www.sisudoc.org/
12994
+ # From: Ralph Amissah <ralph.amissah@gmail.com>
12995
+
12996
+ 0 regex \^%?[\ \t]*SiSU[\ \t]+insert SiSU text insert
12997
+ >5 regex [0-9.]+ %s
12998
+
12999
+ 0 regex \^%[\ \t]+SiSU[\ \t]+master SiSU text master
13000
+ >5 regex [0-9.]+ %s
13001
+
13002
+ 0 regex \^%?[\ \t]*SiSU[\ \t]+text SiSU text
13003
+ >5 regex [0-9.]+ %s
13004
+
13005
+ 0 regex \^%?[\ \t]*SiSU[\ \t][0-9.]+ SiSU text
13006
+ >5 regex [0-9.]+ %s
13007
+
13008
+ 0 regex \^%*[\ \t]*sisu-[0-9.]+ SiSU text
13009
+ >5 regex [0-9.]+ %s
13010
+ #------------------------------------------------------------------------------
13011
+ # Sketch Drawings: http://sketch.sourceforge.net/
13012
+ # From: Edwin Mons <e@ik.nu>
13013
+ 0 search/1 ##Sketch Sketch document text
13014
+
13015
+ #-----------------------------------------------
13016
+ # GNU Smalltalk image, starting at version 1.6.2
13017
+ # From: catull_us@yahoo.com
13018
+ #
13019
+ 0 string GSTIm\0\0 GNU SmallTalk
13020
+ # little-endian
13021
+ >7 byte&1 =0 LE image version
13022
+ >>10 byte x %d.
13023
+ >>9 byte x \b%d.
13024
+ >>8 byte x \b%d
13025
+ #>>12 lelong x , data: %ld
13026
+ #>>16 lelong x , table: %ld
13027
+ #>>20 lelong x , memory: %ld
13028
+ # big-endian
13029
+ >7 byte&1 =1 BE image version
13030
+ >>8 byte x %d.
13031
+ >>9 byte x \b%d.
13032
+ >>10 byte x \b%d
13033
+ #>>12 belong x , data: %ld
13034
+ #>>16 belong x , table: %ld
13035
+ #>>20 belong x , memory: %ld
13036
+
13037
+
13038
+
13039
+ #------------------------------------------------------------------------------
13040
+ # sniffer: file(1) magic for packet capture files
13041
+ #
13042
+ # From: guy@alum.mit.edu (Guy Harris)
13043
+ #
13044
+
13045
+ #
13046
+ # Microsoft Network Monitor 1.x capture files.
13047
+ #
13048
+ 0 string RTSS NetMon capture file
13049
+ >5 byte x - version %d
13050
+ >4 byte x \b.%d
13051
+ >6 leshort 0 (Unknown)
13052
+ >6 leshort 1 (Ethernet)
13053
+ >6 leshort 2 (Token Ring)
13054
+ >6 leshort 3 (FDDI)
13055
+ >6 leshort 4 (ATM)
13056
+
13057
+ #
13058
+ # Microsoft Network Monitor 2.x capture files.
13059
+ #
13060
+ 0 string GMBU NetMon capture file
13061
+ >5 byte x - version %d
13062
+ >4 byte x \b.%d
13063
+ >6 leshort 0 (Unknown)
13064
+ >6 leshort 1 (Ethernet)
13065
+ >6 leshort 2 (Token Ring)
13066
+ >6 leshort 3 (FDDI)
13067
+ >6 leshort 4 (ATM)
13068
+
13069
+ #
13070
+ # Network General Sniffer capture files.
13071
+ # Sorry, make that "Network Associates Sniffer capture files."
13072
+ # Sorry, make that "Network General old DOS Sniffer capture files."
13073
+ #
13074
+ 0 string TRSNIFF\ data\ \ \ \ \032 Sniffer capture file
13075
+ >33 byte 2 (compressed)
13076
+ >23 leshort x - version %d
13077
+ >25 leshort x \b.%d
13078
+ >32 byte 0 (Token Ring)
13079
+ >32 byte 1 (Ethernet)
13080
+ >32 byte 2 (ARCNET)
13081
+ >32 byte 3 (StarLAN)
13082
+ >32 byte 4 (PC Network broadband)
13083
+ >32 byte 5 (LocalTalk)
13084
+ >32 byte 6 (Znet)
13085
+ >32 byte 7 (Internetwork Analyzer)
13086
+ >32 byte 9 (FDDI)
13087
+ >32 byte 10 (ATM)
13088
+
13089
+ #
13090
+ # Cinco Networks NetXRay capture files.
13091
+ # Sorry, make that "Network General Sniffer Basic capture files."
13092
+ # Sorry, make that "Network Associates Sniffer Basic capture files."
13093
+ # Sorry, make that "Network Associates Sniffer Basic, and Windows
13094
+ # Sniffer Pro", capture files."
13095
+ # Sorry, make that "Network General Sniffer capture files."
13096
+ #
13097
+ 0 string XCP\0 NetXRay capture file
13098
+ >4 string >\0 - version %s
13099
+ >44 leshort 0 (Ethernet)
13100
+ >44 leshort 1 (Token Ring)
13101
+ >44 leshort 2 (FDDI)
13102
+ >44 leshort 3 (WAN)
13103
+ >44 leshort 8 (ATM)
13104
+ >44 leshort 9 (802.11)
13105
+
13106
+ #
13107
+ # "libpcap" capture files.
13108
+ # (We call them "tcpdump capture file(s)" for now, as "tcpdump" is
13109
+ # the main program that uses that format, but there are other programs
13110
+ # that use "libpcap", or that use the same capture file format.)
13111
+ #
13112
+ 0 ubelong 0xa1b2c3d4 tcpdump capture file (big-endian)
13113
+ >4 beshort x - version %d
13114
+ >6 beshort x \b.%d
13115
+ >20 belong 0 (No link-layer encapsulation
13116
+ >20 belong 1 (Ethernet
13117
+ >20 belong 2 (3Mb Ethernet
13118
+ >20 belong 3 (AX.25
13119
+ >20 belong 4 (ProNET
13120
+ >20 belong 5 (CHAOS
13121
+ >20 belong 6 (Token Ring
13122
+ >20 belong 7 (BSD ARCNET
13123
+ >20 belong 8 (SLIP
13124
+ >20 belong 9 (PPP
13125
+ >20 belong 10 (FDDI
13126
+ >20 belong 11 (RFC 1483 ATM
13127
+ >20 belong 12 (raw IP
13128
+ >20 belong 13 (BSD/OS SLIP
13129
+ >20 belong 14 (BSD/OS PPP
13130
+ >20 belong 19 (Linux ATM Classical IP
13131
+ >20 belong 50 (PPP or Cisco HDLC
13132
+ >20 belong 51 (PPP-over-Ethernet
13133
+ >20 belong 99 (Symantec Enterprise Firewall
13134
+ >20 belong 100 (RFC 1483 ATM
13135
+ >20 belong 101 (raw IP
13136
+ >20 belong 102 (BSD/OS SLIP
13137
+ >20 belong 103 (BSD/OS PPP
13138
+ >20 belong 104 (BSD/OS Cisco HDLC
13139
+ >20 belong 105 (802.11
13140
+ >20 belong 106 (Linux Classical IP over ATM
13141
+ >20 belong 107 (Frame Relay
13142
+ >20 belong 108 (OpenBSD loopback
13143
+ >20 belong 109 (OpenBSD IPsec encrypted
13144
+ >20 belong 112 (Cisco HDLC
13145
+ >20 belong 113 (Linux "cooked"
13146
+ >20 belong 114 (LocalTalk
13147
+ >20 belong 117 (OpenBSD PFLOG
13148
+ >20 belong 119 (802.11 with Prism header
13149
+ >20 belong 122 (RFC 2625 IP over Fibre Channel
13150
+ >20 belong 123 (SunATM
13151
+ >20 belong 127 (802.11 with radiotap header
13152
+ >20 belong 129 (Linux ARCNET
13153
+ >20 belong 138 (Apple IP over IEEE 1394
13154
+ >20 belong 140 (MTP2
13155
+ >20 belong 141 (MTP3
13156
+ >20 belong 143 (DOCSIS
13157
+ >20 belong 144 (IrDA
13158
+ >20 belong 147 (Private use 0
13159
+ >20 belong 148 (Private use 1
13160
+ >20 belong 149 (Private use 2
13161
+ >20 belong 150 (Private use 3
13162
+ >20 belong 151 (Private use 4
13163
+ >20 belong 152 (Private use 5
13164
+ >20 belong 153 (Private use 6
13165
+ >20 belong 154 (Private use 7
13166
+ >20 belong 155 (Private use 8
13167
+ >20 belong 156 (Private use 9
13168
+ >20 belong 157 (Private use 10
13169
+ >20 belong 158 (Private use 11
13170
+ >20 belong 159 (Private use 12
13171
+ >20 belong 160 (Private use 13
13172
+ >20 belong 161 (Private use 14
13173
+ >20 belong 162 (Private use 15
13174
+ >20 belong 163 (802.11 with AVS header
13175
+ >16 belong x \b, capture length %d)
13176
+ 0 ulelong 0xa1b2c3d4 tcpdump capture file (little-endian)
13177
+ >4 leshort x - version %d
13178
+ >6 leshort x \b.%d
13179
+ >20 lelong 0 (No link-layer encapsulation
13180
+ >20 lelong 1 (Ethernet
13181
+ >20 lelong 2 (3Mb Ethernet
13182
+ >20 lelong 3 (AX.25
13183
+ >20 lelong 4 (ProNET
13184
+ >20 lelong 5 (CHAOS
13185
+ >20 lelong 6 (Token Ring
13186
+ >20 lelong 7 (ARCNET
13187
+ >20 lelong 8 (SLIP
13188
+ >20 lelong 9 (PPP
13189
+ >20 lelong 10 (FDDI
13190
+ >20 lelong 11 (RFC 1483 ATM
13191
+ >20 lelong 12 (raw IP
13192
+ >20 lelong 13 (BSD/OS SLIP
13193
+ >20 lelong 14 (BSD/OS PPP
13194
+ >20 lelong 19 (Linux ATM Classical IP
13195
+ >20 lelong 50 (PPP or Cisco HDLC
13196
+ >20 lelong 51 (PPP-over-Ethernet
13197
+ >20 lelong 99 (Symantec Enterprise Firewall
13198
+ >20 lelong 100 (RFC 1483 ATM
13199
+ >20 lelong 101 (raw IP
13200
+ >20 lelong 102 (BSD/OS SLIP
13201
+ >20 lelong 103 (BSD/OS PPP
13202
+ >20 lelong 104 (BSD/OS Cisco HDLC
13203
+ >20 lelong 105 (802.11
13204
+ >20 lelong 106 (Linux Classical IP over ATM
13205
+ >20 lelong 107 (Frame Relay
13206
+ >20 lelong 108 (OpenBSD loopback
13207
+ >20 lelong 109 (OpenBSD IPsec encrypted
13208
+ >20 lelong 112 (Cisco HDLC
13209
+ >20 lelong 113 (Linux "cooked"
13210
+ >20 lelong 114 (LocalTalk
13211
+ >20 lelong 117 (OpenBSD PFLOG
13212
+ >20 lelong 119 (802.11 with Prism header
13213
+ >20 lelong 122 (RFC 2625 IP over Fibre Channel
13214
+ >20 lelong 123 (SunATM
13215
+ >20 lelong 127 (802.11 with radiotap header
13216
+ >20 lelong 129 (Linux ARCNET
13217
+ >20 lelong 138 (Apple IP over IEEE 1394
13218
+ >20 lelong 140 (MTP2
13219
+ >20 lelong 141 (MTP3
13220
+ >20 lelong 143 (DOCSIS
13221
+ >20 lelong 144 (IrDA
13222
+ >20 lelong 147 (Private use 0
13223
+ >20 lelong 148 (Private use 1
13224
+ >20 lelong 149 (Private use 2
13225
+ >20 lelong 150 (Private use 3
13226
+ >20 lelong 151 (Private use 4
13227
+ >20 lelong 152 (Private use 5
13228
+ >20 lelong 153 (Private use 6
13229
+ >20 lelong 154 (Private use 7
13230
+ >20 lelong 155 (Private use 8
13231
+ >20 lelong 156 (Private use 9
13232
+ >20 lelong 157 (Private use 10
13233
+ >20 lelong 158 (Private use 11
13234
+ >20 lelong 159 (Private use 12
13235
+ >20 lelong 160 (Private use 13
13236
+ >20 lelong 161 (Private use 14
13237
+ >20 lelong 162 (Private use 15
13238
+ >20 lelong 163 (802.11 with AVS header
13239
+ >16 lelong x \b, capture length %d)
13240
+
13241
+ #
13242
+ # "libpcap"-with-Alexey-Kuznetsov's-patches capture files.
13243
+ # (We call them "tcpdump capture file(s)" for now, as "tcpdump" is
13244
+ # the main program that uses that format, but there are other programs
13245
+ # that use "libpcap", or that use the same capture file format.)
13246
+ #
13247
+ 0 ubelong 0xa1b2cd34 extended tcpdump capture file (big-endian)
13248
+ >4 beshort x - version %d
13249
+ >6 beshort x \b.%d
13250
+ >20 belong 0 (No link-layer encapsulation
13251
+ >20 belong 1 (Ethernet
13252
+ >20 belong 2 (3Mb Ethernet
13253
+ >20 belong 3 (AX.25
13254
+ >20 belong 4 (ProNET
13255
+ >20 belong 5 (CHAOS
13256
+ >20 belong 6 (Token Ring
13257
+ >20 belong 7 (ARCNET
13258
+ >20 belong 8 (SLIP
13259
+ >20 belong 9 (PPP
13260
+ >20 belong 10 (FDDI
13261
+ >20 belong 11 (RFC 1483 ATM
13262
+ >20 belong 12 (raw IP
13263
+ >20 belong 13 (BSD/OS SLIP
13264
+ >20 belong 14 (BSD/OS PPP
13265
+ >16 belong x \b, capture length %d)
13266
+ 0 ulelong 0xa1b2cd34 extended tcpdump capture file (little-endian)
13267
+ >4 leshort x - version %d
13268
+ >6 leshort x \b.%d
13269
+ >20 lelong 0 (No link-layer encapsulation
13270
+ >20 lelong 1 (Ethernet
13271
+ >20 lelong 2 (3Mb Ethernet
13272
+ >20 lelong 3 (AX.25
13273
+ >20 lelong 4 (ProNET
13274
+ >20 lelong 5 (CHAOS
13275
+ >20 lelong 6 (Token Ring
13276
+ >20 lelong 7 (ARCNET
13277
+ >20 lelong 8 (SLIP
13278
+ >20 lelong 9 (PPP
13279
+ >20 lelong 10 (FDDI
13280
+ >20 lelong 11 (RFC 1483 ATM
13281
+ >20 lelong 12 (raw IP
13282
+ >20 lelong 13 (BSD/OS SLIP
13283
+ >20 lelong 14 (BSD/OS PPP
13284
+ >16 lelong x \b, capture length %d)
13285
+
13286
+ #
13287
+ # AIX "iptrace" capture files.
13288
+ #
13289
+ 0 string iptrace\ 1.0 "iptrace" capture file
13290
+ 0 string iptrace\ 2.0 "iptrace" capture file
13291
+
13292
+ #
13293
+ # Novell LANalyzer capture files.
13294
+ #
13295
+ 0 leshort 0x1001 LANalyzer capture file
13296
+ 0 leshort 0x1007 LANalyzer capture file
13297
+
13298
+ #
13299
+ # HP-UX "nettl" capture files.
13300
+ #
13301
+ 0 string \x54\x52\x00\x64\x00 "nettl" capture file
13302
+
13303
+ #
13304
+ # RADCOM WAN/LAN Analyzer capture files.
13305
+ #
13306
+ 0 string \x42\xd2\x00\x34\x12\x66\x22\x88 RADCOM WAN/LAN Analyzer capture file
13307
+
13308
+ #
13309
+ # NetStumbler log files. Not really packets, per se, but about as
13310
+ # close as you can get. These are log files from NetStumbler, a
13311
+ # Windows program, that scans for 802.11b networks.
13312
+ #
13313
+ 0 string NetS NetStumbler log file
13314
+ >8 lelong x \b, %d stations found
13315
+
13316
+ #
13317
+ # EtherPeek/AiroPeek "version 9" capture files.
13318
+ #
13319
+ 0 string \177ver EtherPeek/AiroPeek capture file
13320
+
13321
+ #
13322
+ # Visual Networks traffic capture files.
13323
+ #
13324
+ 0 string \x05VNF Visual Networks traffic capture file
13325
+
13326
+ #
13327
+ # Network Instruments Observer capture files.
13328
+ #
13329
+ 0 string ObserverPktBuffe Network Instruments Observer capture file
13330
+
13331
+ #
13332
+ # Files from Accellent Group's 5View products.
13333
+ #
13334
+ 0 string \xaa\xaa\xaa\xaa 5View capture file
13335
+ #------------------------------------------------------------------------------
13336
+ # softquad: file(1) magic for SoftQuad Publishing Software
13337
+ #
13338
+ # Author/Editor and RulesBuilder
13339
+ #
13340
+ # XXX - byte order?
13341
+ #
13342
+ 0 string \<!SQ\ DTD> Compiled SGML rules file
13343
+ >9 string >\0 Type %s
13344
+ 0 string \<!SQ\ A/E> A/E SGML Document binary
13345
+ >9 string >\0 Type %s
13346
+ 0 string \<!SQ\ STS> A/E SGML binary styles file
13347
+ >9 string >\0 Type %s
13348
+ 0 short 0xc0de Compiled PSI (v1) data
13349
+ 0 short 0xc0da Compiled PSI (v2) data
13350
+ >3 string >\0 (%s)
13351
+ # Binary sqtroff font/desc files...
13352
+ 0 short 0125252 SoftQuad DESC or font file binary
13353
+ >2 short >0 - version %d
13354
+ # Bitmaps...
13355
+ 0 search/1 SQ\ BITMAP1 SoftQuad Raster Format text
13356
+ #0 string SQ\ BITMAP2 SoftQuad Raster Format data
13357
+ # sqtroff intermediate language (replacement for ditroff int. lang.)
13358
+ 0 string X\ SoftQuad troff Context intermediate
13359
+ >2 string 495 for AT&T 495 laser printer
13360
+ >2 string hp for Hewlett-Packard LaserJet
13361
+ >2 string impr for IMAGEN imPRESS
13362
+ >2 string ps for PostScript
13363
+
13364
+ # From: Michael Piefel <piefel@debian.org>
13365
+ # sqtroff intermediate language (replacement for ditroff int. lang.)
13366
+ 0 string X\ 495 SoftQuad troff Context intermediate for AT&T 495 laser printer
13367
+ 0 string X\ hp SoftQuad troff Context intermediate for HP LaserJet
13368
+ 0 string X\ impr SoftQuad troff Context intermediate for IMAGEN imPRESS
13369
+ 0 string X\ ps SoftQuad troff Context intermediate for PostScript
13370
+
13371
+ #------------------------------------------------------------------------------
13372
+ # spec: file(1) magic for SPEC raw results (*.raw, *.rsf)
13373
+ #
13374
+ # Cloyce D. Spradling <cloyce@headgear.org>
13375
+
13376
+ 0 string spec SPEC
13377
+ >4 string .cpu CPU
13378
+ >>8 string <: \b%.4s
13379
+ >>12 string . raw result text
13380
+
13381
+ 17 string version=SPECjbb SPECjbb
13382
+ >32 string <: \b%.4s
13383
+ >>37 string <: v%.4s raw result text
13384
+
13385
+ 0 string BEGIN\040SPECWEB SPECweb
13386
+ >13 string <: \b%.2s
13387
+ >>15 string _SSL \b_SSL
13388
+ >>>20 string <: v%.4s raw result text
13389
+ >>16 string <: v%.4s raw result text
13390
+
13391
+ #------------------------------------------------------------------------------
13392
+ # spectrum: file(1) magic for Spectrum emulator files.
13393
+ #
13394
+ # John Elliott <jce@seasip.demon.co.uk>
13395
+
13396
+ #
13397
+ # Spectrum +3DOS header
13398
+ #
13399
+ 0 string PLUS3DOS\032 Spectrum +3 data
13400
+ >15 byte 0 - BASIC program
13401
+ >15 byte 1 - number array
13402
+ >15 byte 2 - character array
13403
+ >15 byte 3 - memory block
13404
+ >>16 belong 0x001B0040 (screen)
13405
+ >15 byte 4 - Tasword document
13406
+ >15 string TAPEFILE - ZXT tapefile
13407
+ #
13408
+ # Tape file. This assumes the .TAP starts with a Spectrum-format header,
13409
+ # which nearly all will.
13410
+ #
13411
+ # Update: Sanity-check string contents to be printable.
13412
+ # -Adam Buchbinder <adam.buchbinder@gmail.com>
13413
+ #
13414
+ 0 string \023\000\000
13415
+ >4 string >\0
13416
+ >>4 string <\177 Spectrum .TAP data "%-10.10s"
13417
+ >>>3 byte 0 - BASIC program
13418
+ >>>3 byte 1 - number array
13419
+ >>>3 byte 2 - character array
13420
+ >>>3 byte 3 - memory block
13421
+ >>>>14 belong 0x001B0040 (screen)
13422
+
13423
+ # The following three blocks are from pak21-spectrum@srcf.ucam.org
13424
+ # TZX tape images
13425
+ 0 string ZXTape!\x1a Spectrum .TZX data
13426
+ >8 byte x version %d
13427
+ >9 byte x \b.%d
13428
+
13429
+ # RZX input recording files
13430
+ 0 string RZX! Spectrum .RZX data
13431
+ >4 byte x version %d
13432
+ >5 byte x \b.%d
13433
+
13434
+ # Floppy disk images
13435
+ 0 string MV\ -\ CPCEMU\ Disk-Fil Amstrad/Spectrum .DSK data
13436
+ 0 string MV\ -\ CPC\ format\ Dis Amstrad/Spectrum DU54 .DSK data
13437
+ 0 string EXTENDED\ CPC\ DSK\ Fil Amstrad/Spectrum Extended .DSK data
13438
+ 0 string SINCLAIR Spectrum .SCL Betadisk image
13439
+
13440
+ # Hard disk images
13441
+ 0 string RS-IDE\x1a Spectrum .HDF hard disk image
13442
+ >7 byte x \b, version 0x%02x
13443
+
13444
+ #------------------------------------------------------------------------------
13445
+ # sql: file(1) magic for SQL files
13446
+ #
13447
+ # From: "Marty Leisner" <mleisner@eng.mc.xerox.com>
13448
+ # Recognize some MySQL files.
13449
+ #
13450
+ 0 beshort 0xfe01 MySQL table definition file
13451
+ >2 byte x Version %d
13452
+ 0 belong&0xffffff00 0xfefe0300 MySQL MISAM index file
13453
+ >3 byte x Version %d
13454
+ 0 belong&0xffffff00 0xfefe0700 MySQL MISAM compressed data file
13455
+ >3 byte x Version %d
13456
+ 0 belong&0xffffff00 0xfefe0500 MySQL ISAM index file
13457
+ >3 byte x Version %d
13458
+ 0 belong&0xffffff00 0xfefe0600 MySQL ISAM compressed data file
13459
+ >3 byte x Version %d
13460
+ 0 string \376bin MySQL replication log
13461
+
13462
+ #------------------------------------------------------------------------------
13463
+ # iRiver H Series database file
13464
+ # From Ken Guest <ken@linux.ie>
13465
+ # As observed from iRivNavi.iDB and unencoded firmware
13466
+ #
13467
+ 0 string iRivDB iRiver Database file
13468
+ >11 string >\0 Version %s
13469
+ >39 string iHP-100 [H Series]
13470
+
13471
+ #------------------------------------------------------------------------------
13472
+ # SQLite database files
13473
+ # Ken Guest <ken@linux.ie>, Ty Sarna, Zack Weinberg
13474
+ #
13475
+ # Version 1 used GDBM internally; its files cannot be distinguished
13476
+ # from other GDBM files.
13477
+ #
13478
+ # Version 2 used this format:
13479
+ 0 string **\ This\ file\ contains\ an\ SQLite SQLite 2.x database
13480
+
13481
+ # Version 3 of SQLite allows applications to embed their own "user version"
13482
+ # number in the database. Detect this and distinguish those files.
13483
+
13484
+ 0 string SQLite\ format\ 3
13485
+ >60 string _MTN Monotone source repository
13486
+ >60 belong !0 SQLite 3.x database, user version %u
13487
+ >60 belong 0 SQLite 3.x database
13488
+ # Type: OpenSSH key files
13489
+ # From: Nicolas Collignon <tsointsoin@gmail.com>
13490
+
13491
+ 0 string SSH\ PRIVATE\ KEY OpenSSH RSA1 private key,
13492
+ >28 string >\0 version %s
13493
+
13494
+ 0 string ssh-dss\ OpenSSH DSA public key
13495
+ 0 string ssh-rsa\ OpenSSH RSA public key
13496
+ # Type: OpenSSL certificates/key files
13497
+ # From: Nicolas Collignon <tsointsoin@gmail.com>
13498
+
13499
+ 0 string -----BEGIN\ CERTIFICATE----- PEM certificate
13500
+ 0 string -----BEGIN\ CERTIFICATE\ REQ PEM certificate request
13501
+ 0 string -----BEGIN\ RSA\ PRIVATE PEM RSA private key
13502
+ 0 string -----BEGIN\ DSA\ PRIVATE PEM DSA private key
13503
+
13504
+ #------------------------------------------------------------------------------
13505
+ # sun: file(1) magic for Sun machines
13506
+ #
13507
+ # Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x
13508
+ # releases. (5.x uses ELF.)
13509
+ #
13510
+ 0 belong&077777777 0600413 sparc demand paged
13511
+ >0 byte &0x80
13512
+ >>20 belong <4096 shared library
13513
+ >>20 belong =4096 dynamically linked executable
13514
+ >>20 belong >4096 dynamically linked executable
13515
+ >0 byte ^0x80 executable
13516
+ >16 belong >0 not stripped
13517
+
13518
+ 0 belong&077777777 0600410 sparc pure
13519
+ >0 byte &0x80 dynamically linked executable
13520
+ >0 byte ^0x80 executable
13521
+ >16 belong >0 not stripped
13522
+
13523
+ 0 belong&077777777 0600407 sparc
13524
+ >0 byte &0x80 dynamically linked executable
13525
+ >0 byte ^0x80 executable
13526
+ >16 belong >0 not stripped
13527
+
13528
+ 0 belong&077777777 0400413 mc68020 demand paged
13529
+ >0 byte &0x80
13530
+ >>20 belong <4096 shared library
13531
+ >>20 belong =4096 dynamically linked executable
13532
+ >>20 belong >4096 dynamically linked executable
13533
+ >0 byte ^0x80 executable
13534
+ >16 belong >0 not stripped
13535
+
13536
+ 0 belong&077777777 0400410 mc68020 pure
13537
+ >0 byte &0x80 dynamically linked executable
13538
+ >0 byte ^0x80 executable
13539
+ >16 belong >0 not stripped
13540
+
13541
+ 0 belong&077777777 0400407 mc68020
13542
+ >0 byte &0x80 dynamically linked executable
13543
+ >0 byte ^0x80 executable
13544
+ >16 belong >0 not stripped
13545
+
13546
+ 0 belong&077777777 0200413 mc68010 demand paged
13547
+ >0 byte &0x80
13548
+ >>20 belong <4096 shared library
13549
+ >>20 belong =4096 dynamically linked executable
13550
+ >>20 belong >4096 dynamically linked executable
13551
+ >0 byte ^0x80 executable
13552
+ >16 belong >0 not stripped
13553
+
13554
+ 0 belong&077777777 0200410 mc68010 pure
13555
+ >0 byte &0x80 dynamically linked executable
13556
+ >0 byte ^0x80 executable
13557
+ >16 belong >0 not stripped
13558
+
13559
+ 0 belong&077777777 0200407 mc68010
13560
+ >0 byte &0x80 dynamically linked executable
13561
+ >0 byte ^0x80 executable
13562
+ >16 belong >0 not stripped
13563
+
13564
+ # reworked these to avoid anything beginning with zero becoming "old sun-2"
13565
+ 0 belong 0407 old sun-2 executable
13566
+ >16 belong >0 not stripped
13567
+ 0 belong 0410 old sun-2 pure executable
13568
+ >16 belong >0 not stripped
13569
+ 0 belong 0413 old sun-2 demand paged executable
13570
+ >16 belong >0 not stripped
13571
+
13572
+ #
13573
+ # Core files. "SPARC 4.x BCP" means "core file from a SunOS 4.x SPARC
13574
+ # binary executed in compatibility mode under SunOS 5.x".
13575
+ #
13576
+ 0 belong 0x080456 SunOS core file
13577
+ >4 belong 432 (SPARC)
13578
+ >>132 string >\0 from '%s'
13579
+ >>116 belong =3 (quit)
13580
+ >>116 belong =4 (illegal instruction)
13581
+ >>116 belong =5 (trace trap)
13582
+ >>116 belong =6 (abort)
13583
+ >>116 belong =7 (emulator trap)
13584
+ >>116 belong =8 (arithmetic exception)
13585
+ >>116 belong =9 (kill)
13586
+ >>116 belong =10 (bus error)
13587
+ >>116 belong =11 (segmentation violation)
13588
+ >>116 belong =12 (bad argument to system call)
13589
+ >>116 belong =29 (resource lost)
13590
+ >>120 belong x (T=%dK,
13591
+ >>124 belong x D=%dK,
13592
+ >>128 belong x S=%dK)
13593
+ >4 belong 826 (68K)
13594
+ >>128 string >\0 from '%s'
13595
+ >4 belong 456 (SPARC 4.x BCP)
13596
+ >>152 string >\0 from '%s'
13597
+ # Sun SunPC
13598
+ 0 long 0xfa33c08e SunPC 4.0 Hard Disk
13599
+ 0 string #SUNPC_CONFIG SunPC 4.0 Properties Values
13600
+ # Sun snoop (see RFC 1761, which describes the capture file format).
13601
+ #
13602
+ 0 string snoop Snoop capture file
13603
+ >8 belong >0 - version %ld
13604
+ >12 belong 0 (IEEE 802.3)
13605
+ >12 belong 1 (IEEE 802.4)
13606
+ >12 belong 2 (IEEE 802.5)
13607
+ >12 belong 3 (IEEE 802.6)
13608
+ >12 belong 4 (Ethernet)
13609
+ >12 belong 5 (HDLC)
13610
+ >12 belong 6 (Character synchronous)
13611
+ >12 belong 7 (IBM channel-to-channel adapter)
13612
+ >12 belong 8 (FDDI)
13613
+ >12 belong 9 (Unknown)
13614
+
13615
+ # Microsoft ICM color profile
13616
+ 36 string acspMSFT Microsoft ICM Color Profile
13617
+ # Sun KCMS
13618
+ 36 string acsp Kodak Color Management System, ICC Profile
13619
+
13620
+ #---------------------------------------------------------------------------
13621
+ # The following entries have been tested by Duncan Laurie <duncan@sun.com> (a
13622
+ # lead Sun/Cobalt developer) who agrees that they are good and worthy of
13623
+ # inclusion.
13624
+
13625
+ # Boot ROM images for Sun/Cobalt Linux server appliances
13626
+ 0 string Cobalt\ Networks\ Inc.\nFirmware\ v Paged COBALT boot rom
13627
+ >38 string x V%.4s
13628
+
13629
+ # New format for Sun/Cobalt boot ROMs is annoying, it stores the version code
13630
+ # at the very end where file(1) can't get it.
13631
+ 0 string CRfs COBALT boot rom data (Flat boot rom or file system)
13632
+
13633
+
13634
+ #------------------------------------------------------------------------
13635
+ # sysex: file(1) magic for MIDI sysex files
13636
+ #
13637
+ #
13638
+ 0 byte 0xF0 SysEx File -
13639
+
13640
+ # North American Group
13641
+ >1 byte 0x01 Sequential
13642
+ >1 byte 0x02 IDP
13643
+ >1 byte 0x03 OctavePlateau
13644
+ >1 byte 0x04 Moog
13645
+ >1 byte 0x05 Passport
13646
+ >1 byte 0x06 Lexicon
13647
+ >1 byte 0x07 Kurzweil/Future Retro
13648
+ >>3 byte 0x77 777
13649
+ >>4 byte 0x00 Bank
13650
+ >>4 byte 0x01 Song
13651
+ >>5 byte 0x0f 16
13652
+ >>5 byte 0x0e 15
13653
+ >>5 byte 0x0d 14
13654
+ >>5 byte 0x0c 13
13655
+ >>5 byte 0x0b 12
13656
+ >>5 byte 0x0a 11
13657
+ >>5 byte 0x09 10
13658
+ >>5 byte 0x08 9
13659
+ >>5 byte 0x07 8
13660
+ >>5 byte 0x06 7
13661
+ >>5 byte 0x05 6
13662
+ >>5 byte 0x04 5
13663
+ >>5 byte 0x03 4
13664
+ >>5 byte 0x02 3
13665
+ >>5 byte 0x01 2
13666
+ >>5 byte 0x00 1
13667
+ >>5 byte 0x10 (ALL)
13668
+ >>2 byte x \b, Channel %d
13669
+ >1 byte 0x08 Fender
13670
+ >1 byte 0x09 Gulbransen
13671
+ >1 byte 0x0a AKG
13672
+ >1 byte 0x0b Voyce
13673
+ >1 byte 0x0c Waveframe
13674
+ >1 byte 0x0d ADA
13675
+ >1 byte 0x0e Garfield
13676
+ >1 byte 0x0f Ensoniq
13677
+ >1 byte 0x10 Oberheim
13678
+ >>2 byte 0x06 Matrix 6 series
13679
+ >>3 byte 0x0A Dump (All)
13680
+ >>3 byte 0x01 Dump (Bank)
13681
+ >>4 belong 0x0002040E Matrix 1000
13682
+ >>>11 byte <2 User bank %d
13683
+ >>>11 byte >1 Preset bank %d
13684
+ >1 byte 0x11 Apple
13685
+ >1 byte 0x12 GreyMatter
13686
+ >1 byte 0x14 PalmTree
13687
+ >1 byte 0x15 JLCooper
13688
+ >1 byte 0x16 Lowrey
13689
+ >1 byte 0x17 AdamsSmith
13690
+ >1 byte 0x18 E-mu
13691
+ >1 byte 0x19 Harmony
13692
+ >1 byte 0x1a ART
13693
+ >1 byte 0x1b Baldwin
13694
+ >1 byte 0x1c Eventide
13695
+ >1 byte 0x1d Inventronics
13696
+ >1 byte 0x1f Clarity
13697
+
13698
+ # European Group
13699
+ >1 byte 0x21 SIEL
13700
+ >1 byte 0x22 Synthaxe
13701
+ >1 byte 0x24 Hohner
13702
+ >1 byte 0x25 Twister
13703
+ >1 byte 0x26 Solton
13704
+ >1 byte 0x27 Jellinghaus
13705
+ >1 byte 0x28 Southworth
13706
+ >1 byte 0x29 PPG
13707
+ >1 byte 0x2a JEN
13708
+ >1 byte 0x2b SSL
13709
+ >1 byte 0x2c AudioVertrieb
13710
+
13711
+ >1 byte 0x2f ELKA
13712
+ >>3 byte 0x09 EK-44
13713
+
13714
+ >1 byte 0x30 Dynacord
13715
+ >1 byte 0x31 Jomox
13716
+ >1 byte 0x33 Clavia
13717
+ >1 byte 0x39 Soundcraft
13718
+ # Some Waldorf info from http://Stromeko.Synth.net/Downloads#WaldorfDocs
13719
+ >1 byte 0x3e Waldorf
13720
+ >>2 byte 0x00 microWave
13721
+ >>2 byte 0x0E microwave2 / XT
13722
+ >>2 byte 0x0F Q / Q+
13723
+ >>3 byte =0 (default id)
13724
+ >>3 byte >0 (
13725
+ >>>3 byte <0x7F \bdevice %d)
13726
+ >>>3 byte =0x7F \bbroadcast id)
13727
+ >>3 byte 0x7f Microwave I
13728
+ >>>4 byte 0x00 SNDR (Sound Request)
13729
+ >>>4 byte 0x10 SNDD (Sound Dump)
13730
+ >>>4 byte 0x20 SNDP (Sound Parameter Change)
13731
+ >>>4 byte 0x30 SNDQ (Sound Parameter Inquiry)
13732
+ >>>4 byte 0x70 BOOT (Sound Reserved)
13733
+ >>>4 byte 0x01 MULR (Multi Request)
13734
+ >>>4 byte 0x11 MULD (Multi Dump)
13735
+ >>>4 byte 0x21 MULP (Multi Parameter Change)
13736
+ >>>4 byte 0x31 MULQ (Multi Parameter Inquiry)
13737
+ >>>4 byte 0x71 OS (Multi Reserved)
13738
+ >>>4 byte 0x02 DRMR (Drum Map Request)
13739
+ >>>4 byte 0x12 DRMD (Drum Map Dump)
13740
+ >>>4 byte 0x22 DRMP (Drum Map Parameter Change)
13741
+ >>>4 byte 0x32 DRMQ (Drum Map Parameter Inquiry)
13742
+ >>>4 byte 0x72 BIN (Drum Map Reserved)
13743
+ >>>4 byte 0x03 PATR (Sequencer Pattern Request)
13744
+ >>>4 byte 0x13 PATD (Sequencer Pattern Dump)
13745
+ >>>4 byte 0x23 PATP (Sequencer Pattern Parameter Change)
13746
+ >>>4 byte 0x33 PATQ (Sequencer Pattern Parameter Inquiry)
13747
+ >>>4 byte 0x73 AFM (Sequencer Pattern Reserved)
13748
+ >>>4 byte 0x04 GLBR (Global Parameter Request)
13749
+ >>>4 byte 0x14 GLBD (Global Parameter Dump)
13750
+ >>>4 byte 0x24 GLBP (Global Parameter Parameter Change)
13751
+ >>>4 byte 0x34 GLBQ (Global Parameter Parameter Inquiry)
13752
+ >>>4 byte 0x07 MODR (Mode Parameter Request)
13753
+ >>>4 byte 0x17 MODD (Mode Parameter Dump)
13754
+ >>>4 byte 0x27 MODP (Mode Parameter Parameter Change)
13755
+ >>>4 byte 0x37 MODQ (Mode Parameter Parameter Inquiry)
13756
+ >>2 byte 0x10 microQ
13757
+ >>>4 byte 0x00 SNDR (Sound Request)
13758
+ >>>4 byte 0x10 SNDD (Sound Dump)
13759
+ >>>4 byte 0x20 SNDP (Sound Parameter Change)
13760
+ >>>4 byte 0x30 SNDQ (Sound Parameter Inquiry)
13761
+ >>>4 byte 0x70 (Sound Reserved)
13762
+ >>>4 byte 0x01 MULR (Multi Request)
13763
+ >>>4 byte 0x11 MULD (Multi Dump)
13764
+ >>>4 byte 0x21 MULP (Multi Parameter Change)
13765
+ >>>4 byte 0x31 MULQ (Multi Parameter Inquiry)
13766
+ >>>4 byte 0x71 OS (Multi Reserved)
13767
+ >>>4 byte 0x02 DRMR (Drum Map Request)
13768
+ >>>4 byte 0x12 DRMD (Drum Map Dump)
13769
+ >>>4 byte 0x22 DRMP (Drum Map Parameter Change)
13770
+ >>>4 byte 0x32 DRMQ (Drum Map Parameter Inquiry)
13771
+ >>>4 byte 0x72 BIN (Drum Map Reserved)
13772
+ >>>4 byte 0x04 GLBR (Global Parameter Request)
13773
+ >>>4 byte 0x14 GLBD (Global Parameter Dump)
13774
+ >>>4 byte 0x24 GLBP (Global Parameter Parameter Change)
13775
+ >>>4 byte 0x34 GLBQ (Global Parameter Parameter Inquiry)
13776
+ >>2 byte 0x11 rackAttack
13777
+ >>>4 byte 0x00 SNDR (Sound Parameter Request)
13778
+ >>>4 byte 0x10 SNDD (Sound Parameter Dump)
13779
+ >>>4 byte 0x20 SNDP (Sound Parameter Parameter Change)
13780
+ >>>4 byte 0x30 SNDQ (Sound Parameter Parameter Inquiry)
13781
+ >>>4 byte 0x01 PRGR (Program Parameter Request)
13782
+ >>>4 byte 0x11 PRGD (Program Parameter Dump)
13783
+ >>>4 byte 0x21 PRGP (Program Parameter Parameter Change)
13784
+ >>>4 byte 0x31 PRGQ (Program Parameter Parameter Inquiry)
13785
+ >>>4 byte 0x71 OS (Program Parameter Reserved)
13786
+ >>>4 byte 0x03 PATR (Pattern Parameter Request)
13787
+ >>>4 byte 0x13 PATD (Pattern Parameter Dump)
13788
+ >>>4 byte 0x23 PATP (Pattern Parameter Parameter Change)
13789
+ >>>4 byte 0x33 PATQ (Pattern Parameter Parameter Inquiry)
13790
+ >>>4 byte 0x04 GLBR (Global Parameter Request)
13791
+ >>>4 byte 0x14 GLBD (Global Parameter Dump)
13792
+ >>>4 byte 0x24 GLBP (Global Parameter Parameter Change)
13793
+ >>>4 byte 0x34 GLBQ (Global Parameter Parameter Inquiry)
13794
+ >>>4 byte 0x05 EFXR (FX Parameter Request)
13795
+ >>>4 byte 0x15 EFXD (FX Parameter Dump)
13796
+ >>>4 byte 0x25 EFXP (FX Parameter Parameter Change)
13797
+ >>>4 byte 0x35 EFXQ (FX Parameter Parameter Inquiry)
13798
+ >>>4 byte 0x07 MODR (Mode Command Request)
13799
+ >>>4 byte 0x17 MODD (Mode Command Dump)
13800
+ >>>4 byte 0x27 MODP (Mode Command Parameter Change)
13801
+ >>>4 byte 0x37 MODQ (Mode Command Parameter Inquiry)
13802
+ >>2 byte 0x03 Wave
13803
+ >>>4 byte 0x00 SBPR (Soundprogram)
13804
+ >>>4 byte 0x01 SAPR (Performance)
13805
+ >>>4 byte 0x02 SWAVE (Wave)
13806
+ >>>4 byte 0x03 SWTBL (Wave control table)
13807
+ >>>4 byte 0x04 SVT (Velocity Curve)
13808
+ >>>4 byte 0x05 STT (Tuning Table)
13809
+ >>>4 byte 0x06 SGLB (Global Parameters)
13810
+ >>>4 byte 0x07 SARRMAP (Performance Program Change Map)
13811
+ >>>4 byte 0x08 SBPRMAP (Sound Program Change Map)
13812
+ >>>4 byte 0x09 SBPRPAR (Sound Parameter)
13813
+ >>>4 byte 0x0A SARRPAR (Performance Parameter)
13814
+ >>>4 byte 0x0B SINSPAR (Instrument/External Parameter)
13815
+ >>>4 byte 0x0F SBULK (Bulk Switch on/off)
13816
+
13817
+ # Japanese Group
13818
+ >1 byte 0x40 Kawai
13819
+ >>3 byte 0x20 K1
13820
+ >>3 byte 0x22 K4
13821
+
13822
+ >1 byte 0x41 Roland
13823
+ >>3 byte 0x14 D-50
13824
+ >>3 byte 0x2b U-220
13825
+ >>3 byte 0x02 TR-707
13826
+
13827
+ >1 byte 0x42 Korg
13828
+ >>3 byte 0x19 M1
13829
+
13830
+ >1 byte 0x43 Yamaha
13831
+ >1 byte 0x44 Casio
13832
+ >1 byte 0x46 Kamiya
13833
+ >1 byte 0x47 Akai
13834
+ >1 byte 0x48 Victor
13835
+ >1 byte 0x49 Mesosha
13836
+ >1 byte 0x4b Fujitsu
13837
+ >1 byte 0x4c Sony
13838
+ >1 byte 0x4e Teac
13839
+ >1 byte 0x50 Matsushita
13840
+ >1 byte 0x51 Fostex
13841
+ >1 byte 0x52 Zoom
13842
+ >1 byte 0x54 Matsushita
13843
+ >1 byte 0x57 Acoustic tech. lab.
13844
+
13845
+ >1 belong&0xffffff00 0x00007400 Ta Horng
13846
+ >1 belong&0xffffff00 0x00007500 e-Tek
13847
+ >1 belong&0xffffff00 0x00007600 E-Voice
13848
+ >1 belong&0xffffff00 0x00007700 Midisoft
13849
+ >1 belong&0xffffff00 0x00007800 Q-Sound
13850
+ >1 belong&0xffffff00 0x00007900 Westrex
13851
+ >1 belong&0xffffff00 0x00007a00 Nvidia*
13852
+ >1 belong&0xffffff00 0x00007b00 ESS
13853
+ >1 belong&0xffffff00 0x00007c00 Mediatrix
13854
+ >1 belong&0xffffff00 0x00007d00 Brooktree
13855
+ >1 belong&0xffffff00 0x00007e00 Otari
13856
+ >1 belong&0xffffff00 0x00007f00 Key Electronics
13857
+ >1 belong&0xffffff00 0x00010000 Shure
13858
+ >1 belong&0xffffff00 0x00010100 AuraSound
13859
+ >1 belong&0xffffff00 0x00010200 Crystal
13860
+ >1 belong&0xffffff00 0x00010300 Rockwell
13861
+ >1 belong&0xffffff00 0x00010400 Silicon Graphics
13862
+ >1 belong&0xffffff00 0x00010500 Midiman
13863
+ >1 belong&0xffffff00 0x00010600 PreSonus
13864
+ >1 belong&0xffffff00 0x00010800 Topaz
13865
+ >1 belong&0xffffff00 0x00010900 Cast Lightning
13866
+ >1 belong&0xffffff00 0x00010a00 Microsoft
13867
+ >1 belong&0xffffff00 0x00010b00 Sonic Foundry
13868
+ >1 belong&0xffffff00 0x00010c00 Line 6
13869
+ >1 belong&0xffffff00 0x00010d00 Beatnik Inc.
13870
+ >1 belong&0xffffff00 0x00010e00 Van Koerving
13871
+ >1 belong&0xffffff00 0x00010f00 Altech Systems
13872
+ >1 belong&0xffffff00 0x00011000 S & S Research
13873
+ >1 belong&0xffffff00 0x00011100 VLSI Technology
13874
+ >1 belong&0xffffff00 0x00011200 Chromatic
13875
+ >1 belong&0xffffff00 0x00011300 Sapphire
13876
+ >1 belong&0xffffff00 0x00011400 IDRC
13877
+ >1 belong&0xffffff00 0x00011500 Justonic Tuning
13878
+ >1 belong&0xffffff00 0x00011600 TorComp
13879
+ >1 belong&0xffffff00 0x00011700 Newtek Inc.
13880
+ >1 belong&0xffffff00 0x00011800 Sound Sculpture
13881
+ >1 belong&0xffffff00 0x00011900 Walker Technical
13882
+ >1 belong&0xffffff00 0x00011a00 Digital Harmony
13883
+ >1 belong&0xffffff00 0x00011b00 InVision
13884
+ >1 belong&0xffffff00 0x00011c00 T-Square
13885
+ >1 belong&0xffffff00 0x00011d00 Nemesys
13886
+ >1 belong&0xffffff00 0x00011e00 DBX
13887
+ >1 belong&0xffffff00 0x00011f00 Syndyne
13888
+ >1 belong&0xffffff00 0x00012000 Bitheadz
13889
+ >1 belong&0xffffff00 0x00012100 Cakewalk
13890
+ >1 belong&0xffffff00 0x00012200 Staccato
13891
+ >1 belong&0xffffff00 0x00012300 National Semicon.
13892
+ >1 belong&0xffffff00 0x00012400 Boom Theory
13893
+ >1 belong&0xffffff00 0x00012500 Virtual DSP Corp
13894
+ >1 belong&0xffffff00 0x00012600 Antares
13895
+ >1 belong&0xffffff00 0x00012700 Angel Software
13896
+ >1 belong&0xffffff00 0x00012800 St Louis Music
13897
+ >1 belong&0xffffff00 0x00012900 Lyrrus dba G-VOX
13898
+ >1 belong&0xffffff00 0x00012a00 Ashley Audio
13899
+ >1 belong&0xffffff00 0x00012b00 Vari-Lite
13900
+ >1 belong&0xffffff00 0x00012c00 Summit Audio
13901
+ >1 belong&0xffffff00 0x00012d00 Aureal Semicon.
13902
+ >1 belong&0xffffff00 0x00012e00 SeaSound
13903
+ >1 belong&0xffffff00 0x00012f00 U.S. Robotics
13904
+ >1 belong&0xffffff00 0x00013000 Aurisis
13905
+ >1 belong&0xffffff00 0x00013100 Nearfield Multimedia
13906
+ >1 belong&0xffffff00 0x00013200 FM7 Inc.
13907
+ >1 belong&0xffffff00 0x00013300 Swivel Systems
13908
+ >1 belong&0xffffff00 0x00013400 Hyperactive
13909
+ >1 belong&0xffffff00 0x00013500 MidiLite
13910
+ >1 belong&0xffffff00 0x00013600 Radical
13911
+ >1 belong&0xffffff00 0x00013700 Roger Linn
13912
+ >1 belong&0xffffff00 0x00013800 Helicon
13913
+ >1 belong&0xffffff00 0x00013900 Event
13914
+ >1 belong&0xffffff00 0x00013a00 Sonic Network
13915
+ >1 belong&0xffffff00 0x00013b00 Realtime Music
13916
+ >1 belong&0xffffff00 0x00013c00 Apogee Digital
13917
+
13918
+ >1 belong&0xffffff00 0x00202b00 Medeli Electronics
13919
+ >1 belong&0xffffff00 0x00202c00 Charlie Lab
13920
+ >1 belong&0xffffff00 0x00202d00 Blue Chip Music
13921
+ >1 belong&0xffffff00 0x00202e00 BEE OH Corp
13922
+ >1 belong&0xffffff00 0x00202f00 LG Semicon America
13923
+ >1 belong&0xffffff00 0x00203000 TESI
13924
+ >1 belong&0xffffff00 0x00203100 EMAGIC
13925
+ >1 belong&0xffffff00 0x00203200 Behringer
13926
+ >1 belong&0xffffff00 0x00203300 Access Music
13927
+ >1 belong&0xffffff00 0x00203400 Synoptic
13928
+ >1 belong&0xffffff00 0x00203500 Hanmesoft Corp
13929
+ >1 belong&0xffffff00 0x00203600 Terratec
13930
+ >1 belong&0xffffff00 0x00203700 Proel SpA
13931
+ >1 belong&0xffffff00 0x00203800 IBK MIDI
13932
+ >1 belong&0xffffff00 0x00203900 IRCAM
13933
+ >1 belong&0xffffff00 0x00203a00 Propellerhead Software
13934
+ >1 belong&0xffffff00 0x00203b00 Red Sound Systems
13935
+ >1 belong&0xffffff00 0x00203c00 Electron ESI AB
13936
+ >1 belong&0xffffff00 0x00203d00 Sintefex Audio
13937
+ >1 belong&0xffffff00 0x00203e00 Music and More
13938
+ >1 belong&0xffffff00 0x00203f00 Amsaro
13939
+ >1 belong&0xffffff00 0x00204000 CDS Advanced Technology
13940
+ >1 belong&0xffffff00 0x00204100 Touched by Sound
13941
+ >1 belong&0xffffff00 0x00204200 DSP Arts
13942
+ >1 belong&0xffffff00 0x00204300 Phil Rees Music
13943
+ >1 belong&0xffffff00 0x00204400 Stamer Musikanlagen GmbH
13944
+ >1 belong&0xffffff00 0x00204500 Soundart
13945
+ >1 belong&0xffffff00 0x00204600 C-Mexx Software
13946
+ >1 belong&0xffffff00 0x00204700 Klavis Tech.
13947
+ >1 belong&0xffffff00 0x00204800 Noteheads AB
13948
+
13949
+ 0 string T707 Roland TR-707 Data
13950
+ #------------------------------------------------------------------------------
13951
+ # teapot: file(1) magic for "teapot" spreadsheet
13952
+ #
13953
+ 0 string #!teapot\012xdr teapot work sheet (XDR format)
13954
+
13955
+ #------------------------------------------------------------------------------
13956
+ # terminfo: file(1) magic for terminfo
13957
+ #
13958
+ # XXX - byte order for screen images?
13959
+ #
13960
+ 0 string \032\001 Compiled terminfo entry
13961
+ 0 short 0433 Curses screen image
13962
+ 0 short 0434 Curses screen image
13963
+ #------------------------------------------------------------------------------
13964
+ # tex: file(1) magic for TeX files
13965
+ #
13966
+ # XXX - needs byte-endian stuff (big-endian and little-endian DVI?)
13967
+ #
13968
+ # From <conklin@talisman.kaleida.com>
13969
+
13970
+ # Although we may know the offset of certain text fields in TeX DVI
13971
+ # and font files, we can't use them reliably because they are not
13972
+ # zero terminated. [but we do anyway, christos]
13973
+ 0 string \367\002 TeX DVI file
13974
+ !:mime application/x-dvi
13975
+ >16 string >\0 (%s)
13976
+ 0 string \367\203 TeX generic font data
13977
+ 0 string \367\131 TeX packed font data
13978
+ >3 string >\0 (%s)
13979
+ 0 string \367\312 TeX virtual font data
13980
+ 0 search/1 This\ is\ TeX, TeX transcript text
13981
+ 0 search/1 This\ is\ METAFONT, METAFONT transcript text
13982
+
13983
+ # There is no way to detect TeX Font Metric (*.tfm) files without
13984
+ # breaking them apart and reading the data. The following patterns
13985
+ # match most *.tfm files generated by METAFONT or afm2tfm.
13986
+ 2 string \000\021 TeX font metric data
13987
+ !:mime application/x-tex-tfm
13988
+ >33 string >\0 (%s)
13989
+ 2 string \000\022 TeX font metric data
13990
+ !:mime application/x-tex-tfm
13991
+ >33 string >\0 (%s)
13992
+
13993
+ # Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com)
13994
+ 0 search/1 \\input\ texinfo Texinfo source text
13995
+ !:mime text/x-texinfo
13996
+ 0 search/1 This\ is\ Info\ file GNU Info text
13997
+ !:mime text/x-info
13998
+
13999
+ # TeX documents, from Daniel Quinlan (quinlan@yggdrasil.com)
14000
+ 0 search/400 \\input TeX document text
14001
+ !:mime text/x-tex
14002
+ 0 search/400 \\section LaTeX document text
14003
+ !:mime text/x-tex
14004
+ 0 search/400 \\setlength LaTeX document text
14005
+ !:mime text/x-tex
14006
+ 0 search/400 \\documentstyle LaTeX document text
14007
+ !:mime text/x-tex
14008
+ 0 search/400 \\chapter LaTeX document text
14009
+ !:mime text/x-tex
14010
+ 0 search/400 \\documentclass LaTeX 2e document text
14011
+ !:mime text/x-tex
14012
+ 0 search/400 \\relax LaTeX auxiliary file
14013
+ !:mime text/x-tex
14014
+ 0 search/400 \\contentsline LaTeX table of contents
14015
+ !:mime text/x-tex
14016
+ 0 search/400 %\ -*-latex-*- LaTeX document text
14017
+ !:mime text/x-tex
14018
+
14019
+ # Tex document, from Hendrik Scholz <hendrik@scholz.net>
14020
+ 0 search/1 \\ifx TeX document text
14021
+
14022
+ # Index and glossary files
14023
+ 0 search/400 \\indexentry LaTeX raw index file
14024
+ 0 search/400 \\begin{theindex} LaTeX sorted index
14025
+ 0 search/400 \\glossaryentry LaTeX raw glossary
14026
+ 0 search/400 \\begin{theglossary} LaTeX sorted glossary
14027
+ 0 search/400 This\ is\ makeindex Makeindex log file
14028
+
14029
+ # End of TeX
14030
+
14031
+ #------------------------------------------------------------------------------
14032
+ # file(1) magic for BibTex text files
14033
+ # From Hendrik Scholz <hendrik@scholz.net>
14034
+
14035
+ 0 search/1/c @article{ BibTeX text file
14036
+ 0 search/1/c @book{ BibTeX text file
14037
+ 0 search/1/c @inbook{ BibTeX text file
14038
+ 0 search/1/c @incollection{ BibTeX text file
14039
+ 0 search/1/c @inproceedings{ BibTeX text file
14040
+ 0 search/1/c @manual{ BibTeX text file
14041
+ 0 search/1/c @misc{ BibTeX text file
14042
+ 0 search/1/c @preamble{ BibTeX text file
14043
+ 0 search/1/c @phdthesis{ BibTeX text file
14044
+ 0 search/1/c @techreport{ BibTeX text file
14045
+ 0 search/1/c @unpublished{ BibTeX text file
14046
+
14047
+ 73 search/1 %%%\ \ BibTeX-file{ BibTex text file (with full header)
14048
+
14049
+ 73 search/1 %%%\ \ @BibTeX-style-file{ BibTeX style text file (with full header)
14050
+
14051
+ 0 search/1 %\ BibTeX\ standard\ bibliography\ BibTeX standard bibliography style text file
14052
+
14053
+ 0 search/1 %\ BibTeX\ ` BibTeX custom bibliography style text file
14054
+
14055
+ 0 search/1 @c\ @mapfile{ TeX font aliases text file
14056
+ #------------------------------------------------------------------------------
14057
+ # file(1) magic for tgif(1) files
14058
+ # From Hendrik Scholz <hendrik@scholz.net>
14059
+
14060
+ 0 string %TGIF\ x Tgif file version %s
14061
+
14062
+ # ------------------------------------------------------------------------
14063
+ # ti-8x: file(1) magic for the TI-8x and TI-9x Graphing Calculators.
14064
+ #
14065
+ # From: Ryan McGuire (rmcguire@freenet.columbus.oh.us).
14066
+ #
14067
+ # Update: Romain Lievin (roms@lpg.ticalc.org).
14068
+ #
14069
+ # NOTE: This list is not complete.
14070
+ # Files for the TI-80 and TI-81 are pretty rare. I'm not going to put the
14071
+ # program/group magic numbers in here because I cannot find any.
14072
+ 0 string **TI80** TI-80 Graphing Calculator File.
14073
+ 0 string **TI81** TI-81 Graphing Calculator File.
14074
+ #
14075
+ # Magic Numbers for the TI-73
14076
+ #
14077
+ 0 string **TI73** TI-73 Graphing Calculator
14078
+ >0x00003B byte 0x00 (real number)
14079
+ >0x00003B byte 0x01 (list)
14080
+ >0x00003B byte 0x02 (matrix)
14081
+ >0x00003B byte 0x03 (equation)
14082
+ >0x00003B byte 0x04 (string)
14083
+ >0x00003B byte 0x05 (program)
14084
+ >0x00003B byte 0x06 (assembly program)
14085
+ >0x00003B byte 0x07 (picture)
14086
+ >0x00003B byte 0x08 (gdb)
14087
+ >0x00003B byte 0x0C (complex number)
14088
+ >0x00003B byte 0x0F (window settings)
14089
+ >0x00003B byte 0x10 (zoom)
14090
+ >0x00003B byte 0x11 (table setup)
14091
+ >0x00003B byte 0x13 (backup)
14092
+
14093
+ # Magic Numbers for the TI-82
14094
+ #
14095
+ 0 string **TI82** TI-82 Graphing Calculator
14096
+ >0x00003B byte 0x00 (real)
14097
+ >0x00003B byte 0x01 (list)
14098
+ >0x00003B byte 0x02 (matrix)
14099
+ >0x00003B byte 0x03 (Y-variable)
14100
+ >0x00003B byte 0x05 (program)
14101
+ >0x00003B byte 0x06 (protected prgm)
14102
+ >0x00003B byte 0x07 (picture)
14103
+ >0x00003B byte 0x08 (gdb)
14104
+ >0x00003B byte 0x0B (window settings)
14105
+ >0x00003B byte 0x0C (window settings)
14106
+ >0x00003B byte 0x0D (table setup)
14107
+ >0x00003B byte 0x0E (screenshot)
14108
+ >0x00003B byte 0x0F (backup)
14109
+ #
14110
+ # Magic Numbers for the TI-83
14111
+ #
14112
+ 0 string **TI83** TI-83 Graphing Calculator
14113
+ >0x00003B byte 0x00 (real)
14114
+ >0x00003B byte 0x01 (list)
14115
+ >0x00003B byte 0x02 (matrix)
14116
+ >0x00003B byte 0x03 (Y-variable)
14117
+ >0x00003B byte 0x04 (string)
14118
+ >0x00003B byte 0x05 (program)
14119
+ >0x00003B byte 0x06 (protected prgm)
14120
+ >0x00003B byte 0x07 (picture)
14121
+ >0x00003B byte 0x08 (gdb)
14122
+ >0x00003B byte 0x0B (window settings)
14123
+ >0x00003B byte 0x0C (window settings)
14124
+ >0x00003B byte 0x0D (table setup)
14125
+ >0x00003B byte 0x0E (screenshot)
14126
+ >0x00003B byte 0x13 (backup)
14127
+ #
14128
+ # Magic Numbers for the TI-83+
14129
+ #
14130
+ 0 string **TI83F* TI-83+ Graphing Calculator
14131
+ >0x00003B byte 0x00 (real number)
14132
+ >0x00003B byte 0x01 (list)
14133
+ >0x00003B byte 0x02 (matrix)
14134
+ >0x00003B byte 0x03 (equation)
14135
+ >0x00003B byte 0x04 (string)
14136
+ >0x00003B byte 0x05 (program)
14137
+ >0x00003B byte 0x06 (assembly program)
14138
+ >0x00003B byte 0x07 (picture)
14139
+ >0x00003B byte 0x08 (gdb)
14140
+ >0x00003B byte 0x0C (complex number)
14141
+ >0x00003B byte 0x0F (window settings)
14142
+ >0x00003B byte 0x10 (zoom)
14143
+ >0x00003B byte 0x11 (table setup)
14144
+ >0x00003B byte 0x13 (backup)
14145
+ >0x00003B byte 0x15 (application variable)
14146
+ >0x00003B byte 0x17 (group of variable)
14147
+
14148
+ #
14149
+ # Magic Numbers for the TI-85
14150
+ #
14151
+ 0 string **TI85** TI-85 Graphing Calculator
14152
+ >0x00003B byte 0x00 (real number)
14153
+ >0x00003B byte 0x01 (complex number)
14154
+ >0x00003B byte 0x02 (real vector)
14155
+ >0x00003B byte 0x03 (complex vector)
14156
+ >0x00003B byte 0x04 (real list)
14157
+ >0x00003B byte 0x05 (complex list)
14158
+ >0x00003B byte 0x06 (real matrix)
14159
+ >0x00003B byte 0x07 (complex matrix)
14160
+ >0x00003B byte 0x08 (real constant)
14161
+ >0x00003B byte 0x09 (complex constant)
14162
+ >0x00003B byte 0x0A (equation)
14163
+ >0x00003B byte 0x0C (string)
14164
+ >0x00003B byte 0x0D (function GDB)
14165
+ >0x00003B byte 0x0E (polar GDB)
14166
+ >0x00003B byte 0x0F (parametric GDB)
14167
+ >0x00003B byte 0x10 (diffeq GDB)
14168
+ >0x00003B byte 0x11 (picture)
14169
+ >0x00003B byte 0x12 (program)
14170
+ >0x00003B byte 0x13 (range)
14171
+ >0x00003B byte 0x17 (window settings)
14172
+ >0x00003B byte 0x18 (window settings)
14173
+ >0x00003B byte 0x19 (window settings)
14174
+ >0x00003B byte 0x1A (window settings)
14175
+ >0x00003B byte 0x1B (zoom)
14176
+ >0x00003B byte 0x1D (backup)
14177
+ >0x00003B byte 0x1E (unknown)
14178
+ >0x00003B byte 0x2A (equation)
14179
+ >0x000032 string ZS4 - ZShell Version 4 File.
14180
+ >0x000032 string ZS3 - ZShell Version 3 File.
14181
+ #
14182
+ # Magic Numbers for the TI-86
14183
+ #
14184
+ 0 string **TI86** TI-86 Graphing Calculator
14185
+ >0x00003B byte 0x00 (real number)
14186
+ >0x00003B byte 0x01 (complex number)
14187
+ >0x00003B byte 0x02 (real vector)
14188
+ >0x00003B byte 0x03 (complex vector)
14189
+ >0x00003B byte 0x04 (real list)
14190
+ >0x00003B byte 0x05 (complex list)
14191
+ >0x00003B byte 0x06 (real matrix)
14192
+ >0x00003B byte 0x07 (complex matrix)
14193
+ >0x00003B byte 0x08 (real constant)
14194
+ >0x00003B byte 0x09 (complex constant)
14195
+ >0x00003B byte 0x0A (equation)
14196
+ >0x00003B byte 0x0C (string)
14197
+ >0x00003B byte 0x0D (function GDB)
14198
+ >0x00003B byte 0x0E (polar GDB)
14199
+ >0x00003B byte 0x0F (parametric GDB)
14200
+ >0x00003B byte 0x10 (diffeq GDB)
14201
+ >0x00003B byte 0x11 (picture)
14202
+ >0x00003B byte 0x12 (program)
14203
+ >0x00003B byte 0x13 (range)
14204
+ >0x00003B byte 0x17 (window settings)
14205
+ >0x00003B byte 0x18 (window settings)
14206
+ >0x00003B byte 0x19 (window settings)
14207
+ >0x00003B byte 0x1A (window settings)
14208
+ >0x00003B byte 0x1B (zoom)
14209
+ >0x00003B byte 0x1D (backup)
14210
+ >0x00003B byte 0x1E (unknown)
14211
+ >0x00003B byte 0x2A (equation)
14212
+ #
14213
+ # Magic Numbers for the TI-89
14214
+ #
14215
+ 0 string **TI89** TI-89 Graphing Calculator
14216
+ >0x000048 byte 0x00 (expression)
14217
+ >0x000048 byte 0x04 (list)
14218
+ >0x000048 byte 0x06 (matrix)
14219
+ >0x000048 byte 0x0A (data)
14220
+ >0x000048 byte 0x0B (text)
14221
+ >0x000048 byte 0x0C (string)
14222
+ >0x000048 byte 0x0D (graphic data base)
14223
+ >0x000048 byte 0x0E (figure)
14224
+ >0x000048 byte 0x10 (picture)
14225
+ >0x000048 byte 0x12 (program)
14226
+ >0x000048 byte 0x13 (function)
14227
+ >0x000048 byte 0x14 (macro)
14228
+ >0x000048 byte 0x1C (zipped)
14229
+ >0x000048 byte 0x21 (assembler)
14230
+ #
14231
+ # Magic Numbers for the TI-92
14232
+ #
14233
+ 0 string **TI92** TI-92 Graphing Calculator
14234
+ >0x000048 byte 0x00 (expression)
14235
+ >0x000048 byte 0x04 (list)
14236
+ >0x000048 byte 0x06 (matrix)
14237
+ >0x000048 byte 0x0A (data)
14238
+ >0x000048 byte 0x0B (text)
14239
+ >0x000048 byte 0x0C (string)
14240
+ >0x000048 byte 0x0D (graphic data base)
14241
+ >0x000048 byte 0x0E (figure)
14242
+ >0x000048 byte 0x10 (picture)
14243
+ >0x000048 byte 0x12 (program)
14244
+ >0x000048 byte 0x13 (function)
14245
+ >0x000048 byte 0x14 (macro)
14246
+ >0x000048 byte 0x1D (backup)
14247
+ #
14248
+ # Magic Numbers for the TI-92+/V200
14249
+ #
14250
+ 0 string **TI92P* TI-92+/V200 Graphing Calculator
14251
+ >0x000048 byte 0x00 (expression)
14252
+ >0x000048 byte 0x04 (list)
14253
+ >0x000048 byte 0x06 (matrix)
14254
+ >0x000048 byte 0x0A (data)
14255
+ >0x000048 byte 0x0B (text)
14256
+ >0x000048 byte 0x0C (string)
14257
+ >0x000048 byte 0x0D (graphic data base)
14258
+ >0x000048 byte 0x0E (figure)
14259
+ >0x000048 byte 0x10 (picture)
14260
+ >0x000048 byte 0x12 (program)
14261
+ >0x000048 byte 0x13 (function)
14262
+ >0x000048 byte 0x14 (macro)
14263
+ >0x000048 byte 0x1C (zipped)
14264
+ >0x000048 byte 0x21 (assembler)
14265
+ #
14266
+ # Magic Numbers for the TI-73/83+/89/92+/V200 FLASH upgrades
14267
+ #
14268
+ 0x0000016 string Advanced TI-XX Graphing Calculator (FLASH)
14269
+ 0 string **TIFL** TI-XX Graphing Calculator (FLASH)
14270
+ >8 byte >0 - Revision %d
14271
+ >>9 byte x \b.%d,
14272
+ >12 byte >0 Revision date %02x
14273
+ >>13 byte x \b/%02x
14274
+ >>14 beshort x \b/%04x,
14275
+ >17 string >/0 name: '%s',
14276
+ >48 byte 0x74 device: TI-73,
14277
+ >48 byte 0x73 device: TI-83+,
14278
+ >48 byte 0x98 device: TI-89,
14279
+ >48 byte 0x88 device: TI-92+,
14280
+ >49 byte 0x23 type: OS upgrade,
14281
+ >49 byte 0x24 type: application,
14282
+ >49 byte 0x25 type: certificate,
14283
+ >49 byte 0x3e type: license,
14284
+ >74 lelong >0 size: %ld bytes
14285
+
14286
+ # VTi & TiEmu skins (TI Graphing Calculators).
14287
+ # From: Romain Lievin (roms@lpg.ticalc.org).
14288
+ # Magic Numbers for the VTi skins
14289
+ 0 string VTI Virtual TI skin
14290
+ >3 string v - Version
14291
+ >>4 byte >0 \b %c
14292
+ >>6 byte x \b.%c
14293
+ # Magic Numbers for the TiEmu skins
14294
+ 0 string TiEmu TiEmu skin
14295
+ >6 string v - Version
14296
+ >>7 byte >0 \b %c
14297
+ >>9 byte x \b.%c
14298
+ >>10 byte x \b%c
14299
+
14300
+ #------------------------------------------------------------------------------
14301
+ # timezone: file(1) magic for timezone data
14302
+ #
14303
+ # from Daniel Quinlan (quinlan@yggdrasil.com)
14304
+ # this should work on Linux, SunOS, and maybe others
14305
+ # Added new official magic number for recent versions of the Olson code
14306
+ 0 string TZif timezone data
14307
+ >4 byte 0 \b, old version
14308
+ >4 byte >0 \b, version %c
14309
+ >20 belong 0 \b, no gmt time flags
14310
+ >20 belong 1 \b, 1 gmt time flag
14311
+ >20 belong >1 \b, %d gmt time flags
14312
+ >24 belong 0 \b, no std time flags
14313
+ >20 belong 1 \b, 1 std time flag
14314
+ >24 belong >1 \b, %d std time flags
14315
+ >28 belong 0 \b, no leap seconds
14316
+ >28 belong 1 \b, 1 leap second
14317
+ >28 belong >1 \b, %d leap seconds
14318
+ >32 belong 0 \b, no transition times
14319
+ >32 belong 1 \b, 1 transition time
14320
+ >32 belong >1 \b, %d transition times
14321
+ >36 belong 0 \b, no abbreviation chars
14322
+ >36 belong 1 \b, 1 abbreviation char
14323
+ >36 belong >1 \b, %d abbreviation chars
14324
+ 0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0 old timezone data
14325
+ 0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0 old timezone data
14326
+ 0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0 old timezone data
14327
+ 0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0 old timezone data
14328
+ 0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0 old timezone data
14329
+ 0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0 old timezone data
14330
+ #------------------------------------------------------------------------------
14331
+ # troff: file(1) magic for *roff
14332
+ #
14333
+ # updated by Daniel Quinlan (quinlan@yggdrasil.com)
14334
+
14335
+ # troff input
14336
+ 0 search/1 .\\" troff or preprocessor input text
14337
+ !:mime text/troff
14338
+ 0 search/1 '\\" troff or preprocessor input text
14339
+ !:mime text/troff
14340
+ 0 search/1 '.\\" troff or preprocessor input text
14341
+ !:mime text/troff
14342
+ 0 search/1 \\" troff or preprocessor input text
14343
+ !:mime text/troff
14344
+ 0 search/1 ''' troff or preprocessor input text
14345
+ !:mime text/troff
14346
+ 0 regex/20 \^\\.[A-Za-z0-9][A-Za-z0-9][\ \t] troff or preprocessor input text
14347
+ !:mime text/troff
14348
+ 0 regex/20 \^\\.[A-Za-z0-9][A-Za-z0-9]$ troff or preprocessor input text
14349
+ !:mime text/troff
14350
+
14351
+ # ditroff intermediate output text
14352
+ 0 search/1 x\ T ditroff output text
14353
+ >4 search/1 cat for the C/A/T phototypesetter
14354
+ >4 search/1 ps for PostScript
14355
+ >4 search/1 dvi for DVI
14356
+ >4 search/1 ascii for ASCII
14357
+ >4 search/1 lj4 for LaserJet 4
14358
+ >4 search/1 latin1 for ISO 8859-1 (Latin 1)
14359
+ >4 search/1 X75 for xditview at 75dpi
14360
+ >>7 search/1 -12 (12pt)
14361
+ >4 search/1 X100 for xditview at 100dpi
14362
+ >>8 search/1 -12 (12pt)
14363
+
14364
+ # output data formats
14365
+ 0 string \100\357 very old (C/A/T) troff output data
14366
+ #
14367
+ #------------------------------------------------------------------------------
14368
+ # tuxedo: file(1) magic for BEA TUXEDO data files
14369
+ #
14370
+ # from Ian Springer <ispringer@hotmail.com>
14371
+ #
14372
+ 0 string \0\0\1\236\0\0\0\0\0\0\0\0\0\0\0\0 BEA TUXEDO DES mask data
14373
+
14374
+ #------------------------------------------------------------------------------
14375
+ # typeset: file(1) magic for other typesetting
14376
+ #
14377
+ 0 string Interpress/Xerox Xerox InterPress data
14378
+ >16 string / (version
14379
+ >>17 string >\0 %s)
14380
+ #---------------------------------------------------------------------------
14381
+ # Unicode: BOM prefixed text files - Adrian Havill <havill@turbolinux.co.jp>
14382
+ # GRR: These types should be recognised in file_ascmagic so these
14383
+ # encodings can be treated by text patterns.
14384
+ # Missing types are already dealt with internally.
14385
+ #
14386
+ 0 string +/v8 Unicode text, UTF-7
14387
+ 0 string +/v9 Unicode text, UTF-7
14388
+ 0 string +/v+ Unicode text, UTF-7
14389
+ 0 string +/v/ Unicode text, UTF-7
14390
+ 0 string \335\163\146\163 Unicode text, UTF-8-EBCDIC
14391
+ 0 string \000\000\376\377 Unicode text, UTF-32, big-endian
14392
+ 0 string \377\376\000\000 Unicode text, UTF-32, little-endian
14393
+ 0 string \016\376\377 Unicode text, SCSU (Standard Compression Scheme for Unicode)
14394
+
14395
+ #------------------------------------------------------------------------------
14396
+ # unknown: file(1) magic for unknown machines
14397
+ #
14398
+ # XXX - this probably should be pruned, as it'll match PDP-11 and
14399
+ # VAX image formats.
14400
+ #
14401
+ # 0x107 is 0407; 0x108 is 0410; both are PDP-11 (executable and pure,
14402
+ # respectively).
14403
+ #
14404
+ # 0x109 is 0411; that's PDP-11 split I&D, but the PDP-11 version doesn't
14405
+ # have the "version %ld", which may be a bogus COFFism (I don't think
14406
+ # there ever was COFF for the PDP-11).
14407
+ #
14408
+ # 0x10B is 0413; that's VAX demand-paged, but this is a short, not a
14409
+ # long, as it would be on a VAX.
14410
+ #
14411
+ # 0x10C is 0414 and 0x10E is 416; those *are* unknown.
14412
+ #
14413
+ 0 short 0x107 unknown machine executable
14414
+ >8 short >0 not stripped
14415
+ >15 byte >0 - version %ld
14416
+ 0 short 0x108 unknown pure executable
14417
+ >8 short >0 not stripped
14418
+ >15 byte >0 - version %ld
14419
+ 0 short 0x109 PDP-11 separate I&D
14420
+ >8 short >0 not stripped
14421
+ >15 byte >0 - version %ld
14422
+ 0 short 0x10b unknown pure executable
14423
+ >8 short >0 not stripped
14424
+ >15 byte >0 - version %ld
14425
+ 0 long 0x10c unknown demand paged pure executable
14426
+ >16 long >0 not stripped
14427
+ 0 long 0x10e unknown readable demand paged pure executable
14428
+ #------------------------------------------------------------------------------
14429
+ # uuencode: file(1) magic for ASCII-encoded files
14430
+ #
14431
+
14432
+ # GRR: the first line of xxencoded files is identical to that in uuencoded
14433
+ # files, but the first character in most subsequent lines is 'h' instead of
14434
+ # 'M'. (xxencoding uses lowercase letters in place of most of uuencode's
14435
+ # punctuation and survives BITNET gateways better.) If regular expressions
14436
+ # were supported, this entry could possibly be split into two with
14437
+ # "begin\040\.\*\012M" or "begin\040\.\*\012h" (where \. and \* are REs).
14438
+ 0 search/1 begin\ uuencoded or xxencoded text
14439
+
14440
+ # btoa(1) is an alternative to uuencode that requires less space.
14441
+ 0 search/1 xbtoa\ Begin btoa'd text
14442
+
14443
+ # ship(1) is another, much cooler alternative to uuencode.
14444
+ # Greg Roelofs, newt@uchicago.edu
14445
+ 0 search/1 $\012ship ship'd binary text
14446
+
14447
+ # bencode(8) is used to encode compressed news batches (Bnews/Cnews only?)
14448
+ # Greg Roelofs, newt@uchicago.edu
14449
+ 0 search/1 Decode\ the\ following\ with\ bdeco bencoded News text
14450
+
14451
+ # BinHex is the Macintosh ASCII-encoded file format (see also "apple")
14452
+ # Daniel Quinlan, quinlan@yggdrasil.com
14453
+ 11 search/1 must\ be\ converted\ with\ BinHex BinHex binary text
14454
+ >41 search/1 x \b, version %.3s
14455
+
14456
+ # GRR: handle BASE64
14457
+
14458
+ #------------------------------------------------------------------------------
14459
+ # varied.out: file(1) magic for various USG systems
14460
+ #
14461
+ # Herewith many of the object file formats used by USG systems.
14462
+ # Most have been moved to files for a particular processor,
14463
+ # and deleted if they duplicate other entries.
14464
+ #
14465
+ 0 short 0610 Perkin-Elmer executable
14466
+ # AMD 29K
14467
+ 0 beshort 0572 amd 29k coff noprebar executable
14468
+ 0 beshort 01572 amd 29k coff prebar executable
14469
+ 0 beshort 0160007 amd 29k coff archive
14470
+ # Cray
14471
+ 6 beshort 0407 unicos (cray) executable
14472
+ # Ultrix 4.3
14473
+ 596 string \130\337\377\377 Ultrix core file
14474
+ >600 string >\0 from '%s'
14475
+ # BeOS and MAcOS PEF executables
14476
+ # From: hplus@zilker.net (Jon Watte)
14477
+ 0 string Joy!peffpwpc header for PowerPC PEF executable
14478
+ #
14479
+ # ava assembler/linker Uros Platise <uros.platise@ijs.si>
14480
+ 0 string avaobj AVR assembler object code
14481
+ >7 string >\0 version '%s'
14482
+ # gnu gmon magic From: Eugen Dedu <dedu@ese-metz.fr>
14483
+ 0 string gmon GNU prof performance data
14484
+ >4 long x - version %ld
14485
+ # From: Dave Pearson <davep@davep.org>
14486
+ # Harbour <URL:http://www.harbour-project.org/> HRB files.
14487
+ 0 string \xc0HRB Harbour HRB file
14488
+ >4 short x version %d
14489
+
14490
+ # From: Alex Beregszaszi <alex@fsn.hu>
14491
+ # 0 string exec BugOS executable
14492
+ # 0 string pack BugOS archive
14493
+
14494
+ # From: Jason Spence <jspence@lightconsulting.com>
14495
+ # Generated by the "examples" in STM's ST40 devkit, and derived code.
14496
+ 0 lelong 0x13a9f17e ST40 component image format
14497
+ >4 string >\0 \b, name '%s'
14498
+
14499
+ #------------------------------------------------------------------------------
14500
+ # varied.script: file(1) magic for various interpreter scripts
14501
+
14502
+ 0 string #!\ / a
14503
+ >3 string >\0 %s script text executable
14504
+ 0 string #!\t/ a
14505
+ >3 string >\0 %s script text executable
14506
+ 0 string #!/ a
14507
+ >2 string >\0 %s script text executable
14508
+ 0 string #!\ script text executable
14509
+ >3 string >\0 for %s
14510
+
14511
+ # From: arno <arenevier@fdn.fr>
14512
+ # mozilla xpconnect typelib
14513
+ # see http://www.mozilla.org/scriptable/typelib_file.html
14514
+ 0 string XPCOM\nTypeLib\r\n\032 XPConnect Typelib
14515
+ >0x10 byte x version %d
14516
+ >>0x11 byte x \b.%d
14517
+
14518
+ #------------------------------------------------------------------------------
14519
+ # vax: file(1) magic for VAX executable/object and APL workspace
14520
+ #
14521
+ 0 lelong 0101557 VAX single precision APL workspace
14522
+ 0 lelong 0101556 VAX double precision APL workspace
14523
+
14524
+ #
14525
+ # VAX a.out (32V, BSD)
14526
+ #
14527
+ 0 lelong 0407 VAX executable
14528
+ >16 lelong >0 not stripped
14529
+
14530
+ 0 lelong 0410 VAX pure executable
14531
+ >16 lelong >0 not stripped
14532
+
14533
+ 0 lelong 0413 VAX demand paged pure executable
14534
+ >16 lelong >0 not stripped
14535
+
14536
+ 0 lelong 0420 VAX demand paged (first page unmapped) pure executable
14537
+ >16 lelong >0 not stripped
14538
+
14539
+ #
14540
+ # VAX COFF
14541
+ #
14542
+ # The `versions' should be un-commented if they work for you.
14543
+ # (Was the problem just one of endianness?)
14544
+ #
14545
+ 0 leshort 0570 VAX COFF executable
14546
+ >12 lelong >0 not stripped
14547
+ >22 leshort >0 - version %ld
14548
+ 0 leshort 0575 VAX COFF pure executable
14549
+ >12 lelong >0 not stripped
14550
+ >22 leshort >0 - version %ld
14551
+
14552
+ #------------------------------------------------------------------------------
14553
+ # vicar: file(1) magic for VICAR files.
14554
+ #
14555
+ # From: Ossama Othman <othman@astrosun.tn.cornell.edu
14556
+ # VICAR is JPL's in-house spacecraft image processing program
14557
+ # VICAR image
14558
+ 0 string LBLSIZE= VICAR image data
14559
+ >32 string BYTE \b, 8 bits = VAX byte
14560
+ >32 string HALF \b, 16 bits = VAX word = Fortran INTEGER*2
14561
+ >32 string FULL \b, 32 bits = VAX longword = Fortran INTEGER*4
14562
+ >32 string REAL \b, 32 bits = VAX longword = Fortran REAL*4
14563
+ >32 string DOUB \b, 64 bits = VAX quadword = Fortran REAL*8
14564
+ >32 string COMPLEX \b, 64 bits = VAX quadword = Fortran COMPLEX*8
14565
+ # VICAR label file
14566
+ 43 string SFDU_LABEL VICAR label file
14567
+ #------------------------------------------------------------------------------
14568
+ # Virtutech Compressed Random Access File Format
14569
+ #
14570
+ # From <gustav@virtutech.com>
14571
+ 0 string \211\277\036\203 Virtutech CRAFF
14572
+ >4 belong x v%d
14573
+ >20 belong 0 uncompressed
14574
+ >20 belong 1 bzipp2ed
14575
+ >20 belong 2 gzipped
14576
+ >24 belong 0 not clean
14577
+
14578
+ #------------------------------------------------------------------------------
14579
+ # visx: file(1) magic for Visx format files
14580
+ #
14581
+ 0 short 0x5555 VISX image file
14582
+ >2 byte 0 (zero)
14583
+ >2 byte 1 (unsigned char)
14584
+ >2 byte 2 (short integer)
14585
+ >2 byte 3 (float 32)
14586
+ >2 byte 4 (float 64)
14587
+ >2 byte 5 (signed char)
14588
+ >2 byte 6 (bit-plane)
14589
+ >2 byte 7 (classes)
14590
+ >2 byte 8 (statistics)
14591
+ >2 byte 10 (ascii text)
14592
+ >2 byte 15 (image segments)
14593
+ >2 byte 100 (image set)
14594
+ >2 byte 101 (unsigned char vector)
14595
+ >2 byte 102 (short integer vector)
14596
+ >2 byte 103 (float 32 vector)
14597
+ >2 byte 104 (float 64 vector)
14598
+ >2 byte 105 (signed char vector)
14599
+ >2 byte 106 (bit plane vector)
14600
+ >2 byte 121 (feature vector)
14601
+ >2 byte 122 (feature vector library)
14602
+ >2 byte 124 (chain code)
14603
+ >2 byte 126 (bit vector)
14604
+ >2 byte 130 (graph)
14605
+ >2 byte 131 (adjacency graph)
14606
+ >2 byte 132 (adjacency graph library)
14607
+ >2 string .VISIX (ascii text)
14608
+
14609
+ #------------------------------------------------------------------------------
14610
+ # vms: file(1) magic for VMS executables (experimental)
14611
+ #
14612
+ # VMS .exe formats, both VAX and AXP (Greg Roelofs, newt@uchicago.edu)
14613
+
14614
+ # GRR 950122: I'm just guessing on these, based on inspection of the headers
14615
+ # of three executables each for Alpha and VAX architectures. The VAX files
14616
+ # all had headers similar to this:
14617
+ #
14618
+ # 00000 b0 00 30 00 44 00 60 00 00 00 00 00 30 32 30 35 ..0.D.`.....0205
14619
+ # 00010 01 01 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 ................
14620
+ #
14621
+ 0 string \xb0\0\x30\0 VMS VAX executable
14622
+ >44032 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
14623
+ #
14624
+ # The AXP files all looked like this, except that the byte at offset 0x22
14625
+ # was 06 in some of them and 07 in others:
14626
+ #
14627
+ # 00000 03 00 00 00 00 00 00 00 ec 02 00 00 10 01 00 00 ................
14628
+ # 00010 68 00 00 00 98 00 00 00 b8 00 00 00 00 00 00 00 h...............
14629
+ # 00020 00 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
14630
+ # 00030 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................
14631
+ # 00040 00 00 00 00 ff ff ff ff ff ff ff ff 02 00 00 00 ................
14632
+ #
14633
+ 0 belong 0x03000000 VMS Alpha executable
14634
+ >75264 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
14635
+
14636
+ # -----------------------------------------------------------
14637
+ # VMware specific files (deducted from version 1.1 and log file entries)
14638
+ # Anthon van der Neut (anthon@mnt.org)
14639
+ 0 belong 0x4d52564e VMware nvram
14640
+
14641
+ #------------------------------------------------------------------------------
14642
+ # vorbis: file(1) magic for Ogg/Vorbis files
14643
+ #
14644
+ # From Felix von Leitner <leitner@fefe.de>
14645
+ # Extended by Beni Cherniavsky <cben@crosswinds.net>
14646
+ # Further extended by Greg Wooledge <greg@wooledge.org>
14647
+ #
14648
+ # Most (everything but the number of channels and bitrate) is commented
14649
+ # out with `##' as it's not interesting to the average user. The most
14650
+ # probable things advanced users would want to uncomment are probably
14651
+ # the number of comments and the encoder version.
14652
+ #
14653
+ # FIXME: The first match has been made a search, so that it can skip
14654
+ # over prepended ID3 tags. This will work for MIME type detection, but
14655
+ # won't work for detecting other properties of the file (they all need
14656
+ # to be made relative to the search). In any case, if the file has ID3
14657
+ # tags, the ID3 information will be printed, not the Ogg information,
14658
+ # so until that's fixed, this doesn't matter.
14659
+ # FIXME[2]: Disable the above for now, since search assumes text mode.
14660
+ #
14661
+ # --- Ogg Framing ---
14662
+ #0 search/1000 OggS Ogg data
14663
+ 0 string OggS Ogg data
14664
+ !:mime application/ogg
14665
+ >4 byte !0 UNKNOWN REVISION %u
14666
+ ##>4 byte 0 revision 0
14667
+ >4 byte 0
14668
+ ##>>14 lelong x (Serial %lX)
14669
+ # non-Vorbis content: FLAC (Free Lossless Audio Codec, http://flac.sourceforge.net)
14670
+ >>28 string \x7fFLAC \b, FLAC audio
14671
+ # non-Vorbis content: Theora
14672
+ >>28 string \x80theora \b, Theora video
14673
+ # non-Vorbis content: Kate
14674
+ >>28 string \x80kate\0\0\0\0 \b, Kate
14675
+ >>>37 ubyte x v%u
14676
+ >>>38 ubyte x \b.%u,
14677
+ >>>40 byte 0 utf8 encoding,
14678
+ >>>40 byte !0 unknown character encoding,
14679
+ >>>60 string >\0 language %s,
14680
+ >>>60 string \0 no language set,
14681
+ >>>76 string >\0 category %s
14682
+ >>>76 string \0 no category set
14683
+ # non-Vorbis content: Skeleton
14684
+ >>28 string fishead\0 \b, Skeleton
14685
+ >>>36 short x v%u
14686
+ >>>40 short x \b.%u
14687
+ # non-Vorbis content: Speex
14688
+ >>28 string Speex\ \ \ \b, Speex audio
14689
+ # non-Vorbis content: OGM
14690
+ >>28 string \x01video\0\0\0 \b, OGM video
14691
+ >>>37 string/c div3 (DivX 3)
14692
+ >>>37 string/c divx (DivX 4)
14693
+ >>>37 string/c dx50 (DivX 5)
14694
+ >>>37 string/c xvid (XviD)
14695
+ # --- First vorbis packet - general header ---
14696
+ >>28 string \x01vorbis \b, Vorbis audio,
14697
+ >>>35 lelong !0 UNKNOWN VERSION %lu,
14698
+ ##>>>35 lelong 0 version 0,
14699
+ >>>35 lelong 0
14700
+ >>>>39 ubyte 1 mono,
14701
+ >>>>39 ubyte 2 stereo,
14702
+ >>>>39 ubyte >2 %u channels,
14703
+ >>>>40 lelong x %lu Hz
14704
+ # Minimal, nominal and maximal bitrates specified when encoding
14705
+ >>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff \b,
14706
+ # The above tests if at least one of these is specified:
14707
+ >>>>>52 lelong !-1
14708
+ # Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields
14709
+ # instead of -1.
14710
+ # Vorbis 1.0 uses 0 instead of -1.
14711
+ >>>>>>52 lelong !0
14712
+ >>>>>>>52 lelong !-1000
14713
+ >>>>>>>>52 lelong x <%lu
14714
+ >>>>>48 lelong !-1
14715
+ >>>>>>48 lelong x ~%lu
14716
+ >>>>>44 lelong !-1
14717
+ >>>>>>44 lelong !-1000
14718
+ >>>>>>>44 lelong !0
14719
+ >>>>>>>>44 lelong x >%lu
14720
+ >>>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff bps
14721
+ # -- Second vorbis header packet - the comments
14722
+ # A kludge to read the vendor string. It's a counted string, not a
14723
+ # zero-terminated one, so file(1) can't read it in a generic way.
14724
+ # libVorbis is the only one existing currently, so I detect specifically
14725
+ # it. The interesting value is the cvs date (8 digits decimal).
14726
+ # Post-RC1 Ogg files have the second header packet (and thus the version)
14727
+ # in a different place, so we must use an indirect offset.
14728
+ >>>(84.b+85) string \x03vorbis
14729
+ >>>>(84.b+96) string/c Xiphophorus\ libVorbis\ I \b, created by: Xiphophorus libVorbis I
14730
+ >>>>>(84.b+120) string >00000000
14731
+ # Map to beta version numbers:
14732
+ >>>>>>(84.b+120) string <20000508 (<beta1, prepublic)
14733
+ >>>>>>(84.b+120) string 20000508 (1.0 beta 1 or beta 2)
14734
+ >>>>>>(84.b+120) string >20000508
14735
+ >>>>>>>(84.b+120) string <20001031 (beta2-3)
14736
+ >>>>>>(84.b+120) string 20001031 (1.0 beta 3)
14737
+ >>>>>>(84.b+120) string >20001031
14738
+ >>>>>>>(84.b+120) string <20010225 (beta3-4)
14739
+ >>>>>>(84.b+120) string 20010225 (1.0 beta 4)
14740
+ >>>>>>(84.b+120) string >20010225
14741
+ >>>>>>>(84.b+120) string <20010615 (beta4-RC1)
14742
+ >>>>>>(84.b+120) string 20010615 (1.0 RC1)
14743
+ >>>>>>(84.b+120) string 20010813 (1.0 RC2)
14744
+ >>>>>>(84.b+120) string 20010816 (RC2 - Garf tuned v1)
14745
+ >>>>>>(84.b+120) string 20011014 (RC2 - Garf tuned v2)
14746
+ >>>>>>(84.b+120) string 20011217 (1.0 RC3)
14747
+ >>>>>>(84.b+120) string 20011231 (1.0 RC3)
14748
+ # Some pre-1.0 CVS snapshots still had "Xiphphorus"...
14749
+ >>>>>>(84.b+120) string >20011231 (pre-1.0 CVS)
14750
+ # For the 1.0 release, Xiphophorus is replaced by Xiph.Org
14751
+ >>>>(84.b+96) string/c Xiph.Org\ libVorbis\ I \b, created by: Xiph.Org libVorbis I
14752
+ >>>>>(84.b+117) string >00000000
14753
+ >>>>>>(84.b+117) string <20020717 (pre-1.0 CVS)
14754
+ >>>>>>(84.b+117) string 20020717 (1.0)
14755
+ >>>>>>(84.b+117) string 20030909 (1.0.1)
14756
+ >>>>>>(84.b+117) string 20040629 (1.1.0 RC1)
14757
+
14758
+ #------------------------------------------------------------------------------
14759
+ # VXL: file(1) magic for VXL binary IO data files
14760
+ #
14761
+ # from Ian Scott <scottim@sf.net>
14762
+ #
14763
+ # VXL is a collection of C++ libraries for Computer Vision.
14764
+ # See the vsl chapter in the VXL Book for more info
14765
+ # http://www.isbe.man.ac.uk/public_vxl_doc/books/vxl/book.html
14766
+ # http:/vxl.sf.net
14767
+
14768
+ 2 lelong 0x472b2c4e VXL data file,
14769
+ >0 leshort >0 schema version no %d
14770
+
14771
+ #------------------------------------------------------------------------------
14772
+ # warc: file(1) magic for WARC files
14773
+
14774
+ 0 string WARC/ WARC Archive
14775
+ >5 string x version %.4s
14776
+ #------------------------------------------------------------------------------
14777
+ # weak: file(1) magic for very weak magic entries, disabled by default
14778
+ #
14779
+ # These entries are so weak that they might interfere identification of
14780
+ # other formats. Example include:
14781
+ # - Only identify for 1 or 2 bytes
14782
+ # - Match against very wide range of values
14783
+ # - Match against generic word in some spoken languages (e.g. English)
14784
+
14785
+ # Summary: Computer Graphics Metafile
14786
+ # Extension: .cgm
14787
+ #0 beshort&0xffe0 0x0020 binary Computer Graphics Metafile
14788
+ #0 beshort 0x3020 character Computer Graphics Metafile
14789
+
14790
+ #0 string =!! Bennet Yee's "face" format
14791
+
14792
+ #------------------------------------------------------------------------------
14793
+ # windows: file(1) magic for Microsoft Windows
14794
+ #
14795
+ # This file is mainly reserved for files where programs
14796
+ # using them are run almost always on MS Windows 3.x or
14797
+ # above, or files only used exclusively in Windows OS,
14798
+ # where there is no better category to allocate for.
14799
+ # For example, even though WinZIP almost run on Windows
14800
+ # only, it is better to treat them as "archive" instead.
14801
+ # For format usable in DOS, such as generic executable
14802
+ # format, please specify under "msdos" file.
14803
+ #
14804
+
14805
+
14806
+ # Summary: Outlook Express DBX file
14807
+ # Extension: .dbx
14808
+ # Created by: Christophe Monniez
14809
+ 0 string \xCF\xAD\x12\xFE MS Outlook Express DBX file
14810
+ >4 byte =0xC5 \b, message database
14811
+ >4 byte =0xC6 \b, folder database
14812
+ >4 byte =0xC7 \b, account information
14813
+ >4 byte =0x30 \b, offline database
14814
+
14815
+
14816
+ # Summary: Windows crash dump
14817
+ # Extension: .dmp
14818
+ # Created by: Andreas Schuster (http://computer.forensikblog.de/)
14819
+ # Reference (1): http://computer.forensikblog.de/en/2008/02/64bit_magic.html
14820
+ # Modified by (1): Abel Cheung (Avoid match with first 4 bytes only)
14821
+ 0 string PAGE
14822
+ >4 string DUMP MS Windows 32bit crash dump
14823
+ >>0x05c byte 0 \b, no PAE
14824
+ >>0x05c byte 1 \b, PAE
14825
+ >>0xf88 lelong 1 \b, full dump
14826
+ >>0xf88 lelong 2 \b, kernel dump
14827
+ >>0xf88 lelong 3 \b, small dump
14828
+ >>0x068 lelong x \b, %ld pages
14829
+ >4 string DU64 MS Windows 64bit crash dump
14830
+ >>0xf98 lelong 1 \b, full dump
14831
+ >>0xf98 lelong 2 \b, kernel dump
14832
+ >>0xf98 lelong 3 \b, small dump
14833
+ >>0x090 lequad x \b, %lld pages
14834
+
14835
+
14836
+ # Summary: Vista Event Log
14837
+ # Extension: .evtx
14838
+ # Created by: Andreas Schuster (http://computer.forensikblog.de/)
14839
+ # Reference (1): http://computer.forensikblog.de/en/2007/05/some_magic.html
14840
+ 0 string ElfFile\0 MS Windows Vista Event Log
14841
+ >0x2a leshort x \b, %d chunks
14842
+ >>0x10 lelong x \b (no. %d in use)
14843
+ >0x18 lelong >1 \b, next record no. %d
14844
+ >0x18 lelong =1 \b, empty
14845
+ >0x78 lelong &1 \b, DIRTY
14846
+ >0x78 lelong &2 \b, FULL
14847
+
14848
+
14849
+ # Summary: Windows 3.1 group files
14850
+ # Extension: .grp
14851
+ # Created by: unknown
14852
+ 0 string \120\115\103\103 MS Windows 3.1 group files
14853
+
14854
+
14855
+ # Summary: Old format help files
14856
+ # Extension: .hlp
14857
+ # Created by: Dirk Jagdmann <doj@cubic.org>
14858
+ 0 lelong 0x00035f3f MS Windows 3.x help file
14859
+
14860
+
14861
+ # Summary: Hyper terminal
14862
+ # Extension: .ht
14863
+ # Created by: unknown
14864
+ 0 string HyperTerminal\
14865
+ >15 string 1.0\ --\ HyperTerminal\ data\ file MS Windows HyperTerminal profile
14866
+
14867
+
14868
+ # Summary: Windows shortcut
14869
+ # Extension: .lnk
14870
+ # Created by: unknown
14871
+ 0 string \114\0\0\0\001\024\002\0\0\0\0\0\300\0\0\0\0\0\0\106 MS Windows shortcut
14872
+
14873
+
14874
+ # Summary: Outlook Personal Folders
14875
+ # Created by: unknown
14876
+ 0 lelong 0x4E444221 Microsoft Outlook email folder
14877
+ >10 leshort 0x0e (<=2002)
14878
+ >10 leshort 0x17 (>=2003)
14879
+
14880
+
14881
+ # Summary: Windows help cache
14882
+ # Created by: unknown
14883
+ 0 string \164\146\115\122\012\000\000\000\001\000\000\000 MS Windows help cache
14884
+
14885
+
14886
+ # Summary: IE cache file
14887
+ # Created by: Christophe Monniez
14888
+ 0 string Client\ UrlCache\ MMF Internet Explorer cache file
14889
+ >20 string >\0 version %s
14890
+
14891
+
14892
+ # Summary: Registry files
14893
+ # Created by: unknown
14894
+ # Modified by (1): Joerg Jenderek
14895
+ 0 string regf MS Windows registry file, NT/2000 or above
14896
+ 0 string CREG MS Windows 95/98/ME registry file
14897
+ 0 string SHCC3 MS Windows 3.1 registry file
14898
+
14899
+
14900
+ # Summary: Windows Registry text
14901
+ # Extension: .reg
14902
+ # Submitted by: Abel Cheung <abelcheung@gmail.com>
14903
+ 0 string REGEDIT4\r\n\r\n Windows Registry text (Win95 or above)
14904
+ 0 string Windows\ Registry\ Editor\
14905
+ >&0 string Version\ 5.00\r\n\r\n Windows Registry text (Win2K or above)
14906
+
14907
+
14908
+ # From: Pal Tamas <folti@balabit.hu>
14909
+ # Autorun File
14910
+ 0 string/c [autorun]\r\n Microsoft Windows Autorun file.
14911
+ !:mime application/x-setupscript.
14912
+ #------------------------------------------------------------------------------
14913
+ # wireless-regdb: file(1) magic for CRDA wireless-regdb file format
14914
+ #
14915
+ 0 string RGDB CRDA wireless regulatory database file
14916
+ >4 belong 19 (Version 1)
14917
+ #------------------------------------------------------------------------------
14918
+ # wordprocessors: file(1) magic fo word processors.
14919
+ #
14920
+ ####### PWP file format used on Smith Corona Personal Word Processors:
14921
+ 2 string \040\040\040\040\040\040\040\040\040\040\040ML4D\040'92 Smith Corona PWP
14922
+ >24 byte 2 \b, single spaced
14923
+ >24 byte 3 \b, 1.5 spaced
14924
+ >24 byte 4 \b, double spaced
14925
+ >25 byte 0x42 \b, letter
14926
+ >25 byte 0x54 \b, legal
14927
+ >26 byte 0x46 \b, A4
14928
+
14929
+ #WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
14930
+ 0 string \377WPC\020\000\000\000\022\012\001\001\000\000\000\000 (WP) loadable file
14931
+ >15 byte 0 Optimized for Intel
14932
+ >15 byte 1 Optimized for Non-Intel
14933
+ 1 string WPC (Corel/WP)
14934
+ >8 short 257 WordPerfect macro
14935
+ >8 short 258 WordPerfect help file
14936
+ >8 short 259 WordPerfect keyboard file
14937
+ >8 short 266 WordPerfect document
14938
+ >8 short 267 WordPerfect dictionary
14939
+ >8 short 268 WordPerfect thesaurus
14940
+ >8 short 269 WordPerfect block
14941
+ >8 short 270 WordPerfect rectangular block
14942
+ >8 short 271 WordPerfect column block
14943
+ >8 short 272 WordPerfect printer data
14944
+ >8 short 275 WordPerfect printer data
14945
+ >8 short 276 WordPerfect driver resource data
14946
+ >8 short 279 WordPerfect hyphenation code
14947
+ >8 short 280 WordPerfect hyphenation data
14948
+ >8 short 281 WordPerfect macro resource data
14949
+ >8 short 283 WordPerfect hyphenation lex
14950
+ >8 short 285 WordPerfect wordlist
14951
+ >8 short 286 WordPerfect equation resource data
14952
+ >8 short 289 WordPerfect spell rules
14953
+ >8 short 290 WordPerfect dictionary rules
14954
+ >8 short 295 WordPerfect spell rules (Microlytics)
14955
+ >8 short 299 WordPerfect settings file
14956
+ >8 short 301 WordPerfect 4.2 document
14957
+ >8 short 325 WordPerfect dialog file
14958
+ >8 short 332 WordPerfect button bar
14959
+ >8 short 513 Shell macro
14960
+ >8 short 522 Shell definition
14961
+ >8 short 769 Notebook macro
14962
+ >8 short 770 Notebook help file
14963
+ >8 short 771 Notebook keyboard file
14964
+ >8 short 778 Notebook definition
14965
+ >8 short 1026 Calculator help file
14966
+ >8 short 1538 Calendar help file
14967
+ >8 short 1546 Calendar data file
14968
+ >8 short 1793 Editor macro
14969
+ >8 short 1794 Editor help file
14970
+ >8 short 1795 Editor keyboard file
14971
+ >8 short 1817 Editor macro resource file
14972
+ >8 short 2049 Macro editor macro
14973
+ >8 short 2050 Macro editor help file
14974
+ >8 short 2051 Macro editor keyboard file
14975
+ >8 short 2305 PlanPerfect macro
14976
+ >8 short 2306 PlanPerfect help file
14977
+ >8 short 2307 PlanPerfect keyboard file
14978
+ >8 short 2314 PlanPerfect worksheet
14979
+ >8 short 2319 PlanPerfect printer definition
14980
+ >8 short 2322 PlanPerfect graphic definition
14981
+ >8 short 2323 PlanPerfect data
14982
+ >8 short 2324 PlanPerfect temporary printer
14983
+ >8 short 2329 PlanPerfect macro resource data
14984
+ >8 byte 11 Mail
14985
+ >8 short 2818 help file
14986
+ >8 short 2821 distribution list
14987
+ >8 short 2826 out box
14988
+ >8 short 2827 in box
14989
+ >8 short 2836 users archived mailbox
14990
+ >8 short 2837 archived message database
14991
+ >8 short 2838 archived attachments
14992
+ >8 short 3083 Printer temporary file
14993
+ >8 short 3330 Scheduler help file
14994
+ >8 short 3338 Scheduler in file
14995
+ >8 short 3339 Scheduler out file
14996
+ >8 short 3594 GroupWise settings file
14997
+ >8 short 3601 GroupWise directory services
14998
+ >8 short 3627 GroupWise settings file
14999
+ >8 short 4362 Terminal resource data
15000
+ >8 short 4363 Terminal resource data
15001
+ >8 short 4395 Terminal resource data
15002
+ >8 short 4619 GUI loadable text
15003
+ >8 short 4620 graphics resource data
15004
+ >8 short 4621 printer settings file
15005
+ >8 short 4622 port definition file
15006
+ >8 short 4623 print queue parameters
15007
+ >8 short 4624 compressed file
15008
+ >8 short 5130 Network service msg file
15009
+ >8 short 5131 Network service msg file
15010
+ >8 short 5132 Async gateway login msg
15011
+ >8 short 5134 GroupWise message file
15012
+ >8 short 7956 GroupWise admin domain database
15013
+ >8 short 7957 GroupWise admin host database
15014
+ >8 short 7959 GroupWise admin remote host database
15015
+ >8 short 7960 GroupWise admin ADS deferment data file
15016
+ >8 short 8458 IntelliTAG (SGML) compiled DTD
15017
+ >8 long 18219264 WordPerfect graphic image (1.0)
15018
+ >8 long 18219520 WordPerfect graphic image (2.0)
15019
+ #end of WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
15020
+
15021
+ # Hangul (Korean) Word Processor File
15022
+ 0 string HWP\ Document\ File Hangul (Korean) Word Processor File 3.0
15023
+ # From: Won-Kyu Park <wkpark@kldp.org>
15024
+ 512 string R\0o\0o\0t\0 Hangul (Korean) Word Processor File 2000
15025
+ !:mime application/x-hwp
15026
+
15027
+ # CosmicBook, from Beno�t Rouits
15028
+ 0 string CSBK Ted Neslson's CosmicBook hypertext file
15029
+
15030
+ 2 string EYWR AmigaWriter file
15031
+
15032
+ # chi: file(1) magic for ChiWriter files
15033
+ 0 string \\1cw\ ChiWriter file
15034
+ >5 string >\0 version %s
15035
+ 0 string \\1cw ChiWriter file
15036
+
15037
+ # Quark Express from http://www.garykessler.net/library/file_sigs.html
15038
+ 2 string IIXPR3 Intel Quark Express Document (English)
15039
+ 2 string IIXPRa Intel Quark Express Document (Korean)
15040
+ 2 string MMXPR3 Motorola Quark Express Document (English)
15041
+ !:mime application/x-quark-xpress-3
15042
+ 2 string MMXPRa Motorola Quark Express Document (Korean)
15043
+
15044
+ # adobe indesign (document, whatever...) from querkan
15045
+ 0 belong 0x0606edf5 Adobe InDesign
15046
+ >16 string DOCUMENT Document
15047
+
15048
+ #------------------------------------------------------------------------------
15049
+ # ichitaro456: file(1) magic for Just System Word Processor Ichitaro
15050
+ #
15051
+ # Contributor kenzo-:
15052
+ # Reversed-engineered JS Ichitaro magic numbers
15053
+ #
15054
+
15055
+ 0 string DOC
15056
+ >43 byte 0x14 Just System Word Processor Ichitaro v4
15057
+ !:mime application/x-ichitaro4
15058
+ >144 string JDASH application/x-ichitaro4
15059
+
15060
+ 0 string DOC
15061
+ >43 byte 0x15 Just System Word Processor Ichitaro v5
15062
+ !:mime application/x-ichitaro5
15063
+
15064
+ 0 string DOC
15065
+ >43 byte 0x16 Just System Word Processor Ichitaro v6
15066
+ !:mime application/x-ichitaro6
15067
+
15068
+ # Type: Freemind mindmap documents
15069
+ # From: Jamie Thompson <debian-bugs@jamie-thompson.co.uk>
15070
+ 0 string/cB \<map\ version Freemind document
15071
+ !:mime application/x-freemind
15072
+
15073
+ # Type: Scribus
15074
+ # From: Werner Fink <werner@suse.de>
15075
+ 0 string \<SCRIBUSUTF8\ Version Scribus Document
15076
+ 0 string \<SCRIBUSUTF8NEW\ Version Scribus Document
15077
+ !:mime application/x-scribus
15078
+
15079
+ #------------------------------------------------------------------------------
15080
+ # file(1) magic(5) data for xdelta Josh MacDonald <jmacd@CS.Berkeley.EDU>
15081
+ #
15082
+ 0 string %XDELTA% XDelta binary patch file 0.14
15083
+ 0 string %XDZ000% XDelta binary patch file 0.18
15084
+ 0 string %XDZ001% XDelta binary patch file 0.20
15085
+ 0 string %XDZ002% XDelta binary patch file 1.0
15086
+ 0 string %XDZ003% XDelta binary patch file 1.0.4
15087
+ 0 string %XDZ004% XDelta binary patch file 1.1
15088
+
15089
+ #------------------------------------------------------------------------------
15090
+ # xenix: file(1) magic for Microsoft Xenix
15091
+ #
15092
+ # "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small
15093
+ # model" lifted from "magic.xenix", with comment "derived empirically;
15094
+ # treat as folklore until proven"
15095
+ #
15096
+ # "small model", "large model", "huge model" stuff lifted from XXX
15097
+ #
15098
+ # XXX - "x.out" collides with PDP-11 archives
15099
+ #
15100
+ 0 string core core file (Xenix)
15101
+ 0 byte 0x80 8086 relocatable (Microsoft)
15102
+ 0 leshort 0xff65 x.out
15103
+ >2 string __.SYMDEF randomized
15104
+ >0 byte x archive
15105
+ 0 leshort 0x206 Microsoft a.out
15106
+ >8 leshort 1 Middle model
15107
+ >0x1e leshort &0x10 overlay
15108
+ >0x1e leshort &0x2 separate
15109
+ >0x1e leshort &0x4 pure
15110
+ >0x1e leshort &0x800 segmented
15111
+ >0x1e leshort &0x400 standalone
15112
+ >0x1e leshort &0x8 fixed-stack
15113
+ >0x1c byte &0x80 byte-swapped
15114
+ >0x1c byte &0x40 word-swapped
15115
+ >0x10 lelong >0 not-stripped
15116
+ >0x1e leshort ^0xc000 pre-SysV
15117
+ >0x1e leshort &0x4000 V2.3
15118
+ >0x1e leshort &0x8000 V3.0
15119
+ >0x1c byte &0x4 86
15120
+ >0x1c byte &0xb 186
15121
+ >0x1c byte &0x9 286
15122
+ >0x1c byte &0xa 386
15123
+ >0x1f byte <0x040 small model
15124
+ >0x1f byte =0x048 large model
15125
+ >0x1f byte =0x049 huge model
15126
+ >0x1e leshort &0x1 executable
15127
+ >0x1e leshort ^0x1 object file
15128
+ >0x1e leshort &0x40 Large Text
15129
+ >0x1e leshort &0x20 Large Data
15130
+ >0x1e leshort &0x120 Huge Objects Enabled
15131
+ >0x10 lelong >0 not stripped
15132
+
15133
+ 0 leshort 0x140 old Microsoft 8086 x.out
15134
+ >0x3 byte &0x4 separate
15135
+ >0x3 byte &0x2 pure
15136
+ >0 byte &0x1 executable
15137
+ >0 byte ^0x1 relocatable
15138
+ >0x14 lelong >0 not stripped
15139
+
15140
+ 0 lelong 0x206 b.out
15141
+ >0x1e leshort &0x10 overlay
15142
+ >0x1e leshort &0x2 separate
15143
+ >0x1e leshort &0x4 pure
15144
+ >0x1e leshort &0x800 segmented
15145
+ >0x1e leshort &0x400 standalone
15146
+ >0x1e leshort &0x1 executable
15147
+ >0x1e leshort ^0x1 object file
15148
+ >0x1e leshort &0x4000 V2.3
15149
+ >0x1e leshort &0x8000 V3.0
15150
+ >0x1c byte &0x4 86
15151
+ >0x1c byte &0xb 186
15152
+ >0x1c byte &0x9 286
15153
+ >0x1c byte &0x29 286
15154
+ >0x1c byte &0xa 386
15155
+ >0x1e leshort &0x4 Large Text
15156
+ >0x1e leshort &0x2 Large Data
15157
+ >0x1e leshort &0x102 Huge Objects Enabled
15158
+
15159
+ 0 leshort 0x580 XENIX 8086 relocatable or 80286 small model
15160
+
15161
+ #------------------------------------------------------------------------------
15162
+ # This is Aaron's attempt at a MAGIC file for Xilinx .bit files.
15163
+ # Xilinx-Magic@RevRagnarok.com
15164
+ # Got the info from FPGA-FAQ 0026
15165
+ #
15166
+ # First there is the sync header and its length
15167
+ 0 beshort 0x0009
15168
+ >2 belong =0x0ff00ff0
15169
+ >>&0 belong =0x0ff00ff0
15170
+ >>>&0 beshort =0x0000
15171
+ >>>>&0 pstring a Xilinx BIT data
15172
+ # Next is a Pascal-style string with the NCD name. We want to capture that.
15173
+ >>>>0x0F pstring x - from %s
15174
+ # It is followed by a NUL
15175
+ >>>>>&1 byte 0x00
15176
+ # And then 'b'
15177
+ >>>>>&2 string b
15178
+ # With the part number:
15179
+ #>>>>>&5 string 4v (Virtex4)
15180
+ #>>>>>&5 string 2v (Virtex II
15181
+ #>>>>>>&0 string !p \b)
15182
+ #>>>>>>&0 string p Pro)
15183
+ >>>>>&4 pstring x - for %s
15184
+ # And then NUL / 'c' / Build Data / NUL / 'd' / Date / NUL / 'e' / Data Length
15185
+ >>>>>>&1 byte 0x00
15186
+ >>>>>>&2 string c
15187
+ >>>>>>&4 pstring x - built %s
15188
+ >>