[xiph-cvs] cvs commit: snatch waitppm.h libsnatch.c snatch.pl x11.c

Monty xiphmont at xiph.org
Sun Nov 4 20:27:16 PST 2001



xiphmont    01/11/04 20:27:16

  Modified:    .        libsnatch.c snatch.pl x11.c
  Added:       .        waitppm.h
  Log:
  Ongoing work.  We control the vertical, we control the horizontal.
  
  Monty

Revision  Changes    Path
1.3       +174 -36   snatch/libsnatch.c

Index: libsnatch.c
===================================================================
RCS file: /usr/local/cvsroot/snatch/libsnatch.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- libsnatch.c	2001/11/03 10:02:22	1.2
+++ libsnatch.c	2001/11/05 04:27:14	1.3
@@ -1,6 +1,18 @@
 /* top layer of subversion library to intercept RealPlayer socket and
    device I/O. --Monty 20011101 */
 
+/* We grab audio by watching for open() on the audio device, and then
+   capturing ioctl()s and read()s.  X is dealt with at two levels;
+   when we need to add our own X events, we do that through
+   RealPlayer's own Xlib state (to avoid opening another, or confusing
+   Xlib by adding/removing events from its stream.  This is another
+   way to get the infamous 'Xlib: Unexpected async reply' error, even
+   if things are properly locked).  Mostly we deal with X by
+   watching/effecting the wire level protocol over the X fd.  Watching
+   the raw X gives some extra flexibility (like capturing expose),
+   especially for potential future features (like not mapping the RP
+   windows at all, but RP being unaware of it). */
+
 #define _GNU_SOURCE
 #define _LARGEFILE_SOURCE
 #define _LARGEFILE64_SOURCE
@@ -10,6 +22,8 @@
 #include <unistd.h>
 #include <stdio.h>
 #include <sys/uio.h>
+#include <sys/stat.h>
+#include <fcntl.h>
 #include <string.h>
 #include <dlfcn.h>
 #include <sys/time.h>
@@ -54,11 +68,19 @@
 static int X_fd=-1;
 
 static pthread_t snatch_backchannel_thread;
+static pthread_t snatch_event_thread;
+
+static char *username=NULL;
+static char *password=NULL;
+static char *openfile=NULL;
+static char *location=NULL;
 
-static char username[256];
-static char password[256];
 static int snatch_active=1;
+static int fake_audiop=0;
+static int fake_videop=0;
 
+static void (*QueuedTask)(void);
+
 #include "x11.c" /* yeah, ugly, but I don't want to leak symbols. 
                     Oh and I'm lazy. */
 
@@ -104,35 +126,88 @@
 
   return(ret);
 }
+
+static pthread_cond_t event_cond=PTHREAD_COND_INITIALIZER;
+static pthread_mutex_t event_mutex=PTHREAD_MUTEX_INITIALIZER;
+
+void *event_thread(void *dummy){
+  if(debug)
+    fprintf(stderr,"    ...: Event thread %lx reporting for duty!\n",
+	    (unsigned long)pthread_self());
+
+  while(1){
+    pthread_cond_wait(&event_cond,&event_mutex);
+    if(QueuedTask){
+      (*QueuedTask)();
+      QueuedTask=NULL;
+    }else{
+      fprintf(stderr,
+	      "**ERROR: Internal fault! event thread awoke without an event\n"
+	      "         to process!\n");
+    }
+  }
+}
 
-void *backchannel_and_timer(void *dummy){
+void *backchannel_thread(void *dummy){
   if(debug)
     fprintf(stderr,"    ...: Backchannel thread %lx reporting for duty!\n",
             (unsigned long)pthread_self());
 
   while(1){
     char rq;
-    char buffer[256];
-    size_t bytes=fread(&rq,1,1,backchannel_fd);
+    size_t ret=fread(&rq,1,1,backchannel_fd);
+    short length;
+    char *buf=NULL;
     
-    if(bytes<=0){
+    if(ret<=0){
       fprintf(stderr,"**ERROR: Backchannel lost!  exit(1)ing...\n");
       exit(1);
     }
+    rpauth_already=0;
 
-    if(debug)
-      fprintf(stderr,"    ...: Backchannel request\n");
-
     switch(rq){
     case 'K':
-      bytes=fread(buffer,1,256,backchannel_fd);
-      FakeKeycode(buffer[0],buffer[1],buffer[2],rpplay_window);
+      {
+	unsigned char sym;
+	unsigned short mod;
+	ret=fread(&sym,1,1,backchannel_fd);
+	ret=fread(&mod,2,1,backchannel_fd);
+	if(ret==1)
+	  FakeKeySym(sym,mod,rpplay_window);
+      }
       break;
     case 'U':
-      fread(username,1,256,backchannel_fd);
-      break;
     case 'P':
-      fread(password,1,256,backchannel_fd);
+    case 'L':
+    case 'O':
+      ret=fread(&length,2,1,backchannel_fd);
+      if(ret==1){
+	if(length)buf=calloc(length+1,1);
+	if(length)ret=fread(buf,1,length,backchannel_fd);
+	if(length && ret==length)
+	  switch(rq){
+	  case 'U':
+	    if(username)free(username);
+	    username=buf;
+	    break;
+	  case 'P':
+	    if(password)free(password);
+	    password=buf;
+	    break;
+	  case 'L':
+	    if(location)free(location);
+	    location=buf;
+	    break;
+	  case 'O':
+	    if(openfile)free(openfile);
+	    openfile=buf;
+	    break;
+	  }
+      }
+      break;
+    case 'T':
+      snatch_active=2;
+      FakeExposeRPPlay();
       break;
     case 'A':
       snatch_active=1;
@@ -142,11 +217,17 @@
       snatch_active=0;
       FakeExposeRPPlay();
       break;
+    case 's':
+      fake_audiop=1;
+      break;
     case 'S':
-      FakeKeycode(9,0,1,rpplay_window);
+      fake_audiop=0;
+      break;
+    case 'v':
+      fake_videop=1;
       break;
-    case 'G':
-      FakeKeycode(43,0,1,rpplay_window);
+    case 'V':
+      fake_videop=0;
       break;
     }
   }
@@ -203,6 +284,30 @@
                 "           set (%s)\n",audioname);
     }
 
+    if(getenv("SNATCH_AUDIO_FAKE")){
+      if(debug)
+	fprintf(stderr,
+		"----env: SNATCH_AUDIO_FAKE\n"
+		"           set.  Faking audio operations.\n");
+      fake_audiop=1;
+    }else
+      if(debug)
+	fprintf(stderr,
+		"----env: SNATCH_AUDIO_FAKE\n"
+		"           not set.\n");
+
+    if(getenv("SNATCH_VIDEO_FAKE")){
+      if(debug)
+	fprintf(stderr,
+		"----env: SNATCH_VIDEO_FAKE\n"
+		"           set.  Faking video operations.\n");
+      fake_videop=1;
+    }else
+      if(debug)
+	fprintf(stderr,
+		"----env: SNATCH_VIDEO_FAKE\n"
+		"           not set.\n");
+
     if(debug)
       fprintf(stderr,"    ...: Now watching for RealPlayer audio output.\n");
 
@@ -315,20 +420,26 @@
 
         if(debug)
           fprintf(stderr,
-		  "    ...: starting backchannel/fake event thread...\n");
+		  "    ...: starting backchannel/fake event threads...\n");
         
         if((ret=pthread_create(&snatch_backchannel_thread,NULL,
-		       backchannel_and_timer,NULL))){
+		       backchannel_thread,NULL))){
           fprintf(stderr,
                   "**ERROR: could not create backchannel worker thread.\n"
                   "         Error code returned: %d\n"
                   "         exit(1)ing...\n\n",ret);
           exit(1);
-	}else
-	  if(debug)
+	}else{
+	  pthread_mutex_lock(&event_mutex);
+	  if((ret=pthread_create(&snatch_event_thread,NULL,
+				 event_thread,NULL))){
             fprintf(stderr,
-		    "         ...done.\n");
-
+		    "**ERROR: could not create event worker thread.\n"
+		    "         Error code returned: %d\n"
+		    "         exit(1)ing...\n\n",ret);
+	    exit(1);
+	  }
+	}
       }else
         if(debug)
           fprintf(stderr,
@@ -349,19 +460,19 @@
 }
 
 /* The audio device is subverted through open() */
-int open(const char *pathname,int flags,mode_t mode){
+int open(const char *pathname,int flags,...){
+  va_list ap;
   int ret;
+  mode_t mode;
 
   initialize();
-  ret=(*libc_open)(pathname,flags,mode);
 
-  if(ret>-1){
-    /* open needs only watch for the audio device. */
-    if( (audioname[strlen(audioname)-1]=='*' &&
-	 !strncmp(pathname,audioname,strlen(audioname)-1)) ||
-	(audioname[strlen(audioname)-1]!='*' &&
-	 !strcmp(pathname,audioname))){
-      
+  /* open needs only watch for the audio device. */
+  if( (audioname[strlen(audioname)-1]=='*' &&
+       !strncmp(pathname,audioname,strlen(audioname)-1)) ||
+      (audioname[strlen(audioname)-1]!='*' &&
+       !strcmp(pathname,audioname))){
+
       /* a match! */
       if(audio_fd>-1){
         /* umm... an audio fd is already open.  report the problem and
@@ -373,6 +484,13 @@
                 "         This behavior is unexpected; ignoring this open()\n"
                 "         request.\n",pathname);
       }else{
+
+	/* are we faking the audio? */
+	if(fake_audiop)
+	  ret=(*libc_open)("/dev/null",O_RDWR,mode);
+	else
+	  ret=(*libc_open)(pathname,flags,mode);
+	
         audio_fd=ret;
         audio_channels=-1;
         audio_rate=-1;
@@ -382,9 +500,20 @@
                   "    ...: Caught RealPlayer opening audio device "
                   "%s (fd %d).\n",
                   pathname,ret);
+	if(debug && fake_audiop)
+	  fprintf(stderr,
+		  "    ...: Faking the audio open and writes as requested.\n");
       }
-    }
+      return(ret);
+  }
+
+  if(flags|O_CREAT){
+    va_start(ap,flags);
+    mode=va_arg(ap,mode_t);
+    va_end(ap);
   }
+
+  ret=(*libc_open)(pathname,flags,mode);
   return(ret);
 }
 
@@ -512,7 +641,7 @@
 int ioctl(int fd,unsigned long int rq, ...){
   va_list optional;
   void *arg;
-  int ret;
+  int ret=0;
   initialize();
   
   va_start(optional,rq);
@@ -524,7 +653,8 @@
        rq==SNDCTL_DSP_CHANNELS ||
        rq==SNDCTL_DSP_SETFMT){
 
-      ret=(*libc_ioctl)(fd,rq,arg);
+      if(!fake_audiop)
+        ret=(*libc_ioctl)(fd,rq,arg);
       
       if(ret==0){
         switch(rq){
@@ -557,7 +687,6 @@
   return((*libc_ioctl)(fd,rq,arg));
 }
 
-
 Display *XOpenDisplay(const char *d){
   if(!XInitThreads()){
     fprintf(stderr,"**ERROR: Unable to set multithreading support in Xlib.\n"
@@ -565,4 +694,13 @@
     exit(1);
   }
   return(Xdisplay=(*xlib_xopen)(d));
+}
+
+static void queue_task(void (*f)(void)){
+  fprintf(stderr,"Queueing task...\n");
+  pthread_mutex_lock(&event_mutex);
+  QueuedTask=f;
+  pthread_cond_signal(&event_cond);
+  pthread_mutex_unlock(&event_mutex);
+  fprintf(stderr,"done...");
 }

1.3       +55 -2     snatch/snatch.pl

Index: snatch.pl
===================================================================
RCS file: /usr/local/cvsroot/snatch/snatch.pl,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- snatch.pl	2001/11/03 10:02:22	1.2
+++ snatch.pl	2001/11/05 04:27:14	1.3
@@ -10,15 +10,68 @@
 my $uaddr=sockaddr_un($backchannel_socket);
 my $proto=getprotobyname('tcp');
 
+my $username="e6dbvfc6";
+my $password="uwvdgjzy";
+my $openfile="/home/xiphmont/foo.ram";
+my $openloc="rtp://blah";
+
+my $playcode=join "",("Ks",pack ("S",4),"Kp",pack ("S",4));
+my $stopcode=join "",("Ks",pack ("S",4));
+my $exitcode=join "",("Kq",pack ("S",4));
+my $opencode=join "".("Ko",pack ("S",4));
+my $loccode=join "",("Kl",pack ("S",4));
+
 die $! unless socket(LISTEN_SOCK, PF_UNIX, SOCK_STREAM,0);
 unlink($backchannel_socket);
 die $! unless bind(LISTEN_SOCK,$uaddr);
 die $! unless listen(LISTEN_SOCK,SOMAXCONN);
 die $! unless accept(COMM_SOCK,LISTEN_SOCK);
 
-undef $/;
+send_string("P",$password);
+send_string("U",$username);
+send_string("O",$openfile);
+send_string("L",$openloc);
 
 while(1){
     $char=getc STDIN;
-    syswrite COMM_SOCK,$char,1;
+    if($char eq "P"){
+	syswrite COMM_SOCK,$playcode;
+    }
+    if($char eq "S"){
+	syswrite COMM_SOCK,$stopcode;
+    }
+    if($char eq "O"){
+	syswrite COMM_SOCK,$opencode;
+    }
+    if($char eq "L"){
+	syswrite COMM_SOCK,$loccode;
+    }
+    if($char eq "Q"){
+	syswrite COMM_SOCK,$exitcode;
+    }
+    if($char eq "A"){
+	syswrite COMM_SOCK,'A';
+    }
+    if($char eq "I"){
+	syswrite COMM_SOCK,'I';
+    }
+    if($char eq "T"){
+	syswrite COMM_SOCK,'T';
+    }
+}
+
+sub send_string{
+    my($op,$code)=@_;
+    syswrite COMM_SOCK,$op;
+    syswrite COMM_SOCK, (pack 'S', length $code);
+    syswrite COMM_SOCK, $code;
 }
+
+
+
+
+
+
+
+
+

1.3       +338 -142  snatch/x11.c

Index: x11.c
===================================================================
RCS file: /usr/local/cvsroot/snatch/x11.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- x11.c	2001/11/03 10:02:22	1.2
+++ x11.c	2001/11/05 04:27:14	1.3
@@ -6,6 +6,7 @@
 #include <sys/time.h>
 #include <X11/Xlib.h>
 #include "snatchppm.h"
+#include "waitppm.h"
 static int savefile=-1;
 
 static unsigned long window_id_base=0;
@@ -33,6 +34,17 @@
 static int video_length=-1;
 static int bigendian_p=0;
 
+static unsigned long rpauth_shell=0;
+static unsigned long rpauth_main=0;
+static unsigned long rpauth_password=0;
+static unsigned long rpauth_username=0;
+static unsigned long rpauth_okbutton=0;
+static unsigned long rpauth_cancel=0;
+static int rpauth_count=0;
+static int rpauth_already=0;
+
+static void queue_task(void (*f)(void));
+
 /* Built out of a few pieces of xscope by James Peterson, 1988 
    xscope is (c) Copyright MCC, 1988 */
 
@@ -54,6 +66,88 @@
   return(buf[0]);
 }
 
+static void FakeKeycode(int keycode, int modmask, unsigned long window){
+  XKeyEvent event;
+  memset(&event,0,sizeof(event));
+
+  event.display=Xdisplay;
+  event.type=2; /* key down */
+  event.keycode=keycode;
+  event.root=root_window;
+  event.window=window;
+  event.state=modmask;
+
+  XSendEvent(Xdisplay,(Window)window,0,0,(XEvent *)&event);
+
+  event.type=3; /* key up */
+
+  XSendEvent(Xdisplay,(Window)window,0,0,(XEvent *)&event);
+
+}
+
+static void FakeKeySym(int keysym, int modmask, unsigned long window){
+  KeyCode c=XKeysymToKeycode(Xdisplay,keysym);
+  
+  if(XKeycodeToKeysym(Xdisplay,c,0)==keysym){
+    FakeKeycode(c,modmask,window);
+  }else{
+    FakeKeycode(c,1|modmask,window);
+  }
+
+}
+
+void FakeButton1(unsigned long window){
+  XButtonEvent event;
+  XCrossingEvent enter;
+
+  memset(&enter,0,sizeof(enter));
+  enter.type=7;
+  enter.display=Xdisplay;
+  enter.window=window;
+  enter.root=root_window;
+  enter.mode=0;
+  enter.detail=3;
+  enter.same_screen=1;
+  XSendEvent(Xdisplay,(Window)window,0,0,(XEvent *)&enter);
+
+  memset(&event,0,sizeof(event));
+  event.display=Xdisplay;
+  event.type=4; /* button down */
+  event.button=1;
+  event.root=root_window;
+  event.window=window;
+  event.same_screen=1;
+
+  XSendEvent(Xdisplay,(Window)window,0,0,(XEvent *)&event);
+
+  event.type=5; /* button up */
+  event.state=0x100;
+
+  XSendEvent(Xdisplay,(Window)window,0,0,(XEvent *)&event);
+
+}
+
+void FakeExposeRPPlay(void){
+  XExposeEvent event;
+  memset(&event,0,sizeof(event));
+
+  event.display=Xdisplay;
+  event.type=12;
+  event.window=rpplay_window;
+  event.width=rpplay_width;
+  event.height=rpplay_height;
+
+  XSendEvent(Xdisplay,(Window)rpplay_window,0,0,(XEvent *)&event);
+}
+
+void FakeTypeString(unsigned char *buf,unsigned long window){
+  FakeButton1(window);
+  while(*buf){
+    FakeKeySym(*buf,0,window);
+    buf++;
+  }
+}
+
 static void SetUpReply(unsigned char *buf){
   if(IByte(&buf[0])){
     window_id_base=ILong(&buf[12]);
@@ -71,6 +165,38 @@
   }
 }
 
+static void UsernameAndPassword(void){
+
+  fprintf(stderr,"    ...: filling in username and password...");
+  if(username)
+    FakeTypeString(username,rpauth_username);
+  if(password)
+    FakeTypeString(password,rpauth_password);
+
+  FakeTypeString(" ",rpauth_okbutton); /* space activates the button.
+                                          Saves work parsing the
+                                          window tree to get an
+                                          absolute X,Y to make an
+                                          event */
+  rpauth_shell=0;
+  rpauth_main=0;
+  rpauth_password=0;
+  rpauth_username=0;
+  rpauth_okbutton=0;
+  rpauth_count=0;
+  
+}
+
+static void PolySegment(unsigned char *buf){
+  /* we assume the auth window is ready when we see the last polylines put
+     into the cancel window */
+  unsigned long id=ILong(&buf[4]);
+  if(id==rpauth_cancel){
+    rpauth_cancel=0;
+    queue_task(UsernameAndPassword);
+  }
+}
+
 static void CreateWindow(unsigned char *buf){
   unsigned long id=ILong(&buf[4]);
   unsigned long parent=ILong(&buf[8]);
@@ -79,6 +205,7 @@
     if(!root_window)
       root_window=parent;
 
+    /* Main player windows */
     if(parent==rpshell_window){
       rpmain_window=id;
       rpplay_window=0;
@@ -104,9 +231,47 @@
                   "    ...: RealPlayer video window id=%lx\n",rpvideo_window);
       }
     }
+    
+    /* Auth dialog windows */
+    if(parent==rpauth_shell){
+	rpauth_main=id;
+    }
+    if(parent==rpauth_main){
+      switch(rpauth_count++){
+      case 5:
+	rpauth_username=id;
+	fprintf(stderr,"    ...: username window: %lx\n",id);
+	break;
+      case 3:
+	rpauth_password=id;
+	fprintf(stderr,"    ...: password window: %lx\n",id);
+	break;
+      case 1:
+	rpauth_okbutton=id;
+	fprintf(stderr,"    ...: OK button: %lx\n",id);
+	break;
+      case 0:
+	rpauth_cancel=id;
+	fprintf(stderr,"    ...: cancel button: %lx\n",id);
+	break;
+      }
+    }
   }
 }
 
+/*
+  13.49: Client -->   16 bytes
+         ............REQUEST: ChangeWindowAttributes
+             sequence number: 00000c7f
+              request length: 0004
+                      window: WIN 012000ce
+                  value-mask: event-mask
+                  value-list:
+                          event-mask: KeyPress | ButtonPress | ButtonRelease |                                       EnterWindow | LeaveWindow | 
+			              ButtonMotion | Exposure | FocusChange
+
+*/
+
 static void ConfigureWindow(unsigned char *buf){
   unsigned long id=ILong(&buf[4]);
 
@@ -144,54 +309,78 @@
   long format=ILong(&buf[16]);
   char *data;
 
+  if(property!=67 || type!=31)return;  /* not interested if not
+                                          WM_CLASS and STRING */
+  n = ILong(&buf[20])*format/8;
+  data=&buf[24];
+  
+  /* look for the RealPlayer shell window; the other player windows
+     descend from it in a predicatble pattern */
+  
   if(rpshell_window==0){
-    if(property==67 && type==31){ /* WM_CLASS and STRING */
-      n = ILong(&buf[20])*format/8;
-      data=&buf[24];
+    if(debug)
+      fprintf(stderr,
+	      "    ...: looking for our shell window...\n"
+	      "           candidate: id=%lx, name=%s class=%s\n",
+	      id,(data?data:""),(data?strchr(data,'\0')+1:""));
+    
+    if(n>26 &&  !memcmp(data,"RealPlayer\0RCACoreAppShell\0",27)){
+      /* it's our shell window above the WM parent */
+      rpshell_window=id;
+      
+      /* re-setup */
+      rpmain_window=0;
+      rpmenu_window=0;
+      rpplay_window=0;
+      rpplay_width=0;
+      rpplay_height=0;
+      
+      logo_x=0;
+      logo_y=0;
+      logo_prev=-1;
+      
+      rpvideo_window=0;
+      video_width=-1;
+      video_length=-1;
       
       if(debug)
-	fprintf(stderr,
-		"    ...: looking for our shell window...\n"
-		"           candidate: id=%lx, name=%s class=%s\n",
-		id,(data?data:""),(data?strchr(data,'\0')+1:""));
-				   
-      if(n>26 &&  !memcmp(data,"RealPlayer\0RCACoreAppShell\0",27)){
-	/* it's our shell window above the WM parent */
-	rpshell_window=id;
-
-	/* re-setup */
-	rpmain_window=0;
-	rpmenu_window=0;
-	rpplay_window=0;
-	rpplay_width=0;
-	rpplay_height=0;
-	
-	logo_x=0;
-	logo_y=0;
-	logo_prev=-1;
-	
-	rpvideo_window=0;
-	video_width=-1;
-	video_length=-1;
+	fprintf(stderr,"           GOT IT!\n");
+    }else{
+      if(debug)
+	fprintf(stderr,"           nope...\n");
+    }
+  }
 
-	if(debug)
-	  fprintf(stderr,"           GOT IT!\n");
-      }else{
-	if(debug)
-	  fprintf(stderr,"           nope...\n");
-      }
+  /* watch for the auth password window */
+  if(n>32 &&  !memcmp(data,"AuthDialogShell\0RCACoreAppShell\0",32)){
+    if(rpauth_already>2){
+      fprintf(stderr,
+	      "**ERROR: Password not accepted.\n");
+      rpauth_shell=0;
+      rpauth_already=0;
+    }else{      
+      fprintf(stderr,
+	      "    ...: RealPlayer popped auth window.  Watching for username\n"
+	      "         password and ok button windows\n");
+      rpauth_shell=id;
+      rpauth_count=0;
+      rpauth_username=0;
+      rpauth_password=0;
+      rpauth_okbutton=0;
+      rpauth_already++;
     }
   }
+
+
 }
 
-static void PutImage(unsigned char *buf){
-  int id=ILong(&buf[4]);
-  
+static void PutImage(unsigned char *header,unsigned char *data){
+  int id=ILong(&header[4]);
   if(snatch_active && id==rpvideo_window){
-    int width=IShort(&buf[12])+IByte(&buf[20]);
-    int height=IShort(&buf[14]);
+    int width=IShort(&header[12])+IByte(&header[20]);
+    int height=IShort(&header[14]);
     int n = width*height*4,i,j;
-    char *work=alloca(n+1),*ptr=&buf[24],charbuf[80]; 
+    unsigned char *work=alloca(n+1),*ptr=data,charbuf[80]; 
     
     static long ZeroTime1 = -1;
     static long ZeroTime2 = -1;
@@ -236,14 +425,14 @@
      Although this might seem like a vanity issue, the primary reason
      for doing this is to give the user a clear indication Snatch is
      working properly, so some care should be taken to get it right. */
-
+  
   if(id==rpplay_window){
-    int width=IShort(&buf[12])+IByte(&buf[20]);
-    int height=IShort(&buf[14]);
-    int x=IShort(&buf[16]);
-    int y=IShort(&buf[18]);
+    int width=IShort(&header[12])+IByte(&header[20]);
+    int height=IShort(&header[14]);
+    int x=IShort(&header[16]);
+    int y=IShort(&header[18]);
 
-    char *ptr=&buf[24]; 
+    unsigned char *ptr=data;
     long i,j,k;
 
     if(x==0 && width==rpplay_width){
@@ -308,6 +497,13 @@
 
     /* blank background */
     if(snatch_active){
+      unsigned char *bptr;
+      
+      if(snatch_active==1)
+	bptr=snatchppm;
+      else
+	bptr=waitppm;
+
       if(bigendian_p){
         int lower=(play_blacklower==-1?y+height:play_blacklower);
         for(i=play_blackupper;i<lower;i++)
@@ -315,9 +511,9 @@
             for(j=play_blackleft;j<play_blackright;j++)
               if(j>=x && j<x+width){
                 ptr[(i-y)*width*4+(j-x)*4]=0x00;
-		ptr[(i-y)*width*4+(j-x)*4+1]=snatchppm[0];
-		ptr[(i-y)*width*4+(j-x)*4+2]=snatchppm[1];
-		ptr[(i-y)*width*4+(j-x)*4+3]=snatchppm[2];
+		ptr[(i-y)*width*4+(j-x)*4+1]=bptr[0];
+		ptr[(i-y)*width*4+(j-x)*4+2]=bptr[1];
+		ptr[(i-y)*width*4+(j-x)*4+3]=bptr[2];
               }
       }else{
         int lower=(play_blacklower==-1?y+height:play_blacklower);
@@ -326,17 +522,17 @@
             for(j=play_blackleft;j<play_blackright;j++)
               if(j>=x && j<x+width){
                 ptr[(i-y)*width*4+(j-x)*4+3]=0x00;
-		ptr[(i-y)*width*4+(j-x)*4+2]=snatchppm[0];
-		ptr[(i-y)*width*4+(j-x)*4+1]=snatchppm[1];
-		ptr[(i-y)*width*4+(j-x)*4]=snatchppm[2];
+		ptr[(i-y)*width*4+(j-x)*4+2]=bptr[0];
+		ptr[(i-y)*width*4+(j-x)*4+1]=bptr[1];
+		ptr[(i-y)*width*4+(j-x)*4]=bptr[2];
               }
       }
-      
+    
       /* paint logo */
       if(logo_y!=-1){
         for(i=0;i<snatchheight;i++){
           if(i+logo_y>=y && i+logo_y<height+y){
-	    char *snatch=snatchppm+snatchwidth*3*i;
+	    char *snatch;
             char *real;
             long end;
             
@@ -347,7 +543,7 @@
             if(j<0)j=0;
             
             real=ptr+width*4*(i+logo_y-y);
-	    snatch=snatchppm+snatchwidth*3*i;
+	    snatch=(snatch_active==1?snatchppm:waitppm)+snatchwidth*3*i;
             
             if(bigendian_p){
               for(k*=3;k<snatchwidth*3 && j<width*4;){
@@ -375,31 +571,47 @@
 /* Client-to-Server and Server-to-Client interception processing */
 /* Here are the most in-tact bits of xscope */
 struct ConnState {
-    unsigned char   *SavedBytes;
-    long    SizeofSavedBytes;
-    long    NumberofSavedBytes;
-    long    NumberofBytesNeeded;
-    long    (*ByteProcessing)();
+  unsigned char   *SavedBytes;
+  long    SizeofSavedBytes;
+  long    NumberofSavedBytes;
+  long    NumberofBytesNeeded;
+  long    (*ByteProcessing)();
+
+  /* a hack to optimize the video PutImage; this is the only case
+     where we actually care much about copies.  Most X requests are
+     either very infrequent or tiny.  PutImage, on the other hand, is
+     blasting several MB a second to do video.  So, this is ugly, but
+     needed. */
+  unsigned char PutImageHeader[24];
+  int PutImageUsed;
 };
  
 static struct ConnState serverCS;
 static struct ConnState clientCS;
 
-static void DecodeRequest(unsigned char *buf,long n){
-  int   Request = IByte (&buf[0]);
-  switch (Request){
-  case 1:
-    CreateWindow(buf);
-    break;
-  case 12:
-    ConfigureWindow(buf);
-    break;
-  case 18:
-    ChangeProperty(buf);
-    break;
-  case 72:
-    PutImage(buf);
-    break;
+static void DecodeRequest(unsigned char *pih,int pi,
+			  unsigned char *buf,long n){
+  if(pi){
+    PutImage(pih,buf);
+  }else{
+    int   Request = IByte (&buf[0]);
+    switch (Request){
+    case 1:
+      CreateWindow(buf);
+      break;
+    case 12:
+      ConfigureWindow(buf);
+      break;
+    case 18:
+      ChangeProperty(buf);
+      break;
+    case 66:
+      PolySegment(buf);
+      break;
+    case 72:
+      PutImage(buf,buf+24);
+      break;
+    }
   }
 }
 
@@ -410,6 +622,7 @@
   if(n){
     while(togo>0){
       int bw=(*libc_write)(X_fd,p,togo);
+
       if(bw<0 && (errno==EAGAIN || errno==EINTR))bw=0;
       if(bw>=0)
         p+=bw;
@@ -419,25 +632,55 @@
       togo-=bw;
     }
   }
+
   return(0);
 }
 
 static void SaveBytes(struct ConnState *cs,unsigned char *buf,long n){
 
-  /* check if there is enough space to hold the bytes we want */
-  if (cs->NumberofSavedBytes + n > cs->SizeofSavedBytes){
-    long    SizeofNewBytes = (cs->NumberofSavedBytes + n + 1);
-    if(cs->SavedBytes)
-      cs->SavedBytes = realloc(cs->SavedBytes,SizeofNewBytes);
-    else
-      cs->SavedBytes = malloc(SizeofNewBytes);
+  /* a hack to avoid huge copies in PutImage */
+  if(cs->NumberofSavedBytes==0 && 
+     n>=24 && 
+     cs->PutImageUsed==0 && 
+     IByte(&buf[0])==72){
+
+    unsigned long id=ILong(&buf[4]);
+    /* other putimage requests have side effects and we don't want to
+       write into Xlib maintained memory.  Besides, the only case we
+       really need to optimize is the video window (which we currently
+       don't alter) */
+    if(id==rpvideo_window){
+      memcpy(cs->PutImageHeader,buf,24);
+      cs->PutImageUsed=24;
+      n-=cs->PutImageUsed;
+    }
+  }
 
+  /* In fact,t he way Xlib flushes events, this will practically never
+     be needed, but is good to have around */
+  
+  /* check if there is enough space to hold the bytes we want */
+  if(n>0){
+    if (cs->NumberofSavedBytes + n > cs->SizeofSavedBytes){
+      long    SizeofNewBytes = (cs->NumberofSavedBytes + n + 1);
+      if(cs->SavedBytes)
+	cs->SavedBytes = realloc(cs->SavedBytes,SizeofNewBytes);
+      else
+	cs->SavedBytes = malloc(SizeofNewBytes);
+      
     cs->SizeofSavedBytes = SizeofNewBytes;
+    }
+    
+    /* now copy the new bytes onto the end of the old bytes */
+    memcpy(cs->SavedBytes + cs->NumberofSavedBytes,buf,n);
+    cs->NumberofSavedBytes += n;
   }
+}
 
-  /* now copy the new bytes onto the end of the old bytes */
-  memcpy(cs->SavedBytes + cs->NumberofSavedBytes,buf,n);
-  cs->NumberofSavedBytes += n;
+static long RemoveHeader(struct ConnState *cs){
+  long ret=cs->PutImageUsed;
+  cs->PutImageUsed=0;
+  return(ret);
 }
 
 static void RemoveSavedBytes(struct ConnState *cs,long n){
@@ -488,7 +731,7 @@
 }
 
 static long FinishRequest(struct ConnState *cs,unsigned char *buf,long n){
-  DecodeRequest(buf, n);
+  DecodeRequest(cs->PutImageHeader,cs->PutImageUsed,buf, n);
   cs->ByteProcessing = StartRequest;
   cs->NumberofBytesNeeded = 4;
   return(n);
@@ -540,9 +783,10 @@
   long             NumberofUsedBytes;
   
   while (cs->ByteProcessing && /* we turn off watching replies from
-				    the server after grabbing set up */
-	 
-	 cs->NumberofSavedBytes + n >= cs->NumberofBytesNeeded){
+				    the server after grabbing set up */	 
+	 cs->NumberofSavedBytes + n + cs->PutImageUsed >= 
+	 cs->NumberofBytesNeeded){
+
     if (cs->NumberofSavedBytes == 0){
       /* no saved bytes, so just process the first bytes in the
          read buffer */
@@ -567,14 +811,19 @@
     
     /* *After* we've processed the buffer (and possibly caused side
        effects), we ship the request off to the recipient */
-    if(w)(*w)(BytesToProcess,NumberofUsedBytes);
-    
+    if(w){
+      (*w)(cs->PutImageHeader,cs->PutImageUsed);
+      (*w)(BytesToProcess,NumberofUsedBytes-cs->PutImageUsed);
+    }
+
     /* the number of bytes that were actually used is normally (but not
        always) the number of bytes needed.  Discard the bytes that were
        actually used, not the bytes that were needed. The number of used
        bytes must be less than or equal to the number of needed bytes. */
     
     if (NumberofUsedBytes > 0){
+      n-=RemoveHeader(cs);
+
       if (cs->NumberofSavedBytes > 0)
         RemoveSavedBytes(cs, NumberofUsedBytes);
       else{
@@ -590,58 +839,5 @@
   if (cs->ByteProcessing && n > 0)
     SaveBytes(cs, buf, n);
   return;
-}
-
-static void FakeKeycode(int keycode, int shift, int ctrl, 
-		  unsigned long window){
-  XKeyEvent event;
-  memset(&event,0,sizeof(event));
-
-  event.display=Xdisplay;
-  event.type=2; /* key down */
-  event.keycode=keycode;
-  event.root=root_window;
-  event.window=window;
-  event.state=(shift?1:0)|(ctrl?4:0);
-
-  XSendEvent(Xdisplay,(Window)window,0,0,(XEvent *)&event);
-
-  event.type=3; /* key up */
-
-  XSendEvent(Xdisplay,(Window)window,0,0,(XEvent *)&event);
-
-}
-
-void FakeButton1(unsigned long window){
-
-  XButtonEvent event;
-  memset(&event,0,sizeof(event));
-
-  event.display=Xdisplay;
-  event.type=4; /* key down */
-  event.button=1;
-  event.root=root_window;
-  event.window=window;
-
-  XSendEvent(Xdisplay,(Window)window,0,0,(XEvent *)&event);
-
-  event.type=5; /* key up */
-  event.state=0x100;
-
-  XSendEvent(Xdisplay,(Window)window,0,0,(XEvent *)&event);
-
-}
-
-void FakeExposeRPPlay(void){
-  XExposeEvent event;
-  memset(&event,0,sizeof(event));
-
-  event.display=Xdisplay;
-  event.type=12;
-  event.window=rpplay_window;
-  event.width=rpplay_width;
-  event.height=rpplay_height;
-
-  XSendEvent(Xdisplay,(Window)rpplay_window,0,0,(XEvent *)&event);
 }
 

1.1                  snatch/waitppm.h

Index: waitppm.h
===================================================================
static unsigned char waitppm[]={
  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,  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,  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,  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,  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,
  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,  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,  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,  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,  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,
  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,  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,  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,  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,  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,
  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,  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,  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,  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,  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,
  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,  0,  0,  0,
  0,  0,  0,  0,  0,  0, 23,  7,  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,  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,  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,  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,  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,  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,  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,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,  0,  0, 24,  8,  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,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0, 28,  4,  0, 74, 40, 37, 82, 38, 35,
 84, 34, 33, 85, 36, 34, 84, 36, 35, 86, 37, 38, 84, 35, 36,
 85, 36, 34, 83, 35, 34, 85, 36, 37, 84, 35, 36, 85, 36, 34,
 84, 36, 35, 85, 36, 37, 84, 35, 36, 84, 36, 35, 84, 36, 35,
 84, 35, 36, 84, 35, 36, 85, 36, 34, 84, 36, 35, 85, 36, 37,
 84, 35, 36, 85, 36, 34, 84, 36, 35, 85, 36, 37, 84, 35, 36,
 85, 36, 34, 84, 36, 35, 85, 36, 37, 84, 35, 36, 85, 36, 34,
 84, 36, 35, 85, 36, 37, 84, 35, 36, 85, 36, 34, 84, 36, 35,
 85, 36, 37, 84, 35, 36, 84, 36, 35, 84, 36, 35, 84, 35, 36,
 84, 35, 36, 84, 36, 35, 84, 36, 35, 84, 35, 36, 84, 35, 36,
 84, 36, 35, 84, 36, 35, 84, 35, 36, 84, 35, 36, 84, 36, 35,
 84, 36, 35, 84, 35, 36, 84, 35, 36, 85, 36, 34, 84, 36, 35,
 85, 36, 37, 84, 35, 36, 85, 36, 34, 84, 36, 35, 85, 36, 37,
 84, 35, 36, 85, 36, 34, 84, 36, 35, 85, 36, 37, 84, 35, 36,
 85, 36, 34, 84, 36, 35, 85, 36, 37, 84, 35, 36, 85, 36, 34,
 84, 36, 35, 85, 36, 34, 84, 36, 35, 84, 34, 33, 85, 36, 34,
 85, 36, 34, 82, 38, 35, 75, 39, 34, 30,  4,  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, 28,  4,  0, 91, 35, 34,108, 31, 33,
 99, 10,  8,105,  4,  4,155, 56, 58,153, 54, 58,154, 53, 60,
153, 52, 59,155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,
155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,153, 54, 58,
153, 54, 58,153, 54, 58,153, 54, 58,155, 54, 59,153, 54, 58,
155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,155, 54, 59,
153, 54, 58,155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,
155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,155, 54, 59,
153, 54, 58,155, 54, 59,153, 54, 58,153, 54, 58,153, 54, 58,
153, 54, 58,153, 54, 58,153, 54, 58,153, 54, 58,153, 54, 58,
153, 54, 58,153, 54, 58,153, 54, 58,153, 54, 58,153, 54, 58,
153, 54, 58,153, 54, 58,153, 54, 58,153, 54, 58,155, 54, 59,
153, 54, 58,155, 54, 59,153, 54, 58,154, 53, 60,153, 52, 59,
155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,155, 54, 59,
153, 54, 58,155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,
155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,154, 53, 60,
155, 54, 59,106,  5,  5,101, 12,  8,109, 32, 33, 94, 36, 33,
 76, 39, 33, 24,  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0, 28,  4,  0, 84, 35, 36, 87,  8,  8,
158, 57, 59,164, 53, 56,165, 54, 57,157, 54, 58,155, 54, 59,
156, 53, 61,154, 53, 60,155, 54, 59,153, 54, 58,155, 54, 59,
153, 54, 58,155, 54, 59,153, 54, 58,153, 54, 58,153, 54, 58,
153, 54, 58,153, 54, 58,155, 54, 59,153, 54, 58,153, 54, 58,
153, 54, 58,153, 54, 58,153, 54, 58,155, 54, 59,153, 54, 58,
155, 54, 59,153, 54, 58,153, 54, 58,153, 54, 58,153, 54, 58,
153, 54, 58,155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,
155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,155, 54, 59,
153, 54, 58,155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,
155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,155, 54, 59,
153, 54, 58,155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,
155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,154, 53, 60,
153, 52, 59,155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,
155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,155, 54, 59,
153, 54, 58,155, 54, 59,153, 54, 58,155, 54, 59,153, 54, 58,
153, 52, 59,156, 53, 60,164, 53, 58,166, 53, 58,159, 54, 59,
 96,  5,  5, 99, 34, 32, 78, 40, 33,  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0, 28,  4,  0, 89, 35, 34, 87,  8,  8,
155, 46, 64,158, 43, 64,168, 71, 81, 84,  7,  9, 92, 37, 35,
 85, 36, 34, 85, 36, 37, 85, 36, 37, 85, 36, 34, 84, 36, 35,
 85, 36, 37, 84, 36, 35, 85, 36, 34, 84, 36, 35, 84, 36, 35,
 84, 35, 36, 84, 35, 36, 84, 35, 36, 85, 36, 37, 84, 35, 36,
 84, 36, 35, 84, 36, 35, 84, 35, 36, 84, 36, 35, 85, 36, 34,
 84, 36, 35, 85, 36, 34, 84, 35, 36, 84, 36, 35, 84, 36, 35,
 84, 35, 36, 84, 36, 35, 85, 36, 34, 84, 36, 35, 85, 36, 34,
 84, 35, 36, 85, 36, 37, 84, 35, 36, 85, 36, 37, 84, 35, 36,
 85, 36, 34, 84, 36, 35, 85, 36, 37, 84, 35, 36, 85, 36, 34,
 84, 36, 35, 85, 36, 37, 84, 35, 36, 85, 36, 34, 84, 36, 35,
 85, 36, 37, 84, 35, 36, 85, 36, 34, 84, 36, 35, 85, 36, 37,
 84, 35, 36, 85, 36, 34, 84, 36, 35, 85, 36, 37, 84, 35, 36,
 85, 36, 34, 84, 36, 35, 85, 36, 37, 84, 35, 36, 85, 36, 34,
 84, 36, 35, 85, 36, 37, 84, 35, 36, 85, 36, 34, 84, 36, 35,
 85, 36, 37, 84, 35, 36, 85, 36, 34, 84, 36, 35, 85, 36, 37,
 84, 35, 36, 84, 36, 35, 91, 34, 35,134, 53, 64,176, 69, 89,
166, 39, 63,169, 42, 60,102,  5,  7,104, 33, 31, 30,  2,  0,
  0,  0,  0,  0,  0,  0,  0,  0,  0, 74, 40, 37,108, 31, 33,
157, 54, 61,162, 39, 65,178, 65, 91, 99, 24, 35, 48,  2,  0,
 44,  1,  0, 42,  2,  0, 44,  1,  0, 46,  1,  0, 42,  0,  0,
 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  2,  0, 44,  2,  0,
 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0,
 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0,
 44,  2,  0, 44,  2,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0,
 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  2,  0, 44,  2,  0,
 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0,
 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0,
 44,  2,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0,
 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  2,  0, 44,  1,  0,
 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0,
 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0,
 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0,
 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0, 44,  1,  0,
 44,  1,  0, 42,  0,  0, 42,  3,  0, 42,  0,  0, 46,  0,  2,
101, 16, 38,201, 66,101,180, 33, 64,171, 50, 58, 94, 13,  9,
 76, 38, 35,  0,  0,  0,  0,  0,  0,  0,  0,  0, 82, 38, 35,
 97,  6,  6,167, 46, 58,182, 55, 85, 92,  0, 17, 40,  0,  1,
 33,  0,  1, 54,  2,  0, 68,  3,  0, 74,  3,  0, 78,  3,  0,
 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0,
 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0,
 78,  3,  0, 76,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0,
 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0,
 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0,
 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0,
 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0,
 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0,
 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0,
 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0, 76,  3,  0,
 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0,
 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0,
 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0, 78,  3,  0,
 78,  3,  0, 78,  3,  0, 74,  3,  0, 68,  3,  0, 54,  2,  0,
 33,  0,  1, 40,  0,  1,160, 31, 68,215, 64,100,175, 46, 58,
101,  6,  6, 82, 38, 35,  0,  0,  0,  0,  0,  0, 30, 10,  4,
 84, 36, 35,155, 54, 59,169, 42, 60,195, 70,102, 70,  0,  4,
 34,  0,  2, 36,  2,  0, 96, 10,  7,183, 64, 67,187, 62, 65,
189, 60, 63,190, 61, 64,190, 61, 64,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,191, 60, 63,191, 60, 63,191, 60, 63,
191, 60, 63,191, 60, 63,191, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
190, 61, 64,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,190, 61, 64,189, 60, 63,
189, 58, 64,189, 58, 64,189, 58, 64,189, 58, 64,190, 61, 64,
189, 60, 63,189, 60, 63,188, 59, 62,188, 59, 62,189, 60, 63,
189, 58, 64,189, 58, 64,190, 61, 64,189, 60, 63,189, 60, 63,
188, 59, 62,188, 59, 62,189, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,190, 61, 64,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
190, 61, 64,190, 61, 64,189, 60, 63,187, 62, 65,183, 64, 67,
 96, 10,  7, 36,  2,  0, 34,  0,  2,124,  5, 41,212, 61,104,
175, 40, 62,153, 54, 58, 85, 36, 34, 24,  7,  0,  0,  0,  0,
 30,  9,  4, 84, 35, 36,152, 51, 60,166, 39, 63,190, 65,106,
 70,  0,  6, 44,  2,  0, 80, 22, 15,198, 61, 61,230, 51, 60,
231, 52, 60,233, 52, 56,233, 52, 56,233, 52, 56,233, 52, 56,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
231, 50, 59,231, 50, 59,233, 50, 59,233, 48, 57,233, 48, 57,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 48, 57,233, 48, 57,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
232, 49, 58,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 52, 56,233, 52, 56,233, 52, 56,233, 52, 56,231, 52, 60,
230, 51, 60,198, 61, 61, 80, 22, 15, 44,  2,  0,120,  7, 39,
204, 63,103,186, 55, 82,150, 49, 61, 89, 34, 34, 28,  7,  0,
  0,  0,  0, 30,  9,  4, 84, 36, 35,150, 49, 63,180, 55, 84,
186, 63,106, 70,  0,  6, 48,  0,  1, 92, 20, 13,219, 58, 58,
254, 45, 55,254, 47, 52,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 47, 52,254, 45, 55,219, 58, 58, 92, 20, 13, 48,  0,  1,
117,  8, 39,201, 62,105,185, 54, 85,150, 47, 64, 92, 37, 35,
 69, 44, 34,  0,  0,  0, 30, 10,  4, 81, 35, 34,148, 47, 63,
179, 54, 86,186, 63,106, 70,  0,  6, 48,  0,  1, 92, 20, 13,
219, 58, 58,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,219, 58, 58, 92, 20, 13,
 48,  0,  1,115,  8, 41,201, 62,105,185, 54, 85,152, 47, 64,
 96, 34, 33, 73, 43, 34, 33, 12, 14, 30, 10,  4, 82, 36, 35,
146, 47, 63,178, 51, 87,186, 63,106, 68,  0,  7, 42,  0,  0,
 87, 20, 14,217, 58, 58,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,217, 58, 58,
 87, 20, 14, 42,  0,  0,115,  8, 41,201, 62,105,185, 54, 85,
152, 47, 64, 98, 34, 33, 75, 42, 32, 33, 12, 14, 30, 10,  4,
 82, 36, 35,146, 47, 63,178, 51, 87,186, 63,106, 64,  0,  9,
 32,  0,  3, 56,  2,  0,214, 55, 59,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
214, 55, 59, 56,  2,  0, 32,  0,  3,114,  7, 40,201, 62,105,
185, 54, 85,152, 47, 64, 98, 33, 35, 75, 42, 32, 33, 12, 14,
 30, 10,  4, 82, 36, 35,146, 47, 63,178, 53, 88,186, 63,106,
 62,  0, 10, 26,  0,  4, 48,  2,  0,212, 55, 59,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,212, 55, 59, 48,  2,  0, 26,  0,  4,115,  8, 41,
202, 63,102,185, 54, 85,152, 47, 64, 98, 33, 35, 75, 42, 32,
 33, 12, 14, 24,  7,  0, 84, 36, 35,146, 47, 63,178, 51, 87,
186, 63,106, 62,  0, 10, 26,  0,  6, 48,  2,  0,212, 55, 59,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,  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,  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,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,212, 55, 59, 48,  2,  0, 26,  0,  6,
114,  7, 40,202, 63,102,185, 54, 85,152, 47, 64, 98, 33, 35,
 75, 42, 32, 33, 12, 14, 24,  7,  0, 84, 36, 35,146, 47, 63,
178, 51, 87,186, 63,106, 62,  0, 10, 26,  0,  4, 48,  2,  0,
208, 55, 62,253, 48, 58,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
  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,  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,  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,253, 48, 58,208, 55, 62, 48,  2,  0,
 26,  0,  4,115,  8, 41,202, 63,102,185, 54, 85,152, 47, 64,
 98, 33, 35, 75, 42, 32, 33, 12, 14, 22,  7,  0, 82, 36, 35,
146, 47, 63,178, 51, 87,186, 63,106, 62,  0, 10, 26,  0,  4,
 48,  2,  0,206, 59, 63,247, 50, 55,253, 46, 56,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,  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,
  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,  0,  0,  0,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,253, 46, 56,247, 50, 55,206, 59, 63,
 48,  2,  0, 26,  0,  4,113,  8, 40,201, 62,105,183, 54, 84,
152, 47, 64, 98, 33, 35, 75, 42, 32,  0,  0,  0, 22,  7,  0,
 82, 36, 35,146, 47, 63,178, 51, 87,186, 63,106, 62,  0, 10,
 26,  0,  4, 46,  2,  0,171, 34, 34,242, 53, 58,251, 48, 58,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,
  0,  0,  0,  0,  0,  0,  0,  0,  0,172,114,141,172,114,141,
172,114,141,172,114,141,172,114,141,172,114,141,172,114,141,
172,114,141,172,114,141,172,114,141,172,114,141,172,114,141,
172,114,141,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,251, 48, 58,242, 53, 58,
171, 34, 34, 46,  2,  0, 26,  0,  4,115,  8, 41,201, 62,105,
183, 54, 84,152, 47, 64, 98, 33, 35, 75, 42, 32,  0,  0,  0,
 20,  7,  0, 80, 36, 35,146, 47, 63,178, 51, 87,186, 63,106,
 62,  0, 10, 26,  0,  4, 44,  0,  1,166, 43, 37,237, 56, 56,
249, 48, 53,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,172,114,141,
172,114,141,172,114,141,172,114,141,172,114,141,172,114,141,
172,114,141,172,114,141,172,114,141,172,114,141,172,114,141,
172,114,141,172,114,141,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,249, 48, 53,
237, 56, 56,166, 43, 37, 44,  0,  1, 26,  0,  4,113,  8, 40,
201, 62,105,183, 54, 84,152, 47, 64, 98, 33, 35, 75, 42, 32,
 33, 12, 14, 20,  7,  0, 80, 36, 35,146, 47, 63,178, 51, 87,
186, 63,106, 62,  0, 10, 26,  0,  4, 44,  0,  1,163, 42, 36,
235, 62, 58,247, 50, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
172,114,141,172,114,141,172,114,141,172,114,141,172,114,141,
172,114,141,172,114,141,172,114,141,172,114,141,172,114,141,
172,114,141,172,114,141,172,114,141,  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
247, 50, 55,235, 62, 58,163, 42, 36, 44,  0,  1, 26,  0,  4,
114,  7, 40,201, 62,105,185, 54, 85,152, 47, 64, 98, 33, 35,
 75, 42, 32, 33, 12, 14, 22,  7,  0, 82, 36, 35,146, 47, 63,
178, 51, 87,186, 63,106, 62,  0, 10, 26,  0,  4, 44,  0,  1,
163, 42, 36,233, 56, 56,247, 48, 53,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,169, 29, 36,
  0,  0,  0,180,133,117,172,114,141,172,114,141,172,114,141,
172,114,141,172,114,141,172,114,141,172,114,141,172,114,141,
172,114,141,172,114,141,172,114,141,180,133,117,  0,  0,  0,
169, 29, 36,  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,247, 48, 53,233, 56, 56,163, 42, 36, 44,  0,  1,
 26,  0,  4,115,  8, 41,201, 62,105,185, 54, 85,152, 47, 64,
 98, 33, 35, 75, 42, 32, 33, 12, 14, 22,  7,  0, 82, 36, 35,
146, 47, 63,178, 51, 87,186, 63,106, 62,  0,  8, 26,  0,  4,
 44,  0,  1,126,  5,  3,233, 56, 56,247, 48, 53,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,
254, 45, 55,  0,  0,  0,104, 91, 32,193,161, 80,186,146,100,
172,114,141,172,114,141,172,114,141,172,114,141,172,114,141,
172,114,141,172,114,141,186,146,100,193,161, 80,104, 91, 32,
  0,  0,  0,254, 45, 55,  0,  0,  0,  0,  0,  0,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,247, 48, 53,233, 56, 56,126,  5,  3,
 44,  0,  1, 26,  0,  4,115,  8, 41,202, 63,106,185, 54, 85,
152, 47, 64, 98, 33, 35, 75, 42, 32, 33, 12, 14, 22,  7,  0,
 82, 36, 35,146, 47, 63,178, 51, 87,186, 63,106, 62,  0,  8,
 26,  0,  4, 44,  0,  1,127,  7,  4,231, 54, 54,247, 48, 53,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,
  0,  0,  0,254, 45, 55,169, 29, 36,  0,  0,  0,200,176, 64,
200,176, 64,193,161, 80,186,146,100,172,114,141,172,114,141,
172,114,141,190,155, 88,200,176, 64,200,176, 64,200,176, 64,
  0,  0,  0,169, 29, 36,254, 45, 55,  0,  0,  0,  0,  0,  0,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,247, 48, 53,231, 54, 54,
127,  7,  4, 44,  0,  1, 26,  0,  4,115,  8, 41,201, 62,105,
185, 54, 85,152, 47, 64, 98, 33, 35, 75, 42, 34, 33, 12, 14,
 22,  7,  0, 82, 36, 35,146, 47, 63,178, 51, 87,186, 63,106,
 62,  0,  8, 26,  0,  4, 42,  0,  0,123,  6,  4,230, 55, 55,
246, 49, 59,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,  0,  0,  0,
133,117, 41,200,176, 64,200,176, 64,200,176, 64,200,176, 64,
190,155, 88,200,176, 64,200,176, 64,200,176, 64,200,176, 64,
133,117, 41,  0,  0,  0,254, 45, 55,254, 45, 55,  0,  0,  0,
  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,246, 49, 59,
230, 55, 55,123,  6,  4, 42,  0,  0, 26,  0,  4,115,  8, 41,
201, 62,105,185, 54, 85,152, 47, 64, 98, 33, 35, 75, 42, 34,
 33, 12, 14, 22,  7,  0, 82, 36, 35,146, 47, 63,178, 51, 87,
186, 63,106, 62,  0,  8, 24,  0,  3, 40,  0,  0,118,  7,  5,
223, 58, 58,244, 51, 56,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,
195, 33, 41,  0,  0,  0,200,176, 64,200,176, 64,200,176, 64,
200,176, 64,200,176, 64,200,176, 64,200,176, 64,200,176, 64,
200,176, 64,  0,  0,  0,195, 33, 41,254, 45, 55,254, 45, 55,
  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
244, 51, 56,223, 58, 58,118,  7,  5, 40,  0,  0, 24,  0,  3,
115,  8, 41,200, 61,104,185, 54, 85,152, 47, 64, 98, 33, 35,
 75, 42, 32, 33, 12, 14, 22,  7,  0, 82, 36, 35,146, 47, 63,
178, 51, 87,186, 63,106, 62,  0, 10, 24,  0,  5, 36,  1,  0,
123,  6,  4,217, 64, 60,242, 51, 56,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,254, 45, 55,
254, 45, 55,254, 45, 55, 78, 13, 17, 61, 54, 19,200,176, 64,
200,176, 64,200,176, 64,200,176, 64,200,176, 64,200,176, 64,
200,176, 64, 61, 54, 19, 78, 13, 17,254, 45, 55,254, 45, 55,
254, 45, 55,  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,242, 51, 56,217, 64, 60,123,  6,  4, 36,  1,  0,
 24,  0,  5,115,  8, 41,202, 63,102,185, 54, 85,152, 47, 64,
 98, 33, 35, 75, 42, 32, 33, 12, 14, 22,  7,  0, 82, 36, 35,
146, 47, 63,178, 51, 87,186, 63,106, 62,  0, 10, 24,  0,  5,
 34,  3,  0,114, 13, 11,214, 69, 61,240, 51, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55, 78, 13, 17,
 61, 54, 19,200,176, 64,200,176, 64,200,176, 64,200,176, 64,
200,176, 64, 61, 54, 19, 78, 13, 17,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,240, 51, 55,214, 69, 61,114, 13, 11,
 34,  3,  0, 24,  0,  5,115,  8, 41,202, 63,102,185, 54, 85,
152, 47, 62, 98, 33, 35, 75, 42, 32, 33, 12, 14, 22,  7,  0,
 82, 36, 35,146, 47, 63,178, 51, 87,186, 63,106, 62,  0, 10,
 24,  0,  5, 52,  6,  5, 78,  9, 12,208, 61, 65,238, 53, 58,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,
  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55, 78, 13, 17, 61, 54, 19,200,176, 64,200,176, 64,
200,176, 64, 61, 54, 19, 78, 13, 17,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,238, 53, 58,208, 61, 65,
 78,  9, 12, 52,  6,  5, 24,  0,  5,115,  8, 41,202, 63,102,
185, 54, 85,152, 47, 62, 98, 33, 35, 75, 42, 32, 33, 12, 14,
 22,  7,  0, 82, 36, 35,146, 47, 63,178, 51, 87,186, 63,106,
 62,  0, 10, 24,  0,  5, 32,  3,  0, 78,  9, 12,208, 61, 65,
233, 52, 56,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,104, 91, 32,
200,176, 64,104, 91, 32,  0,  0,  0,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,
  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,233, 52, 56,
208, 61, 65, 78,  9, 12, 32,  3,  0, 24,  0,  5,115,  8, 41,
202, 63,102,185, 54, 85,152, 47, 64, 98, 33, 35, 75, 42, 32,
 33, 12, 14, 22,  7,  0, 82, 36, 35,146, 47, 63,178, 51, 87,
186, 63,106, 62,  0, 10, 26,  0,  4, 30,  2,  1, 79, 10, 13,
208, 61, 65,233, 52, 56,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,132, 22, 28,
 61, 54, 19,200,176, 64, 61, 54, 19,132, 22, 28,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
233, 52, 56,208, 61, 65, 79, 10, 13, 30,  2,  1, 26,  0,  4,
115,  8, 41,201, 62,105,185, 54, 85,152, 47, 64, 98, 33, 35,
 75, 42, 32, 33, 12, 14, 22,  7,  0, 82, 36, 35,146, 47, 63,
178, 51, 87,186, 63,106, 62,  0, 10, 26,  0,  4, 29,  2,  0,
 74,  3,  0,192, 61, 61,233, 52, 56,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,  0,  0,  0,200,176, 64,  0,  0,  0,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,233, 52, 56,192, 61, 61, 74,  3,  0, 29,  2,  0,
 26,  0,  4,114,  7, 40,201, 62,105,185, 54, 85,152, 47, 64,
 98, 33, 35, 75, 42, 32, 33, 12, 14, 22,  7,  0, 82, 36, 35,
146, 47, 63,178, 51, 87,186, 63,106, 62,  0, 10, 26,  0,  4,
 27,  2,  0, 72,  3,  0,189, 60, 63,233, 52, 56,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,132, 22, 28, 53, 35, 43,200,176, 64, 54, 36, 43,
132, 22, 28,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,233, 52, 56,189, 60, 63, 72,  3,  0,
 27,  2,  0, 26,  0,  4,114,  7, 40,201, 62,105,185, 54, 85,
152, 47, 64, 98, 33, 35, 75, 42, 32, 33, 12, 14, 22,  7,  0,
 82, 36, 35,146, 47, 63,178, 51, 87,186, 63,106, 62,  0, 10,
 26,  0,  4, 27,  2,  0, 72,  3,  0,189, 60, 63,233, 50, 59,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,
  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,  0,  0,  0,114, 76, 94,200,176, 64,
115, 76, 94,  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,233, 50, 59,189, 60, 63,
 72,  3,  0, 27,  2,  0, 26,  0,  4,115,  8, 41,201, 62,105,
185, 54, 85,152, 47, 64, 98, 33, 35, 75, 42, 32, 33, 12, 14,
 22,  7,  0, 82, 36, 35,146, 47, 63,179, 52, 88,186, 63,106,
 62,  0, 10, 26,  0,  4, 25,  2,  2, 66,  3,  0,185, 64, 64,
231, 52, 60,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55, 78, 13, 17, 90, 60, 73,172,114,141,
200,176, 64,172,114,141, 91, 60, 73, 78, 13, 17,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,
  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,231, 52, 60,
185, 64, 64, 66,  3,  0, 25,  2,  2, 26,  0,  4,115,  8, 41,
202, 63,102,185, 54, 85,152, 47, 64, 98, 33, 35, 75, 42, 32,
 33, 12, 14, 22,  7,  0, 82, 36, 35,148, 47, 63,179, 52, 88,
186, 63,106, 62,  0, 10, 26,  0,  4, 22,  4,  1, 56,  0,  1,
145, 41, 38,228, 53, 57,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55, 78, 13, 17, 89, 59, 73,172,114,141,
172,114,141,200,176, 64,172,114,141,172,114,141, 89, 59, 73,
 78, 13, 17,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
228, 53, 57,145, 41, 38, 56,  0,  1, 22,  4,  1, 26,  0,  4,
115,  8, 41,202, 63,102,185, 54, 85,152, 47, 64, 98, 33, 35,
 75, 42, 32,  0,  0,  0, 22,  7,  0, 82, 36, 35,148, 47, 63,
179, 52, 88,186, 63,106, 62,  0, 10, 26,  0,  4, 20,  4,  1,
 50,  2,  0,140, 44, 39,226, 55, 59,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,254, 45, 55,
254, 45, 55,254, 45, 55, 78, 13, 17, 89, 59, 73,172,114,141,
172,114,141,172,114,141,200,176, 64,172,114,141,172,114,141,
172,114,141, 89, 59, 73, 78, 13, 17,254, 45, 55,254, 45, 55,
254, 45, 55,  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,226, 55, 59,140, 44, 39, 50,  2,  0, 20,  4,  1,
 26,  0,  4,114,  7, 40,202, 63,102,185, 54, 85,152, 47, 64,
 98, 33, 35, 75, 42, 32,  0,  0,  0, 22,  7,  0, 82, 36, 35,
146, 47, 63,179, 52, 88,186, 63,106, 62,  0, 10, 26,  0,  4,
 20,  4,  1, 50,  2,  0,141, 38, 41,224, 55, 59,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,
254, 45, 55,254, 45, 55,169, 29, 36,  0,  0,  0,172,114,141,
172,114,141,172,114,141,172,114,141,200,176, 64,172,114,141,
172,114,141,172,114,141,172,114,141,  0,  0,  0,169, 29, 36,
254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,224, 55, 59,141, 38, 41, 50,  2,  0,
 20,  4,  1, 26,  0,  4,115,  8, 41,202, 63,102,185, 54, 85,
152, 47, 64, 98, 33, 35, 75, 42, 32,  0,  0,  0, 22,  7,  0,
 82, 36, 35,146, 47, 63,178, 51, 87,186, 63,106, 62,  0, 10,
 26,  0,  4, 20,  4,  1, 50,  1,  0,140, 44, 39,224, 55, 59,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,
  0,  0,  0,254, 45, 55,254, 45, 55,  0,  0,  0,114, 76, 94,
172,114,141,172,114,141,172,114,141,172,114,141,200,176, 64,
172,114,141,172,114,141,172,114,141,172,114,141,114, 76, 94,
  0,  0,  0,254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,224, 55, 59,140, 44, 39,
 50,  1,  0, 20,  4,  1, 26,  0,  4,115,  8, 41,201, 62,105,
185, 54, 85,152, 47, 64, 98, 33, 35, 75, 42, 32,  0,  0,  0,
 22,  7,  0, 82, 36, 35,146, 47, 63,178, 51, 87,186, 63,106,
 62,  0, 10, 26,  0,  4, 20,  4,  1, 48,  1,  0,107, 12,  8,
224, 53, 57,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
  0,  0,  0,  0,  0,  0,254, 45, 55,132, 22, 28,  0,  0,  0,
172,114,141,172,114,141,172,114,141,172,114,141,186,146,100,
200,176, 64,180,133,117,172,114,141,172,114,141,172,114,141,
172,114,141,  0,  0,  0,132, 22, 28,254, 45, 55,  0,  0,  0,
  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,224, 53, 57,
107, 12,  8, 48,  1,  0, 20,  4,  1, 26,  0,  4,115,  8, 41,
201, 62,105,185, 54, 85,152, 47, 64, 98, 33, 35, 75, 42, 32,
  0,  0,  0, 22,  7,  0, 82, 36, 35,146, 47, 63,178, 51, 87,
186, 63,106, 62,  0, 10, 26,  0,  4, 20,  4,  1, 48,  0,  1,
105, 12,  8,226, 53, 57,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,  0,  0,  0,  0,  0,  0,254, 45, 55,  0,  0,  0,
114, 76, 94,172,114,141,172,114,141,180,133,117,186,146,100,
200,176, 64,200,176, 64,200,176, 64,186,146,100,172,114,141,
172,114,141,172,114,141,114, 76, 94,  0,  0,  0,254, 45, 55,
  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
226, 53, 57,105, 12,  8, 48,  0,  1, 20,  4,  1, 26,  0,  4,
115,  8, 41,201, 62,105,185, 54, 85,152, 47, 64, 98, 33, 35,
 75, 42, 32,  0,  0,  0, 22,  7,  0, 82, 36, 35,146, 47, 63,
178, 51, 87,186, 63,106, 62,  0, 10, 26,  0,  6, 20,  4,  1,
 48,  0,  1,105, 12,  8,227, 54, 58,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,169, 29, 36,
  0,  0,  0,172,114,141,172,114,141,186,146,100,200,176, 64,
200,176, 64,200,176, 64,200,176, 64,200,176, 64,200,176, 64,
190,155, 88,180,133,117,172,114,141,172,114,141,  0,  0,  0,
169, 29, 36,  0,  0,  0,  0,  0,  0,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,227, 54, 58,105, 12,  8, 48,  0,  1, 20,  4,  1,
 26,  0,  6,115,  8, 41,201, 62,105,185, 52, 86,152, 45, 63,
 98, 33, 35, 75, 42, 32,  0,  0,  0, 22,  7,  0, 82, 36, 35,
146, 47, 63,178, 51, 87,186, 63,106, 62,  0, 10, 26,  0,  6,
 20,  4,  1, 48,  1,  0,102, 11,  7,224, 55, 59,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0,180,133,117,190,155, 88,200,176, 64,
200,176, 64,200,176, 64,200,176, 64,200,176, 64,200,176, 64,
200,176, 64,200,176, 64,200,176, 64,190,155, 88,180,133,117,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,224, 55, 59,102, 11,  7, 48,  1,  0,
 20,  4,  1, 26,  0,  6,115,  8, 41,201, 62,105,185, 52, 86,
152, 45, 63, 98, 33, 35, 75, 42, 32, 33, 12, 14, 22,  7,  0,
 82, 36, 35,146, 47, 63,178, 51, 87,186, 63,106, 62,  0, 10,
 26,  0,  4, 18,  6,  1, 42,  5,  0,100,  7,  7,223, 54, 58,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,  0,  0,  0,
  0,  0,  0,  0,  0,  0,  0,  0,  0,190,155, 88,200,176, 64,
200,176, 64,200,176, 64,200,176, 64,200,176, 64,200,176, 64,
200,176, 64,200,176, 64,200,176, 64,200,176, 64,200,176, 64,
190,155, 88,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,223, 54, 58,100,  7,  7,
 42,  5,  0, 18,  6,  1, 26,  0,  4,115,  8, 41,201, 62,105,
185, 54, 85,152, 47, 64, 97, 32, 34, 75, 42, 32, 33, 12, 14,
 22,  7,  0, 82, 36, 35,146, 47, 63,179, 52, 88,186, 63,106,
 62,  0, 10, 26,  0,  4, 16,  7,  0, 36,  8,  0,101, 18, 14,
221, 56, 60,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,200,176, 64,
200,176, 64,200,176, 64,200,176, 64,200,176, 64,200,176, 64,
200,176, 64,200,176, 64,200,176, 64,200,176, 64,200,176, 64,
200,176, 64,200,176, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,221, 56, 60,
101, 18, 14, 36,  8,  0, 16,  7,  0, 26,  0,  4,113,  8, 40,
201, 62,105,183, 54, 84,150, 47, 64, 94, 37, 35, 71, 43, 34,
  0,  0,  0, 22,  7,  0, 82, 36, 35,148, 47, 63,179, 52, 88,
186, 63,106, 62,  0, 10, 26,  0,  4, 15,  7,  0, 32, 11,  0,
 94, 20, 11,219, 58, 58,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,  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,  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,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
219, 58, 58, 94, 20, 11, 32, 11,  0, 15,  7,  0, 26,  0,  4,
113,  8, 40,201, 62,105,183, 54, 84,148, 47, 63, 85, 38, 36,
 24,  6,  0,  0,  0,  0, 22,  7,  0, 82, 36, 35,148, 47, 63,
179, 52, 88,186, 63,106, 62,  0, 10, 26,  0,  4, 11,  7,  0,
 24, 11,  0, 88, 21, 15,217, 58, 58,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
  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,  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,  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,217, 58, 58, 88, 21, 15, 24, 11,  0, 11,  7,  0,
 26,  0,  4,113,  8, 40,201, 62,105,183, 54, 84,146, 47, 63,
 82, 36, 35, 30, 10,  4,  0,  0,  0, 24,  7,  0, 84, 36, 35,
146, 47, 63,179, 52, 88,186, 63,106, 62,  0, 10, 26,  0,  4,
  8,  7,  3, 11,  7,  0, 56,  2,  0,214, 55, 59,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,  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,
  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,  0,  0,  0,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,  0,  0,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,214, 55, 59, 56,  2,  0, 11,  7,  0,
  8,  7,  3, 26,  0,  4,113,  8, 40,201, 62,105,183, 54, 84,
146, 47, 63, 82, 36, 35, 30, 10,  4,  0,  0,  0, 24,  7,  0,
 84, 36, 35,146, 47, 63,178, 51, 87,186, 63,106, 62,  0, 10,
 26,  0,  4,  7,  2,  6,  7,  2,  6, 48,  2,  0,212, 55, 59,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,212, 55, 59, 48,  2,  0,
  7,  2,  6,  7,  2,  6, 26,  0,  4,114,  7, 40,201, 62,105,
185, 54, 85,146, 47, 63, 82, 36, 35, 30, 10,  4,  0,  0,  0,
 30, 10,  4, 82, 36, 35,146, 47, 63,178, 51, 87,186, 63,106,
 62,  0, 10, 26,  0,  4,  7,  2,  6,  7,  2,  6, 48,  2,  0,
212, 55, 59,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,
254, 45, 55,254, 45, 55,254, 45, 55,254, 45, 55,212, 55, 59,
 48,  2,  0,  7,  2,  6,  7,  2,  6, 26,  0,  4,114,  7, 40,
201, 62,105,185, 54, 85,146, 47, 63, 82, 36, 35, 30,  9,  4,
  0,  0,  0, 30, 10,  4, 82, 36, 35,146, 47, 63,178, 51, 87,
186, 63,106, 62,  0, 10, 26,  0,  4,  7,  2,  6,  7,  2,  6,
 44,  2,  0,192, 59, 65,230, 51, 60,231, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,233, 50, 59,
233, 50, 59,233, 50, 59,233, 50, 59,231, 50, 59,230, 51, 60,
192, 59, 65, 44,  2,  0,  7,  2,  6,  7,  2,  6, 26,  0,  4,
114,  7, 40,202, 63,106,185, 52, 86,146, 45, 64, 82, 35, 36,
 30,  9,  4,  0,  0,  0, 30, 10,  4, 82, 36, 35,146, 47, 63,
178, 51, 87,186, 63,106, 62,  0, 10, 26,  0,  6,  6,  5,  3,
  6,  5,  3, 30,  1,  1, 92,  5,  7,179, 62, 64,185, 60, 66,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,
189, 60, 63,189, 60, 63,189, 60, 63,189, 60, 63,185, 60, 66,
179, 62, 64, 92,  5,  7, 30,  1,  1,  6,  5,  3,  6,  5,  3,
 26,  0,  6,115,  8, 41,201, 62,105,185, 52, 86,146, 45, 64,
 82, 35, 36, 30,  9,  4,  0,  0,  0, 30, 10,  4, 82, 36, 35,
146, 47, 63,177, 54, 86,186, 63,106, 62,  0, 10, 24,  0,  6,
  6,  5,  3,  6,  5,  3, 18,  3,  1, 48,  2,  0, 62,  2,  0,
 68,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0,
 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0,
 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0,
 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0,
 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0,
 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0,
 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0,
 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0,
 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0,
 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0,
 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0,
 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0,
 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0, 72,  3,  0,
 68,  3,  0, 62,  2,  0, 48,  2,  0, 18,  3,  1,  6,  5,  3,
  6,  5,  3, 24,  0,  6,115,  8, 41,201, 62,105,185, 52, 86,
146, 45, 64, 82, 36, 35, 30,  9,  4,  0,  0,  0, 30,  9,  4,
 82, 36, 35,146, 47, 63,177, 54, 86,186, 63,106, 62,  0, 10,
 24,  0,  5,  8,  3,  5,  7,  2,  6,  9,  5,  2, 20,  3,  1,
 23,  2,  2, 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0,
 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0,
 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0,
 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0,
 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0,
 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0,
 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0,
 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0,
 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0,
 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0,
 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0,
 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0,
 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0, 27,  2,  0,
 27,  2,  0, 27,  2,  0, 23,  2,  2, 20,  3,  1,  9,  5,  2,
  7,  2,  6,  8,  3,  5, 24,  0,  5,115,  8, 41,201, 62,105,
185, 54, 85,146, 45, 64, 82, 36, 35, 30, 10,  4,  0,  0,  0,
 30,  9,  4, 82, 36, 35,148, 49, 63,178, 55, 84,186, 63,106,
 62,  0, 10, 24,  0,  5,  8,  3,  5,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  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,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,  0,  0,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  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,  0,  0,  0,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  5,  7,  2,  5,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  8,  3,  5, 24,  0,  5,115,  8, 41,
202, 63,102,185, 54, 85,146, 47, 63, 82, 36, 35, 30, 10,  4,
  0,  0,  0, 30, 10,  4, 84, 35, 36,150, 49, 61,182, 55, 85,
187, 64,107, 62,  0,  8, 22,  0,  4,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  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,
  0,  0,  0,  0,  0,  0,  7,  2,  6,  7,  2,  6,  8,  3,  7,
  8,  3,  7,  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,
  0,  0,  0,  0,  0,  0,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  6,  4,  3,  6,  4,  3,
  7,  6,  3,  7,  6,  3,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6, 30,  0,  4,
115,  8, 41,202, 63,102,186, 55, 82,148, 49, 63, 82, 35, 36,
 60, 23, 21,  0,  0,  0, 30, 10,  4, 84, 35, 36,152, 51, 60,
166, 39, 63,190, 63,105, 64,  0,  9, 26,  0,  4,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  6,  1,  5,  6,  1,  5,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  8,  3,  7,  8,  3,  7,  8,  3,  7,
  8,  3,  7,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  8,  3,  7,  8,  3,  7,  7,  2,  6,  7,  2,  6,  8,  3,  7,
  8,  3,  7,  8,  3,  7,  8,  3,  7,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  6,  4,  3,
  6,  4,  3,  7,  6,  3,  7,  6,  3,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
 30,  0,  4,113,  6, 41,200, 61,104,165, 36, 63,146, 49, 63,
 81, 35, 34, 30,  7,  4,  0,  0,  0, 30, 10,  4, 84, 36, 35,
156, 55, 60,169, 42, 63,194, 63,106, 70,  0,  9, 28,  0,  5,
  7,  2,  6,  7,  2,  6,  6,  1,  5,  7,  2,  6,  7,  2,  6,
  8,  3,  7,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,  7,  2,  6,
  7,  2,  6, 30,  0,  4,110,  5, 42,196, 59,104,158, 35, 64,
141, 50, 65, 81, 34, 35, 26,  3,  0,  0,  0,  0,  0,  0,  0,
 82, 38, 35, 97, 10,  8,165, 46, 60,188, 59, 92, 90,  0, 19,
 38,  0,  4, 16,  3,  3, 13,  5,  2, 11,  7,  2, 11,  7,  2,
 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2,
 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2,
 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2,
 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2,
 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2,
 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2,
 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2,
 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2,
 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2,
 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2,
 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2,
 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2,
 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2,
 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2, 11,  7,  2,
 13,  5,  2, 18,  1,  3, 41,  0,  3,147, 32, 70,188, 53, 94,
240,129,153,211,132,143,184,143,146, 58, 39, 37,172,168,163,
  0,  0,  0, 73, 39, 36,108, 31, 31,158, 57, 59,164, 43, 63,
171, 60, 84, 58,  0,  2, 36,  0,  3, 27,  3,  0, 22,  7,  0,
 22,  6,  0, 22,  6,  0, 22,  7,  0, 24,  8,  0, 22,  6,  0,
 22,  6,  0, 22,  7,  0, 22,  7,  0, 22,  6,  0, 22,  6,  0,
 22,  7,  0, 22,  7,  0, 22,  6,  0, 22,  6,  0, 22,  7,  0,
 22,  7,  0, 22,  6,  0, 22,  6,  0, 22,  7,  0, 22,  7,  0,
 22,  7,  0, 22,  7,  0, 22,  7,  0, 22,  7,  0, 22,  6,  0,
 22,  6,  0, 22,  7,  0, 22,  7,  0, 22,  7,  0, 22,  7,  0,
 22,  7,  0, 22,  7,  0, 22,  6,  0, 22,  6,  0, 22,  7,  0,
 22,  7,  0, 22,  6,  0, 22,  6,  0, 22,  7,  0, 22,  7,  0,
 22,  6,  0, 22,  6,  0, 22,  7,  0, 22,  7,  0, 22,  6,  0,
 22,  6,  0, 22,  7,  0, 22,  7,  0, 22,  6,  0, 22,  6,  0,
 22,  7,  0, 22,  7,  0, 22,  6,  0, 22,  6,  0, 22,  7,  0,
 22,  6,  0, 22,  6,  0, 22,  6,  0, 22,  6,  0, 22,  7,  0,
 22,  6,  0, 22,  6,  0, 22,  7,  0, 22,  7,  0, 24,  6,  0,
 24,  6,  0, 22,  7,  0, 22,  7,  0, 22,  6,  0, 22,  6,  0,
 22,  7,  0, 29,  2,  0, 40,  0,  2,102, 17, 39,199, 68,102,
169, 32, 64,174, 79, 95,148, 87, 94,208,177,180,173,164,164,
254,252,251,  0,  0,  0, 28,  4,  0, 91, 36, 32, 90, 13,  9,
160, 53, 58,160, 47, 63,168, 73, 91, 76,  1, 13, 89, 36, 34,
 84, 36, 35, 82, 36, 35, 82, 36, 35, 81, 35, 34, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 35, 36,
 82, 35, 36, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 35, 36, 82, 35, 36, 82, 36, 35,
 82, 36, 35, 82, 35, 36, 82, 35, 36, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 35, 36, 82, 35, 36, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 84, 36, 35, 84, 36, 35, 84, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 84, 35, 36, 91, 34, 35,133, 52, 67,176, 69, 92,
170, 39, 63,166, 43, 63,163, 88, 95,126, 85, 86,148,129,130,
227,223,222,166,165,163,  0,  0,  0,  0,  0,  0, 32,  3,  0,
 92, 35, 33, 98,  9,  7,166, 53, 56,164, 51, 59,160, 51, 58,
157, 54, 58,152, 53, 60,167, 68, 82,165, 66, 82,168, 67, 83,
167, 66, 82,165, 66, 82,165, 66, 82,167, 66, 82,167, 66, 82,
165, 66, 82,165, 66, 82,167, 66, 82,167, 66, 82,165, 66, 82,
165, 66, 82,167, 66, 82,167, 66, 82,165, 66, 82,165, 66, 82,
167, 66, 82,167, 66, 82,165, 66, 82,165, 66, 82,167, 66, 82,
167, 66, 82,165, 66, 82,165, 66, 82,167, 66, 82,167, 66, 82,
165, 66, 82,165, 66, 82,167, 66, 82,167, 66, 82,165, 66, 82,
165, 66, 82,167, 66, 82,167, 66, 82,165, 66, 82,165, 66, 82,
167, 66, 82,167, 66, 82,165, 66, 82,165, 66, 82,167, 66, 82,
167, 66, 82,165, 66, 82,165, 66, 82,167, 66, 82,167, 66, 82,
165, 66, 82,165, 66, 82,167, 66, 82,167, 66, 82,165, 66, 82,
165, 66, 82,167, 66, 82,167, 66, 82,165, 64, 83,165, 64, 83,
167, 66, 82,167, 66, 82,165, 66, 82,165, 66, 82,167, 66, 82,
167, 66, 82,165, 66, 82,167, 66, 82,167, 66, 82,167, 66, 82,
165, 66, 82,167, 68, 82,152, 53, 60,156, 53, 60,162, 49, 60,
166, 49, 58,169, 50, 56,101,  4,  7, 89, 34, 34, 26,  2,  0,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,  0,  0, 73, 39, 36,101, 32, 34, 96, 13,  9,101,  6,  6,
155, 56, 58,154, 55, 57,152, 53, 60,148, 49, 63,146, 45, 64,
148, 47, 63,148, 47, 63,146, 47, 63,146, 47, 63,148, 47, 63,
148, 47, 63,146, 47, 63,146, 47, 63,148, 47, 63,148, 47, 63,
146, 47, 63,146, 47, 63,148, 47, 63,148, 47, 63,146, 47, 63,
146, 47, 63,148, 47, 63,148, 47, 63,146, 47, 63,146, 47, 63,
148, 47, 63,148, 47, 63,146, 47, 63,146, 47, 63,148, 47, 63,
148, 47, 63,146, 47, 63,146, 47, 63,148, 47, 63,148, 47, 63,
146, 47, 63,146, 47, 63,148, 47, 63,148, 47, 63,146, 47, 63,
146, 47, 63,148, 47, 63,148, 47, 63,146, 47, 63,146, 47, 63,
148, 47, 63,148, 47, 63,146, 47, 63,146, 47, 63,148, 47, 63,
148, 47, 63,146, 47, 63,146, 47, 63,148, 47, 63,148, 47, 63,
146, 47, 63,146, 47, 63,148, 47, 63,148, 47, 63,146, 47, 63,
146, 47, 63,148, 47, 63,148, 47, 63,146, 47, 63,146, 47, 63,
148, 47, 63,148, 47, 63,146, 47, 63,146, 47, 63,148, 47, 63,
148, 47, 63,146, 47, 63,147, 48, 62,152, 51, 60,155, 54, 59,
155, 56, 58,100,  5,  5, 96, 13,  9,101, 33, 32, 73, 40, 34,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  2,  0, 76, 38, 35,
 82, 35, 35, 85, 36, 34, 85, 36, 34, 84, 35, 36, 82, 36, 35,
 82, 35, 36, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35,
 82, 36, 35, 82, 36, 35, 82, 36, 35, 82, 36, 35, 84, 35, 36,
 85, 36, 37, 85, 36, 34, 82, 35, 35, 77, 39, 36, 32,  3,  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,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0, 30,  9,  4, 30,  9,  4, 30,  9,  4,
 30,  9,  4, 30,  9,  4, 30,  9,  4, 30,  9,  4, 30, 10,  4,
 30, 10,  4, 30, 10,  4, 30, 10,  4, 30,  9,  4, 30,  9,  4,
 30, 10,  4, 30, 10,  4, 30,  9,  4, 30,  9,  4, 30, 10,  4,
 30, 10,  4, 30,  9,  4, 30,  9,  4, 30, 10,  4, 30, 10,  4,
 30, 10,  4, 30, 10,  4, 30, 10,  4, 30, 10,  4, 30,  9,  4,
 30,  9,  4, 30, 10,  4, 30, 10,  4, 30, 10,  4, 30, 10,  4,
 30, 10,  4, 30, 10,  4, 30,  9,  4, 30,  9,  4, 30, 10,  4,
 30, 10,  4, 30,  9,  4, 30,  9,  4, 30, 10,  4, 30, 10,  4,
 30,  9,  4, 30,  9,  4, 30, 10,  4, 30, 10,  4, 30,  9,  4,
 30,  9,  4, 30, 10,  4, 30, 10,  4, 30,  9,  4, 30,  9,  4,
 30, 10,  4, 30, 10,  4, 30, 10,  4, 30, 10,  4, 30, 10,  4,
 30, 10,  4, 30,  9,  4, 30,  9,  4, 30, 10,  4, 30, 10,  4,
 30,  9,  4, 30,  9,  4, 30, 10,  4, 30, 10,  4, 30,  9,  4,
 30,  9,  4, 30, 10,  4, 30, 10,  4, 30,  9,  4, 30,  9,  4,
 30,  8,  4, 30,  9,  4, 30,  9,  4,  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,  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,  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,
  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,  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,  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,  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,  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,
  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,  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,  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,  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,  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,
  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,  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,  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,  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,  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,
  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,  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,  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,  0,  0,  0};

--- >8 ----
List archives:  http://www.xiph.org/archives/
Ogg project homepage: http://www.xiph.org/ogg/
To unsubscribe from this list, send a message to 'cvs-request at xiph.org'
containing only the word 'unsubscribe' in the body.  No subject is needed.
Unsubscribe messages sent to the list will be ignored/filtered.



More information about the commits mailing list